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

发布于:2025-07-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

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

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                               列出所有容器的容器ID

docker 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模式


网站公告

今日签到

点亮在社区的每一天
去签到