当前位置: 首页 > news >正文

虚拟化技术,容器技术和Docker

目录

一.虚拟化技术解决了哪些问题,优势是哪些?

1.1 虚拟化技术解决的问题

1.2 虚拟化技术的优势 

二.容器增强了哪些能力、应用场景是什么

2.1 容器增强的能力

三. 虚拟化 vs 容器化

四. Docker

4.1 定义

4.2 docker的安装步骤 

4.3 docker的基本操作

4.4 docker的网络实现原理

4.5 Docker 的网络模式

1. Bridge 模式

网络命名空间

Veth 对

docker0 网桥

2. Host 模式 

3. container模式

4. none模式 

5. Overlay 网络模式

关键组件说明:

6. load balance模式


一.虚拟化技术解决了哪些问题,优势是哪些?

1.1 虚拟化技术解决的问题

1. 物理资源利用率低下

  • 问题:传统服务器通常仅运行单一应用,CPU利用率不足20%,内存和存储资源大量闲置。

  • 解决:通过虚拟化将一台物理服务器划分为多个虚拟机(VM)或容器,使资源利用率提升至70%以上。

2. 硬件依赖性强

  • 问题:应用与物理硬件绑定(如特定型号的服务器),迁移或扩展需重新部署。

  • 解决:虚拟化抽象硬件层,应用以镜像形式运行在任意兼容的虚拟化平台上(如从本地迁移到云)。

3. 环境不一致性

  • 问题:开发、测试、生产环境配置差异导致“在我机器上能跑”的经典问题。

  • 解决:通过虚拟机模板或容器镜像实现环境标准化,确保全生命周期一致性。

4. 高可用性与灾备困难

  • 问题:物理服务器故障导致服务中断,恢复时间长。

  • 解决:虚拟机快照(Snapshot)、实时迁移(Live Migration)和容器编排(如K8s)实现秒级故障转移。

5. 成本高昂

  • 问题:购买和维护大量物理服务器,电力、散热、机房空间成本高。

  • 解决:服务器整合(如将10台物理机合并为1台运行10个VM),降低硬件和运维成本。

6. 安全隔离不足

  • 问题:多个应用运行在同一OS上,漏洞可能横向扩散。

  • 解决:虚拟机(完全隔离)或容器(进程级隔离)提供独立运行环境

1.2 虚拟化技术的优势 

1. 资源池化与动态分配

2. 隔离性与安全性

3. 快速部署与自动化

4. 高可用与弹性

5. 降低成本

6. 兼容性与跨平台

二.容器增强了哪些能力、应用场景是什么

2.1 容器增强的能力

1. 极致的轻量化与高性能

2. 环境一致性

3. 快速弹性伸缩

  • 结合编排工具(如Kubernetes),可实现秒级扩容/缩容,自动应对流量高峰。

  • 支持动态负载均衡和自愈(故障容器自动重启)。

4. 跨平台与混合云部署 

三. 虚拟化 vs 容器化

对比维度虚拟化(VM)容器化(Docker)
隔离级别硬件级(完整OS隔离)进程级(共享内核)
启动速度分钟级秒级
资源占用高(每个VM需独立OS)低(共享主机内核)
性能损耗较高(需通过Hypervisor转换指令)极低(直接调用主机内核)
典型应用场景传统企业应用、多操作系统需求微服务、CI/CD、云原生应用

四. Docker

4.1 定义

Docker 是一种开源的容器化平台,用于快速构建、部署和运行应用程序。它通过轻量级的“容器”(Container)技术,将应用及其依赖环境打包在一起

4.2 docker的安装步骤 


