在 OpenEuler(欧拉)和 CentOS 上安装 Docker,核心差异主要源于底层包管理器的不同以及官方源支持的变更。
CentOS 基于 RHEL 体系,默认使用 yum 或 dnf;而 OpenEuler 虽然也兼容 RPM 包,但其默认包管理器是 dnf(部分旧版本可能仍保留 yum 别名),且其软件仓库结构、GPG 密钥验证机制以及内核模块加载方式与 CentOS 存在细微差别。此外,自 CentOS 8 停止维护后,社区转向 Rocky Linux/AlmaLinux 或 Ubuntu/Debian,而 OpenEuler 作为华为主导的开源操作系统,其生态更倾向于使用 systemd 原生服务管理和较新的容器运行时标准。
以下是两者安装 Docker 的主要步骤差异对比及具体操作指南:
一、核心差异总结
| 对比项 | CentOS (7/8) | OpenEuler (20.03 LTS SP1+) |
|---|---|---|
| 包管理器 | yum 或 dnf |
推荐 dnf(yum 通常为 dnf 软链接) |
| Docker 源配置 | 依赖 docker-ce.repo,需手动导入 GPG key |
同样需要 repo 文件,但 GPG key 路径和验证策略更严格 |
| 依赖关系 | 依赖 containerd.io,有时需额外处理 cgroup v1/v2 兼容 |
对 cgroup v2 支持更好,需确保内核参数正确 |
| 服务管理 | systemctl start docker |
同上,但需注意 firewalld 与 iptables-nft 的兼容性 |
| 权限模型 | 默认用户可运行 docker(通过 sudo) | 建议创建 docker 用户组并授权,安全策略更严格 |
⚠️ 注意:从 Docker 20.10+ 开始,官方推荐使用 Docker Engine + containerd,而非传统的
docker-io包。OpenEuler 官方镜像源中可能不直接提供最新版的 Docker CE,因此通常仍需通过官方 Docker 源安装。
二、CentOS 安装 Docker 标准步骤(参考基准)
# 1. 卸载旧版本
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
# 2. 安装依赖
sudo yum install -y yum-utils
# 3. 设置稳定版仓库
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
# 4. 安装 Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io
# 5. 启动并设为开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 6. 验证
docker version
docker run hello-world
三、OpenEuler 安装 Docker 的差异步骤
✅ 步骤 1:确认系统版本与架构
OpenEuler 分为 x86_64 和 aarch64(鲲鹏)架构,请确保下载对应架构的 repo 文件。
uname -m # 输出应为 x86_64 或 aarch64
cat /etc/openeuler-release # 确认版本号
✅ 步骤 2:清理潜在冲突包
OpenEuler 可能预装了 podman 或 buildah,若无需使用,建议卸载以避免端口或 socket 冲突:
sudo dnf remove -y podman buildah # 如已安装
✅ 步骤 3:安装基础工具
OpenEuler 默认已集成 dnf,无需额外安装 yum-utils,但建议更新系统:
sudo dnf update -y
sudo dnf install -y dnf-plugins-core # 确保包含 config-manager 插件
✅ 步骤 4:添加 Docker 官方仓库
⚠️ 关键差异点:OpenEuler 没有专门的 "openEuler" Docker 官方源,必须使用 CentOS/RHEL 通用源,但需注意 GPG 密钥验证。
# 添加 Docker CE 仓库(以 x86_64 为例)
sudo dnf config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
# 若为 aarch64,需手动修改 repo 文件中的 baseurl,或等待官方适配
# 目前 Docker 官方对 aarch64 的支持主要通过 centos/aarch64 通道
✅ 步骤 5:导入 GPG 密钥(重要!)
OpenEuler 对签名验证更严格,若出现 GPG key failed 错误,需手动导入:
sudo rpm --import https://download.docker.com/linux/centos/gpg
✅ 步骤 6:安装 Docker Engine
sudo dnf install docker-ce docker-ce-cli containerd.io
📌 注意:如果提示依赖冲突,可能是
libseccomp版本过低。OpenEuler 22.03 LTS 及以上版本通常已满足要求。如仍报错,可尝试:sudo dnf install libseccomp -y
✅ 步骤 7:配置非 root 用户使用 Docker(可选但推荐)
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
✅ 步骤 8:启动并验证
sudo systemctl start docker
sudo systemctl enable docker
# 检查防火墙是否放行
sudo firewall-cmd --permanent --add-service=docker
sudo firewall-cmd --reload
# 验证
docker info
docker run hello-world
四、常见坑点与解决方案
1. GPG 密钥验证失败
- 现象:
Public key for xxx.rpm is not installed - 解决:手动导入 GPG key(见上文步骤 5),或在
dnf.conf中添加gpgcheck=0(仅用于测试环境,生产环境不建议)。
2. containerd.io 依赖缺失
- 现象:安装时提示
containerd.io无法解析 - 解决:确保添加了正确的 repo,且系统时间同步(NTP),否则 HTTPS 证书验证会失败。
3. cgroup v2 兼容性问题
- 现象:Docker 启动失败,日志中出现
cgroup v2 not supported - 解决:
- 检查
/proc/cmdline是否包含systemd.unified_cgroup_hierarchy=1 - OpenEuler 22.03+ 默认启用 cgroup v2,需确保内核参数正确,或在
/etc/default/grub中添加并执行grub2-mkconfig -o /boot/grub2/grub.cfg
- 检查
4. aarch64 架构支持
- 现状:Docker 官方对 aarch64 的支持滞后于 x86_64。若使用鲲鹏服务器,建议:
- 使用 OpenEuler 官方提供的
docker-ce包(如有) - 或使用
podman替代(OpenEuler 对 podman 支持极佳) - 或联系华为云获取定制化容器镜像
- 使用 OpenEuler 官方提供的
五、最佳实践建议
-
优先使用 OpenEuler 官方仓库
如果 OpenEuler 官方源提供了docker-ce包,优先使用官方源,因其经过华为认证,兼容性更好。可通过以下命令查看:sudo dnf list available docker-ce -
考虑使用 Podman 作为替代
OpenEuler 深度集成 Podman,无需守护进程,更安全,且与 Docker CLI 完全兼容:sudo dnf install podman podman-docker alias docker=podman -
定期更新内核与 Docker
OpenEuler 强调长期支持(LTS),建议保持内核与 Docker 版本同步更新,避免安全漏洞。 -
禁用 SELinux(测试环境)
若遇到权限问题,临时关闭 SELinux 快速定位:sudo setenforce 0
六、结论
在 OpenEuler 上安装 Docker 的步骤与 CentOS 高度相似,主要差异在于:
- 包管理器:统一使用
dnf - GPG 验证:需手动导入密钥,更严格
- 架构支持:aarch64 需特别注意
- 安全策略:推荐配置 docker 用户组,禁用 root 直接运行
对于生产环境,若对容器化要求不高,强烈建议在 OpenEuler 上使用 Podman,其与系统整合度更高,无需额外维护 Docker 守护进程,更符合现代 Linux 容器最佳实践。
CLOUD云枢