温馨提示×

centos虚拟机容器化技术如何应用

小樊
42
2026-01-07 21:19:47
栏目: 云计算

在 CentOS 虚拟机中应用容器化的主流做法

  • 在虚拟机里直接运行容器:安装 Docker,以容器承载应用,适合微服务、CI/CD、开发/测试环境。
  • 在虚拟机里运行容器化的虚拟机:在容器内启用 KVM,再创建 VM,适合需要完整 OS、嵌套虚拟化或遗留系统的场景。
  • 直接用虚拟机替代容器:使用 KVM/QEMU 创建多台 CentOS VM 搭建 Kubernetes 集群,适合有状态、隔离要求高、规模化编排的场景。

方案一 在 CentOS 虚拟机中运行 Docker 容器

  • 安装与启动
    • 安装依赖与仓库:sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    • 添加 Docker CE 仓库:sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    • 安装引擎:sudo yum install -y docker-ce docker-ce-cli containerd.io
    • 启动与自启:sudo systemctl start docker && sudo systemctl enable docker
    • 验证:docker run --rm hello-world
  • 基本用法
    • 运行交互式 CentOS 7:docker run -it --name c7 centos:7 /bin/bash
    • 数据持久化:docker run -it -v /host/data:/container/data centos:7 /bin/bash
    • 端口映射运行 Nginx:docker run -d -p 80:80 nginx
  • 适用场景
    • 快速交付应用、环境一致性、弹性伸缩、开发/测试与 CI 流水线。

方案二 在容器内启用 KVM 再创建虚拟机

  • 前提与检测
    • 宿主机需开启虚拟化(BIOS 中启用 VT-x/AMD-V),并在虚拟机设置里开启 嵌套虚拟化(如 VMware/VirtualBox 的虚拟化引擎)。
    • 在容器内检查:grep -E “vmx|svm” /proc/cpuinfo 应能看到 vmx/svm 标志。
  • 在容器内安装并启动 KVM
    • 安装组件:sudo yum install -y qemu-kvm libvirt libvirt-client virt-install virt-manager
    • 启动服务:sudo systemctl start libvirtd && sudo systemctl enable libvirtd
    • 验证网络:ip a 应看到 virbr0(默认 NAT 网络)。
  • 创建虚拟机示例
    • 创建磁盘:qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 20G
    • 安装系统(示例):virt-install --virt-type kvm --name vm1 --ram 2048 --vcpus 2 \ –cdrom=/data/iso/CentOS-7-x86_64-Minimal.iso \ –disk path=/var/lib/libvirt/images/vm1.qcow2,format=qcow2 \ –network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    • 访问控制台:使用 VNC Viewer 连接宿主机的 5900 端口(需将容器端口映射到宿主机)。
  • 容器运行要点
    • 建议使用特权模式并启动 init:docker run -itd --name kvmbox --privileged -p 20022:22 -p 25900:5900 centos:7 /usr/sbin/init
    • 在容器内使用 systemctl 需以 /usr/sbin/init 作为入口。
  • 适用场景
    • 需要在容器平台内提供完整 VM、运行遗留系统、或做虚拟化实验/教学的场景。

方案三 直接用虚拟机搭建 Kubernetes 集群

  • 架构与准备
    • 准备 3 台及以上 CentOS 7/8 虚拟机(静态 IP、主机名、/etc/hosts 解析)。
    • 关闭防火墙或配置放行规则,安装常用工具(如 iproute、bridge-utils、vim、net-tools)。
  • 部署步骤(示例要点)
    • 安装容器运行时(如 Docker 或 containerd)。
    • 安装 kubeadm/kubelet/kubectl,使用 kubeadm init 初始化 Master,kubeadm join 加入 Node。
    • 部署 Flannel/Calico 等 CNI 网络插件,确保 Pod 互通。
  • 适用场景
    • 生产级容器编排、弹性伸缩、服务治理、有状态应用与复杂网络策略。

选型与网络配置建议

  • 选型对比
方案 启动与性能 隔离性 适用场景 资源开销
Docker 容器 秒级启动、轻量 进程级隔离 微服务、CI/CD、开发/测试
容器里跑 KVM/VM 分钟级(取决于 VM) VM 级隔离 遗留系统、完整 OS、嵌套虚拟化 中-高
多 VM 搭建 K8s 分钟级(集群) 强隔离 生产编排、有状态与复杂网络 中-高
  • 网络要点
    • Docker:常用 bridge/NAT 与端口映射(-p),也可自定义网络。
    • KVM:默认 NAT(virbr0),也可配置 桥接 直连物理网段。
    • K8s:需选择 Pod CIDRCNI 插件(如 Flannel),确保跨节点 Pod 互通。

常见问题与排错要点

  • 容器内无法使用 systemctl
    • /usr/sbin/init 启动容器,并开启 –privileged(仅在可信环境使用)。
  • 拉取镜像或更新仓库失败(CentOS 8 常见)
    • 将镜像源临时切换到 vault.centos.org 并更新缓存:
      • sed -i ‘s/mirrorlist/#mirrorlist/g’ /etc/yum.repos.d/CentOS-*
      • sed -i ‘s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g’ /etc/yum.repos.d/CentOS-*
      • yum makecache && yum update -y
  • 在容器内跑 KVM 无法创建 VM
    • 确认宿主机已开启 嵌套虚拟化,并在虚拟化平台启用相应选项;容器内检查 /proc/cpuinfo 是否有 vmx/svm
  • K8s Pod 无法互通
    • 检查 CNI 插件 是否部署成功、节点网络是否正常、Pod CIDR 是否冲突。

0