在云计算与微服务架构快速发展的今天,容器化部署已成为运维工程师的必备技能。本文延续KVM虚拟化基础实践,深入探讨KVM存储管理、快照克隆、资源优化,并系统讲解Docker核心原理与安装部署。通过本文,你将掌握从传统虚拟化到容器编排的完整知识链路,为后续学习K8s(Kubernetes)打下坚实基础。

KVM存储管理:从默认池到自定义池

KVM的存储管理是虚拟机运维的基础。默认情况下,libvirt会创建一个名为default的存储池,路径通常为/var/lib/libvirt/images。通过以下命令可以查看和管理存储池:

  • 查看所有存储池virsh pool-list --all
  • 启动并设置自动启动virsh pool-start default + virsh pool-autostart default
  • 创建自定义本地存储池:先创建目录mkdir -p /kvmdata,再执行virsh pool-define-as mypool dir - - - - "/kvmdata"
  • 启动并验证virsh pool-start mypoolvirsh pool-autostart mypoolvirsh pool-list --allvirsh pool-info mypool
  • 停止与重启virsh pool-destroy mypool 后再 virsh pool-start mypool

最佳实践:建议将存储池挂载在独立的数据盘或NAS上,避免与系统盘争抢I/O资源。

虚拟机磁盘扩容与分区实战

当虚拟机磁盘空间不足时,无需重建虚拟机,可直接通过qemu-img工具在线扩容。以下是对KVM-Test1虚拟机扩展5GB磁盘的完整流程:

  1. 扩展磁盘镜像qemu-img resize /var/lib/libvirt/images/KVM-Test1.qcow2 +5G
  2. 让系统识别新空间:登录虚拟机,执行tee /sys/block/vda/device/rescan扫描新磁盘
  3. 创建新分区fdisk /dev/vda,依次输入n(新建分区)、p(主分区)、默认分区号、w(保存)
  4. 格式化并挂载mkfs.ext4 /dev/vda3mkdir /datamount /dev/vda3 /data
  5. 设置开机自动挂载echo '/dev/vda3 /data ext4 defaults 0 0' >> /etc/fstab
⚠️ 注意:如果虚拟机使用LVM逻辑卷,建议在分区后通过pvcreatelvextend扩展逻辑卷,而非直接格式化新分区。

KVM快照与克隆:快速复制与恢复

KVM的快照和克隆功能是日常运维中高频使用的特性。快照用于保存虚拟机的某一时刻状态,便于故障回滚;克隆则用于快速批量部署相同配置的虚拟机。

  • 创建快照:在virt-manager图形界面中,右键虚拟机 → 快照 → 创建;命令行使用virsh snapshot-create-as KVM-Test1 snapshot1
  • 恢复快照virsh snapshot-revert KVM-Test1 snapshot1
  • 克隆虚拟机:图形化操作在virt-manager中完成;若磁盘空间不足导致图形化失败,可使用命令行:virt-clone --original KVM-Test1 --name KVM-Clone1 --auto-clone

克隆完成后,启动KVM-Clone1并检查网络配置。由于克隆机与源虚拟机在同一网段(桥接模式),通常能自动获取合法IP。执行ping -c 2 192.168.11.145ping -c 2 8.8.8.8验证连通性。若不通,检查网卡配置和网关设置。

⚡ KVM资源优化:内存气球与CPU热插拔

KVM支持动态调整虚拟机的CPU和内存,无需重启。以KVM-Test2为例,演示命令行配置内存气球技术和CPU热插拔:

  1. 编辑虚拟机配置virsh edit KVM-Test2
  2. 修改内存气球:在标签中,添加启用监控
  3. 配置CPU热插拔:将2改为4,并添加
  4. 启动并验证virsh start KVM-Test2virsh dominfo KVM-Test2
优化效果:内存气球技术允许宿主机回收空闲内存,提高整体资源利用率;CPU热插拔使虚拟机可动态调整计算能力,非常适合容器化部署场景下的弹性伸缩需求。