#修改主机名
[root@localhost ~]# hostnamectl set-hostname docker-luck-cloud01
[root@localhost ~]# su#关闭防火墙与核心防护(永久)
[root@docker-luck-cloud01 ~]# systemctl stop firewalld
[root@docker-luck-cloud01 ~]# systemctl disable firewalld
[root@docker-luck-cloud01 ~]# setenforce 0
[root@docker-luck-cloud01 ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config
#安装依赖环境
[root@docker-luck-cloud01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2#设置阿里云镜像源
[root@docker-luck-cloud01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
#安装docker-ce(社区版)
[root@docker-luck-cloud01 ~]# yum install -y docker-ce docker-ce-cli containerd.io
#设置开机自启动并立即启动
[root@docker-luck-cloud01 ~]# systemctl enable docker.service --now
#申请华为云镜像加速器cd /etc/docker
vim daemon.json{"registry-mirrors": [ "https://0f8a3388042b4b0ab6611ccc6e866ab3.mirror.swr.myhuaweicloud.com" ]
}systemctl daemon-reload
systemctl restart docker

4.3 docker的基本操作

# 镜像的增删改查
docker images                               查看镜像列表docker pull image_name:tag                  下载镜像docker tag image_name:tag new_name:new_tag  给镜像打标签docker rmi image_id/image_name:tag          删除镜像docker inspect image_id/image_name:tag      查看镜像的详细信息docker save -o file_name image_name:tag     将镜像导出为文件(模板)docker load -i file_name                    将文件导入到docker内(导入为镜像)#容器的增删改查docker ps -a                                            查看所有状态的容器docker run -itd image name:tag [/bin/bash......]        下载并将镜像运行为容器(-i让容器可以接受宿主机的指令,-t 为容器分配一个伪终端,让用户可以“登录”进容器,-d分配一个守护进程,这样可以让容器运行时不占用前端终端)docker rm [-f]                              默认删除非运行状态的容器,加 -f 强制删除所有容器docker ps -aq                               列出所有容器的容器IDdocker export 容器ID/容器名字 > file_name    将容器导出为文件cat file_name | docker import - new_image_name    将容器导出的文件导入为镜像docker start/stop/restart 容器IDC                 对容器进行开启/关闭/重启动作docker inspect 容器ID/容器名字                     查看容器详细信息docker exec -it 容器ID/容器名字 bash [-c cmd]      进入容器,-c 像容器内部传入指令docker run -itd -P/-p image_id:tag   -P 将内部端口设备从32768开始的端口,-p映射,如:‘83:80’ 宿主机端口:容器内部端口#容器网络的操作docker network ls                                           查看当前docker的网络模式的信息docker network create --driver name --subnet 子网段  --gateway  指定网关IP net_name 自定义网络docker run -itd --name c_name --network net-name image_name:tag   指定使用哪个网络docker run -itd --name c2_name --network=container:c1_name image_name:tag   container模式

4.4 docker的网络实现原理

Docker 使用 Linux 桥接技术,在宿主机上虚拟一个名为 docker0 的 Docker 容器网桥。当 Docker 启动一个容器时,会根据 docker0 网桥的网段分配给容器一个 IP 地址(Container-IP)。由于同一宿主机内的容器都连接到同一个网桥,因此容器之间可以通过各自的 Container-IP 直接通信。

Docker 网桥是虚拟的,不是真实存在的网络设备,因此外部网络无法直接寻址到它,这意味着外部网络无法直接通过 Container-IP 访问容器。如果希望外部网络能够访问容器,可以通过端口映射将容器端口映射到宿主主机,即使用 docker run 命令的 -p-P 参数。

4.5 Docker 的网络模式

1. Bridge 模式

  • 当你启动一个容器而不指定网络模式时,Docker 默认使用 bridge 模式。

  • 容器通过 docker0 网桥与宿主机通信,适用于单机容器网络。

  • 特点:容器分配独立 IP,通过 NAT 访问外部网络。

网络命名空间
  • 每个容器启动时,Docker 会为其创建一个独立的 网络命名空间,隔离网络设备、IP、端口、路由等。

Veth 对
  • Docker 会为每个容器创建一对 veth 设备

    • 一端在容器内(通常命名为 eth0)。

    • 另一端连接到宿主机的 docker0 网桥。

  • 作用:实现容器与宿主机之间的网络通信。

docker0 网桥
  • docker0 是 Docker 默认创建的 Linux 网桥(软件交换机),所有容器(Bridge 模式)的 veth 端点都连接到它。

  • 功能

    • 为容器分配 IP(默认 172.17.0.0/16)。

    • 实现容器间通信(同主机)。

    • 通过 NAT 实现容器访问外网。

docker 0 的作用:网关,端口映射,负载均衡 

面试题:介绍一下dicker0网桥

 docker0 是所有容器的默认网关

docker0通过veth对与容器进行网络通讯

docker0可以将容器内部的端口(服务)映射到宿主机环境,从而被外网客户端访问到

2. Host 模式 

容器直接使用宿主机的ip与端口,没有自己的ip

3. container模式

  • 网络共享:两个容器共享 IP 地址、端口空间,可以通过 localhost 互相通信。

  • 独立文件系统:除了网络,其他命名空间(如进程、文件系统)仍然是独立的。

  • 多个容器需要共享网络配置,如一组协作的微服务。

4. none模式 

容器没有任何网络配置,相当于断网。

5. Overlay 网络模式

用于在多个 Docker 主机之间创建一个虚拟的分布式网络,让容器可以跨主机通信。 

+-------------------------------------------------------+
|                  物理网络(Underlay)                   |
|   (e.g., 192.168.1.0/24, 10.0.0.0/16, 云厂商VPC)       |
+-------------------------------------------------------+↑               ↑               ↑|VXLAN封装       |VXLAN封装       |
+----------+-------+ +------+--------+ +----+----------+
|   Docker Node1   | |   Docker Node2  | | Docker Node3  |
| +--------------+ | | +-------------+ | | +-----------+ |
| | Container A  | | | | Container B | | | |Container C| |
| | 10.0.0.2     | | | | 10.0.0.3    | | | | 10.0.0.4  | |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
|         |eth0    | |        |eth0     | |       |eth0   |
|         v        | |        v         | |       v       |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
| | veth (vethA) | | | | veth (vethB)| | | |veth (vethC)| |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
|         |        | |        |         | |       |       |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
| | docker_gwbridge| | | docker_gwbridge| | |docker_gwbr| |
| | (172.18.0.1)  | | | (172.18.0.2)   | | | (172.18.0.3)|
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
|         |        | |        |         | |       |       |
| +-------+------+ | | +------+-------+ | | +-----+-----+ |
| | Overlay Net  | | | | Overlay Net  | | | | Overlay Net|
| | (VXLAN)      | | | | (VXLAN)      | | | | (VXLAN)    |
| +--------------+ | | +-------------+ | | +-----------+ |
+------------------+ +----------------+ +---------------+
关键组件说明
  1. 容器 (Container A/B/C)

    • 每个容器分配唯一的 Overlay IP(如 10.0.0.2/24)。

  2. veth 对

    • 连接容器和宿主机网络栈(如 vethA ↔ eth0)。

  3. docker_gwbridge

    • 宿主机上的桥接网络,处理容器对外通信(非 Overlay 流量)。

  4. Overlay 网络 (VXLAN)

    • 跨主机的虚拟网络,数据包通过 UDP 4789 端口封装传输。

  5. 物理网络

    • 底层网络(如 AWS VPC、本地数据中心),承载 VXLAN 流量。

 

6. load balance模式

http://www.dtcms.com/a/271361.html

相关文章:

  • Android View 绘制流程 简述 (无限递归+BitMap问题)
  • android activity生命周期温习
  • Java HashMap 的 get 和 put 方法的实现流程
  • android——热修复(补丁)
  • 微软官方C++构建工具:历史演变、核心组件与现代实践指南
  • SQL注入:现象、本质与防御详解
  • 文本标签提取与大模型理解:方法论深度指南
  • Kubernetes 集群部署、配置和验证-使用kubeadm快速部署一个K8s集群_笔记
  • 【K8S】在 Kubernetes 上配置安装 Nginx Ingress 控制器指南
  • 使用LLaMA-Factory微调Qwen2.5-VL-3B 的目标检测任务-LLaMA-Factory训练数据配置
  • 图像处理中的霍夫变换:直线检测与圆检测
  • 【软件运维】前后端部署启动的几种方式
  • 区块链系统开发技术应用构建可信数字生态链
  • 股指期货交割日避坑指南
  • 【MkDocs踩坑】图片路径问题的排查与解决
  • 由 DB_FILES 参数导致的 dg 服务器无法同步问题
  • 【动手学深度学习】4.10 实战Kaggle比赛:预测房价
  • Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
  • 深度学习预备知识
  • MyBatisPlus-03-扩展功能
  • 基于Matlab多特征融合的可视化指纹识别系统
  • 常见 HTTP 方法的成功状态码200,204,202,201
  • whitt算法之特征向量的尺度
  • 利用编码ai工具cursor写单元测试
  • springMVC06-注解+配置类实现springMVC
  • Java位运算
  • Electron的setContentProtection()会被哪个层级的API捕获?
  • 【TCP/IP】3. IP 地址
  • 储能系统防孤岛保护测试:电网安全的“守门人”
  • C#字符串相关库函数运用梳理总结 + 正则表达式详解