努力
加油

在欧拉系统和CentOS上部署Docker的操作步骤有哪些不同?

这是一个非常经典且实际的生产环境问题。虽然 Docker 的核心原理在大多数 Linux 发行版上是通用的,但在 openEuler(欧拉) 和 CentOS 这两个系统上部署,细节上的差异主要体现在包管理、内核模块加载以及源配置上。

简单来说:操作逻辑一致,但命令和依赖处理不同。 CentOS 偏向于传统的 RHEL 体系,而 openEuler 是华为主导的开源操作系统,更强调自主可控和高性能优化。

以下是详细的对比和操作步骤解析:

一、 核心差异点概览

维度 CentOS (7/8) openEuler (20.03/22.03 LTS SP1+)
包管理器 yum / dnf yum / dnf (兼容 RHEL 风格)
Docker 官方源 使用 docker-ce 仓库 通常直接使用系统源或华为云镜像源,不推荐直接混用 Docker 官方 repo(可能冲突)
内核模块 需手动安装 kernel-devel 等依赖以支持 overlay2 默认集成度高,部分版本已预装必要内核头文件
防火墙 firewalld + iptables firewalld + iptables (默认策略类似)
SELinux 默认 Enforcing,常需设为 Permissive 或调整策略 默认 Enforcing,建议保持开启并正确配置上下文

注意:从 CentOS 8 开始,CentOS 项目重心转向 CentOS Stream,传统 CentOS 8 已停止维护。如果你是在新服务器上部署,建议优先考虑 openEuler 或 Rocky/AlmaLinux。以下对比基于 CentOS 7/8 与 openEuler 22.03 LTS SP1 的典型场景。


二、 在 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 device-mapper-persistent-data lvm2

3. 添加 Docker 官方仓库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4. 安装 Docker CE

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

5. 启动并设置开机自启

sudo systemctl start docker
sudo systemctl enable docker

6. 验证

sudo docker run hello-world

三、 在 openEuler 上部署 Docker 的步骤

openEuler 对 Docker 的支持更加“原生”,通常可以直接通过系统包管理器安装,或者使用华为云提供的优化镜像。

方案 A:使用 openEuler 官方源安装(推荐,简单稳定)

openEuler 22.03 LTS SP1 及以上版本已将 Docker 纳入官方软件库,无需添加第三方源。

1. 更新系统缓存
sudo dnf makecache
# 或者
sudo yum makecache
2. 安装 Docker 及相关组件
sudo dnf install -y docker-ce docker-ce-cli containerd.io

关键点:这里直接使用 dnf 或 yum 即可,因为 openEuler 的 base 仓库中已经包含了经过适配的 Docker 包。

3. 启动服务
sudo systemctl start docker
sudo systemctl enable docker
4. 验证
sudo docker run hello-world

方案 B:使用华为云镜像源提速(适用于国内生产环境)

如果官方源下载速度慢,可以配置华为云的 YUM/DNF 源镜像。

1. 备份原配置文件
sudo cp /etc/yum.repos.d/openEuler.repo /etc/yum.repos.d/openEuler.repo.bak
2. 修改源地址为华为云镜像

编辑 /etc/yum.repos.d/openEuler.repo,将 baseurl 中的域名替换为 mirrors.huaweicloud.com。

例如:

[BaseOS]
name=BaseOS
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP1/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP1/os/$basearch/RPM-GPG-KEY-openEuler
3. 重新生成缓存并安装
sudo dnf clean all
sudo dnf makecache
sudo dnf install -y docker-ce docker-ce-cli containerd.io

四、 关键注意事项与常见坑

1. 内核参数差异

  • CentOS: 有时需要手动调整 /etc/sysctl.conf 中的 net.ipv4.ip_forward=1 和 net.bridge.bridge-nf-call-iptables=1。
  • openEuler: 默认内核配置通常已经优化了这些参数,尤其是针对容器化场景。但如果遇到网络问题,仍需检查:
    sysctl net.bridge.bridge-nf-call-iptables
    # 如果返回 0,需手动设置为 1
    echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
    sysctl -p

2. SELinux 配置

  • CentOS: 很多用户为了省事直接 setenforce 0,但这在生产环境中是不安全的。
  • openEuler: 强烈建议保持 SELinux 为 Enforcing 模式。Docker 在 openEuler 上对 SELinux 的支持更好,会自动创建正确的安全上下文。如果确实遇到权限问题,应使用 semanage fcontext 进行精细控制,而非关闭 SELinux。

3. cgroup 驱动一致性

  • 无论是 CentOS 还是 openEuler,都需要确保 systemd 和 Docker 使用相同的 cgroup 驱动。
  • 检查方式:
    cat /proc/self/cgroup | head -n 1
    # 如果显示 "memory:/docker/..." 或类似,说明是 cgroupfs
    # 如果显示 "name=systemd:/...",说明是 systemd
  • 最佳实践:在 /etc/docker/daemon.json 中指定 "exec-root" 和 "cgroup-driver": "systemd"(取决于你的 init 系统)。openEuler 默认使用 systemd,因此建议 Docker 也使用 systemd cgroup 驱动,以避免资源统计不一致。

4. 防火墙规则

  • 两者都使用 firewalld。
  • 开放端口示例:
    sudo firewall-cmd --permanent --add-port=2375/tcp  # 如果使用远程 API
    sudo firewall-cmd --reload
  • 注意:Docker 容器内部的网络转发依赖于 iptables 的规则。如果 firewalld 和 iptables 规则冲突,可能导致容器无法访问网络。建议在启动 Docker 后,检查 iptables -L -n 是否有 Docker 自动插入的规则。

5. 镜像提速器

  • CentOS: 通常配置阿里云、腾讯云等镜像提速器。
  • openEuler: 除了通用提速器,还可以考虑使用华为云镜像提速器,特别是对于企业内部使用华为云基础设施的场景,内网拉取速度更快。

五、 总结建议

  1. 如果是新项目:推荐使用 openEuler。它在内核调度、网络栈(如 eBPF 支持)、安全特性(如 KVM 虚拟化结合)方面有更深的优化,尤其适合云原生场景。
  2. 如果是迁移项目:如果原有应用是基于 CentOS 开发的,且依赖特定的 RPM 包,可以先评估兼容性。openEuler 的二进制兼容性较好,大部分 CentOS 7/8 的应用可以无缝迁移。
  3. 避免踩坑:
    • 不要在 openEuler 上随意添加 Docker 官方 Linux 仓库,优先使用系统自带源。
    • 注意内核版本匹配,Docker 新版本可能需要较新的内核(>= 4.4),openEuler 22.03 LTS SP1 默认内核为 5.10+,完全满足要求。
    • 始终关注 journalctl -u docker.service 日志,排查启动失败的原因。

通过以上步骤,你可以在两个系统上顺利部署 Docker,并根据实际需求选择最适合的平台。