Docker核心概念:镜像、容器、仓库

Docker作为容器编排的基石,其核心组件包括镜像(Image)、容器(Container)和仓库(Repository)。理解这三者的关系是掌握Docker的关键。

  • 镜像(Image):静态的只读模板,包含应用代码、运行时环境、系统工具、库文件等。采用分层存储结构(UnionFS),多个镜像可共享基础层,大幅节省空间。关键特性:只读性、内容寻址、写时复制(Copy-on-Write)。
  • 容器(Container):镜像的运行实例,本质是被隔离的进程。利用Linux Namespace实现隔离,Cgroups限制资源。容器层可读写,但默认临时性(停止后修改丢失)。
  • 仓库(Repository):集中存放和分发镜像的地方,如Docker Hub、阿里云容器镜像服务(ACR)。核心操作:docker pulldocker pushdocker build

三者协作流程:Dockerfiledocker builddocker pushdocker pulldocker run,实现“一次构建,到处运行”。

Docker相比传统虚拟机的核心优势:

  • 轻量化:共享宿主机内核,镜像仅几十MB(虚拟机GB级别)
  • 毫秒级启动:无需引导完整OS,秒级甚至毫秒级启动
  • 环境一致性:根治“在我机器上能跑”问题
  • 高效资源利用:相同硬件可运行数倍于虚拟机的容器实例
对比
对比维度Docker容器传统虚拟机
虚拟化层级操作系统级虚拟化(进程级隔离)硬件级虚拟化(通过Hypervisor模拟完整硬件)
内核所有容器共享宿主机内核每个VM拥有独立的操作系统内核
启动时间毫秒级分钟级(30秒-数分钟)
镜像/磁盘大小MB级别(几十~数百MB)GB级别(数GB~数十GB)
资源占用极少,无Guest OS开销较大,每个VM需运行完整OS
性能接近原生物理机有一定Hypervisor层损耗
隔离性中等(Namespace + Cgroups),容器共享内核强(完全硬件隔离),不同VM互不影响
可移植性高(镜像跨平台标准)较低(依赖特定Hypervisor和硬件)
管理复杂度低(轻量,可快速创建/销毁/扩展)高(需管理完整OS生命周期)
典型场景微服务、CI/CD、开发测试环境多租户强隔离、遗留应用、不同OS共存

实际场景:Docker和虚拟机并非对立,常结合使用——物理机运行虚拟机提供强隔离,虚拟机内运行Docker容器实现高密度部署。

[AFFILIATE_SLOT_1]

Docker安装与镜像加速器配置

在CentOS/RHEL 8+系统中,安装Docker需先移除系统自带的旧版本,再安装官方仓库的最新版:

  1. 卸载旧版dnf remove -y docker* docker-client* docker-common*
  2. 安装依赖dnf install -y yum-utils device-mapper-persistent-data lvm2
  3. 添加Docker CE仓库yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  4. 安装Docker CEdnf install -y docker-ce docker-ce-cli containerd.io

安装完成后,配置阿里云镜像加速器提升国内镜像拉取速度:

  1. 登录阿里云控制台 → 容器镜像服务 → 镜像加速器 → 复制加速器地址
  2. 创建配置文件:mkdir -p /etc/dockercat > /etc/docker/daemon.json <
  3. 重启Docker并验证:systemctl restart dockerdocker info | grep -A 2 "registry Mirrors"
[AFFILIATE_SLOT_2]

总结

本文从KVM存储管理出发,覆盖了磁盘扩容、快照克隆、资源优化等实战技巧,并系统讲解了Docker的核心概念、优势及安装配置。掌握这些技能,你已具备从传统虚拟化向容器化部署转型的基础能力。下一步,建议深入学习Docker Compose实现多容器编排,进而探索Kubernetes(K8s)实现生产级容器编排管理。容器化之路,从今天开始!