15.1.2 容器技术与虚拟化对比

容器技术与传统虚拟化的核心差异在于隔离层次、资源开销与交付方式。虚拟机通过虚拟化硬件并运行完整的客体操作系统实现隔离,启动慢、资源占用高但隔离强;容器基于宿主机内核,通过命名空间与控制组实现进程级隔离,启动快、密度高、交付轻量。生产中常见“虚拟机承载容器”的混合模式以兼顾隔离与效率。

文章图片

关键差异对比(要点)
- 性能:容器接近裸机;虚拟机有硬件抽象层损耗。
- 隔离:虚拟机边界更清晰;容器依赖内核安全机制(需加固)。
- 交付:容器镜像统一分发;虚拟机更多使用镜像模板/快照。
- 适用场景:容器适合微服务、CI/CD、弹性伸缩;虚拟机适合强隔离、多租户合规、异构内核。

示例:在同一宿主机对比启动耗时与资源#

以下以 Linux 宿主机对比容器与虚拟机的启动体验(KVM)。

1)安装基础环境

# Docker
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable --now docker

# KVM/QEMU
sudo apt-get install -y qemu-kvm libvirt-daemon-system virtinst
sudo systemctl enable --now libvirtd

2)容器启动示例(快速启动)

# 拉取轻量镜像并启动
time docker run --rm -d --name nginx_test -p 8080:80 nginx:1.25
# 预期:命令执行耗时通常 < 1s,容器立刻可访问

# 验证访问
curl -I http://127.0.0.1:8080
# 预期:HTTP/1.1 200 OK

命令解释:
- docker run -d:后台启动容器。
- --rm:退出即删除,便于测试。
- -p 8080:80:端口映射。

3)虚拟机启动示例(KVM 启动)

# 创建一台测试虚拟机(示例,使用已存在的 ISO)
sudo virt-install \
  --name vm_test \
  --ram 1024 \
  --vcpus 1 \
  --disk path=/var/lib/libvirt/images/vm_test.qcow2,size=10 \
  --cdrom /var/lib/libvirt/boot/ubuntu-22.04.iso \
  --os-variant ubuntu22.04 \
  --network network=default \
  --graphics none

# 预期:安装过程需要数分钟,启动明显慢于容器

命令解释:
- virt-install:创建并安装虚拟机。
- --disk:创建磁盘镜像(qcow2)。

安全与隔离示例(容器加固)#

# 只读文件系统 + 最小权限
docker run --rm -d --name app_secure \
  --read-only \
  --cap-drop ALL \
  --security-opt no-new-privileges \
  -p 8081:80 nginx:1.25

# 预期:容器内对根目录写入会失败
docker exec app_secure sh -c "touch /testfile" || echo "write failed"

命令解释:
- --read-only:容器文件系统只读。
- --cap-drop ALL:移除所有 Linux capabilities。
- no-new-privileges:禁止提权。

排错与诊断要点#

1)容器无法启动

# 查看错误日志
docker logs nginx_test
# 查看事件
docker events --since 5m

常见原因:
- 端口占用:ss -lntp | grep 8080
- 镜像损坏:docker pull nginx:1.25 重新拉取

2)KVM 无法创建虚拟机

# 检查虚拟化支持
egrep -c '(vmx|svm)' /proc/cpuinfo
# 预期:>0 表示支持

# 检查内核模块
lsmod | grep kvm

常见原因:
- BIOS 未开启 VT-x/AMD-V
- libvirtd 未启动:systemctl status libvirtd

练习#

  1. 使用 docker run 启动两个不同版本的 nginx 并对比启动耗时与内存占用(docker stats)。
  2. 为容器添加 --memory 128m --cpus 0.5,观察资源限制效果。
  3. 使用 virt-install 创建 1 vCPU/1GB 的虚拟机并记录安装时间。
  4. 用表格总结容器与虚拟机的隔离、性能、交付方式,并给出你的业务选择结论。