CentOS Stream 8 容器化技术应用与落地
一 适用场景与运行时选型
- 面向开发与测试:优先使用 Docker CE 或 Podman,上手快、生态完善,适合本地开发、CI/CD 构建与多容器联调。
- 面向生产编排:以 Containerd 为容器运行时,配合 Kubernetes 使用,符合云原生主流实践(K8s 自 v1.20+ 起取消对 Docker shim 的维护,直接使用 CRI 对接 Containerd)。
- 系统与服务形态:CentOS Stream 8 是 RHEL 的上游公共开发分支,位于 Fedora 与 RHEL 之间,适合滚动验证新特性;同时需注意其生命周期已于 2024-05-31 结束,生产环境建议规划迁移至 RHEL、Rocky Linux 或 AlmaLinux 等替代发行版。
二 在 CentOS Stream 8 上部署容器运行时
- Docker CE 快速部署(适合开发与单机编排)
- 更新与依赖
sudo dnf update -y && sudo dnf install -y dnf-plugins-core
- 添加仓库并安装
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io
- 启动与自启
sudo systemctl enable --now docker
- 验证
docker --version && docker run --rm hello-world
- 国内加速(可选)
sudo mkdir -p /etc/docker && sudo tee /etc/docker/daemon.json <<-‘EOF’
{ “registry-mirrors”: [“https://<你的加速器地址>.mirror.aliyuncs.com”] }
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
- 免 sudo 使用(可选)
sudo usermod -aG docker $USER && newgrp docker
- Containerd 部署(适合 Kubernetes 与标准化运行时)
- YUM 安装
sudo dnf install -y yum-utils && sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo dnf install -y containerd.io
- 生成默认配置并启动
sudo mkdir -p /etc/containerd && containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl enable --now containerd
- 验证
ctr version
- 可选:安装 nerdctl(Docker 兼容 CLI)与 crictl(K8s CRI 调试工具)以完善日常运维体验。
三 典型应用与命令示例
- 应用快速上线(以 Nginx 为例)
- Docker:
docker run -d --name web -p 80:80 nginx:1.24
- Podman(无守护进程、rootless 友好):
podman run -d --name web -p 80:80 nginx:1.24
- 数据持久化与目录挂载
- Docker:
docker run -d --name db -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Passw0rd mysql:8.0
- Podman:
podman run -d --name db -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Passw0rd mysql:8.0
- 多容器编排(Docker Compose)
- 安装:sudo dnf install -y docker-compose-plugin
- 编排示例(docker-compose.yml):
version: “3.8”
services:
web:
image: nginx:1.24
ports: [“80:80”]
volumes: [“./html:/usr/share/nginx/html:ro”]
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: Passw0rd
volumes: [“/data/mysql:/var/lib/mysql”]
- 启动:docker compose up -d
- 生产级运行建议
- 镜像与标签:避免使用 latest,使用 明确版本标签;
- 资源限制:为容器设置 CPU/内存 限额,避免资源抢占;
- 日志与监控:集中采集容器日志,监控 CPU/内存/网络/存储 I/O。
四 生产部署与运维要点
- 安全与最小权限
- 优先选择 rootless 容器(Podman)或在容器内以 非 root 用户运行应用;
- 如需 systemd 托管容器,使用 Podman 生成 unit:
podman generate systemd --files --name <容器名>
sudo cp container-<容器名>.service /etc/systemd/system/
sudo systemctl daemon-reload && sudo systemctl enable --now container-<容器名>.service
- SELinux 场景:必要时为挂载目录设置正确的 安全上下文,或使用布尔值/策略模块放行(如 httpd 网络访问场景)。
- Kubernetes 场景(Containerd + K8s)
- 前置:关闭交换分区(swapoff -a 并注释 /etc/fstab 中 swap 项)、确保主机名/MAC/Product UUID 唯一;
- 端口:放行 6443、2379-2380、10250、10259、10257(控制面)与 10250、10256、30000-32767(工作节点);
- 运行时:使用 Containerd 作为 CRI 运行时,按需配置 crictl 进行节点侧调试。
- 故障排查与网络
- 服务状态:systemctl status docker/containerd;日志:journalctl -u docker/containerd;
- 镜像拉取慢:配置 registry-mirrors;
- 端口连通性:ss -lntp | grep <端口> / telnet/curl 验证;
- 防火墙:firewall-cmd --list-ports 与 --add-port 按需放行。
五 生命周期与迁移建议
- 生命周期提醒:CentOS Stream 8 已于 2024-05-31 结束生命周期,后续不再获得常规更新与修复;若需长期生产支持,建议迁移至 RHEL、Rocky Linux 或 AlmaLinux,并同步评估容器运行时与 Kubernetes 版本的兼容矩阵。
- 迁移要点
- 镜像与构建链:验证现有 Dockerfile/Containerfile 与目标发行版基础镜像的兼容性;
- 仓库与依赖:替换 CentOS 8 Stream 软件源为替代发行版的 BaseOS/AppStream 与 EPEL 源;
- 配置与策略:复核 systemd 单元、SELinux/防火墙策略、日志采集与监控告警规则;
- 渐进式切换:先在测试环境验证,再分批灰度切换生产节点,确保回滚路径可用。