Anolis OS 8 / RHEL 8 安装 Docker CE 指南

1. 概述

本文档旨在指导用户在 Anolis OS 8.x、RHEL 8.x、CentOS Stream 8 及其他基于 EL8 的发行版上,彻底移除系统默认的容器工具集(Podman/Runc),并正确安装官方 Docker CE 引擎。

适用场景:

  • 需要使用 Docker CE 官方特性的生产环境。
  • 解决系统自带 runc 与 Docker containerd.io 之间的文件与依赖冲突。
  • 解决 container-selinux 因模块锁定导致无法安装的问题。

2. 风险预警

⚠️ 高风险操作警告

本操作涉及卸载系统核心容器组件。

  • 全新服务器: 可直接按照步骤操作。
  • 存量服务器: 执行卸载命令前,务必确认当前系统内是否有正在运行的 Podman 容器、Buildah 构建任务或相关数据。
  • 后果: 卸载操作将导致现有的 Podman 容器停止运行,且相关容器数据可能不可用。

3. 背景说明

RHEL 8 / Anolis 8 体系通过 AppStream 模块系统(modulemd)锁定了 container-tools 模块,该模块包含了 podmanrunccontainer-selinux。这些组件的版本与 Docker 官方提供的 containerd.io 存在底层冲突:

  1. 文件冲突: 系统预装的 runc 与 Docker 需要的 containerd.io 存在文件路径冲突。
  2. 模块屏蔽: container-selinux 被系统模块锁定,导致 yum/dnf 无法从外部源获取正确版本的依赖包。
  3. 依赖死锁: Podman 依赖系统版 runc,而 Docker 依赖官方版 runc,二者无法在默认配置下共存。

4. 操作步骤

步骤 1:清理系统旧容器组件

首先需要彻底移除系统预装的 Podman 及其相关依赖栈,以避免依赖冲突。

# 移除 Podman、Buildah 及其相关组件
yum remove -y podman buildah skopeo runc \
    docker docker-client docker-client-latest \
    docker-common docker-latest docker-latest-logrotate \
    docker-logrotate docker-engine

步骤 2:禁用 container-tools 模块

这是解决依赖冲突的关键步骤。通过禁用该模块,解除系统对 runccontainer-selinux 的版本锁定。

# 重置并禁用 container-tools 模块
yum module reset -y container-tools
yum module disable -y container-tools

验证: 执行 yum module list | grep container,确保 container-tools 的状态显示为 [x]disabled

步骤 3:配置 Docker CE 软件源

配置清华大学开源软件镜像站作为 Docker CE 的安装源(兼容 CentOS 8)。

cat > /etc/yum.repos.d/docker-ce.repo <<'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=[https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/8/$basearch/stable](https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/8/$basearch/stable)
enabled=1
gpgcheck=0

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=[https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/8/source/stable](https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/8/source/stable)
enabled=0
gpgcheck=0
EOF

步骤 4:安装依赖组件 (container-selinux)

在禁用模块后,通常可以直接通过 yum 安装。如遇特殊情况,可采用手动安装作为备选方案。

策略 A:通过 YUM 自动安装(推荐)

yum install -y container-selinux

策略 B:手动下载 RPM 安装(备选) 仅当策略 A 报错“无匹配包”时执行。注意:URL 中的版本号可能会随时间失效,如遇 404 请前往镜像站查找最新版本。

cd /tmp
# 下载来自 CentOS 8 Stream 的兼容包
curl -O https://mirrors.aliyun.com/centos/8-stream/AppStream/x86_64/os/Packages/container-selinux-2.189.0-1.module_el8.7.0+1196+721f4eb0.noarch.rpm
# 本地安装
yum localinstall -y container-selinux-*.rpm

步骤 5:安装 Docker CE

依赖环境准备就绪后,安装 Docker CE 核心组件。

yum makecache
yum install -y docker-ce docker-ce-cli containerd.io

步骤 6:服务配置与启动

建议在启动前配置 daemon.json 以优化日志策略和镜像拉取速度。

1. 创建配置文件

mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "1G",
    "max-file": "3"
  },
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com"
  ]
}
EOF

注:镜像源地址可能会随网络环境变化,请根据实际情况调整。

2. 启动服务并设置开机自启

systemctl enable --now docker
systemctl status docker

5. 验证安装

执行以下命令检查 Docker 服务状态及功能完整性:

# 检查版本信息
docker version

# 运行测试容器
docker run --rm hello-world

若终端输出 Hello from Docker!,则说明 Docker CE 已在 Anolis OS 上安装并运行成功。