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与 Dockercontainerd.io之间的文件与依赖冲突。 - 解决
container-selinux因模块锁定导致无法安装的问题。
2. 风险预警
⚠️ 高风险操作警告
本操作涉及卸载系统核心容器组件。
- 全新服务器: 可直接按照步骤操作。
- 存量服务器: 执行卸载命令前,务必确认当前系统内是否有正在运行的 Podman 容器、Buildah 构建任务或相关数据。
- 后果: 卸载操作将导致现有的 Podman 容器停止运行,且相关容器数据可能不可用。
3. 背景说明
RHEL 8 / Anolis 8 体系通过 AppStream 模块系统(modulemd)锁定了 container-tools 模块,该模块包含了 podman、runc 和 container-selinux。这些组件的版本与 Docker 官方提供的 containerd.io 存在底层冲突:
- 文件冲突: 系统预装的
runc与 Docker 需要的containerd.io存在文件路径冲突。 - 模块屏蔽:
container-selinux被系统模块锁定,导致 yum/dnf 无法从外部源获取正确版本的依赖包。 - 依赖死锁: 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 模块
这是解决依赖冲突的关键步骤。通过禁用该模块,解除系统对 runc 和 container-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 上安装并运行成功。