跳转至

25- 容器与虚拟化基础(Docker / Podman / KVM / LXC) 🐳

前提条件 ✅

  • 已完成 Web、数据库、邮件、VPN、高可用配置(有可容器化的服务,如 Nginx、MariaDB)
  • 以 ops 用户登录(具有 sudo 权限)
  • 系统运行在 Debian 12 Bookworm
  • 防火墙已放行容器相关端口(视应用而定,如 80/443)
  • 虚拟机环境:VMware Workstation Pro(建议至少 4核8GB内存,便于运行多个容器/KVM)

本章并行介绍容器(Docker/Podman)和轻量虚拟化(LXC)+ 完整虚拟化(KVM),生产环境推荐优先容器化。

详细步骤 🛠️

  1. Docker(最流行容器引擎)

安装官方版本(推荐,避免 Debian 仓库旧版):

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

启动并加入 ops 用户组(免 sudo 运行):

sudo systemctl enable --now docker
sudo usermod -aG docker ops
newgrp docker   # 或重新登录

测试:

docker run hello-world
docker version

  1. Podman(无守护进程、rootless、与 Docker 兼容)

安装:

sudo apt install -y podman podman-compose

rootless 模式测试:

podman run --rm hello-world
podman ps -a

Docker 兼容别名(可选):

alias docker=podman
alias docker-compose=podman-compose

  1. 简单容器化示例(Nginx)

Docker 方式:

docker run -d --name my-nginx -p 8080:80 nginx:latest
curl http://localhost:8080
docker logs my-nginx
docker stop my-nginx

Podman 方式(rootless):

podman run -d --name my-nginx -p 8080:80 nginx:latest

使用 docker-compose / podman-compose(推荐生产): 创建 docker-compose.yml:

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro

启动:

docker compose up -d
# 或 podman-compose up -d

  1. LXC(轻量容器,系统级虚拟化)

安装:

sudo apt install -y lxc lxc-templates

创建容器:

sudo lxc-create -t download -n web01 -- --dist debian --release bookworm --arch amd64
sudo lxc-start -n web01
sudo lxc-attach -n web01 -- apt update && apt install -y nginx
sudo lxc-attach -n web01 -- systemctl enable --now nginx

网络桥接(默认使用 lxcbr0):

sudo lxc-info -n web01 -iH   # 查看 IP

  1. KVM(完整虚拟化,QEMU/KVM)

安装:

sudo apt install -y qemu-kvm libvirt-clients libvirt-daemon-system virtinst bridge-utils virt-manager
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt ops
sudo usermod -aG kvm ops

创建虚拟机(命令行示例):

sudo virt-install \
  --name test-vm \
  --ram 2048 \
  --vcpus 2 \
  --disk size=20 \
  --os-variant debian12 \
  --network bridge=virbr0 \
  --graphics none \
  --location 'https://deb.debian.org/debian/dists/bookworm/main/installer-amd64/'

或使用 virt-manager 图形界面(宿主机需有桌面环境)。

  1. 生产建议对比
技术 隔离级别 资源开销 启动速度 推荐场景
Docker 进程级 秒级 微服务、CI/CD、Web 应用
Podman 进程级 秒级 rootless、安全敏感环境
LXC 系统级 秒级 完整系统容器、轻量虚拟机
KVM 硬件虚拟化 分钟级 完整 OS、Windows、测试环境

实践任务 🎯

  1. 安装 Docker,运行 hello-world 和一个 Nginx 容器,浏览器访问 8080 端口确认
  2. 安装 Podman,用 podman run 启动相同 Nginx 容器,比较与 Docker 的使用差异
  3. 创建一个 LXC 容器 web01,安装 Nginx 并从宿主机访问容器 IP 的 80 端口
  4. (可选)用 virt-install 创建一个小型 Debian KVM 虚拟机,观察资源占用

自测问题 ❓

  1. Docker 和 Podman 的最大区别是什么?为什么 Podman 更适合安全敏感环境?
  2. LXC 容器与 Docker 容器的隔离级别有何不同?
  3. KVM 虚拟机启动比容器慢的主要原因是什么?
  4. 如何让 Docker 容器使用宿主机的网络(--network host 的作用)?

总结 📌

容器(Docker/Podman)是现代应用部署的核心,轻量、快速、可移植;LXC 适合需要完整系统级的场景;KVM 适用于传统虚拟机需求。
本章建立了容器与虚拟化基础,后续可扩展 Docker Compose、Podman Pod、Kubernetes 等,形成云原生运维能力。