openEuler 22.03-LTS 离线部署 Docker 26:3 个关键 RPM 包与依赖解决全记录

在企业内网或离线环境中部署高版本 Docker(如 26.x)是许多运维工程师面临的挑战。本文将详细介绍在 openEuler 22.03-LTS 系统上离线安装 Docker 26 的完整流程,包括关键 RPM 包的获取、依赖关系的解决以及验证方法。

1. 环境准备与离线包获取

在开始安装前,我们需要准备以下内容:

  1. 系统要求

    • 已安装 openEuler 22.03-LTS 操作系统
    • 至少 2GB 可用内存
    • 10GB 以上可用磁盘空间
  2. 关键 RPM 包清单 : 以下是 Docker 26.x 所需的核心 RPM 包(x86_64 架构):

    containerd.io-1.6.31-3.1.el8.x86_64.rpm
    docker-ce-26.1.3-1.el8.x86_64.rpm
    docker-ce-cli-26.1.3-1.el8.x86_64.rpm
    
  3. 依赖包清单 : 根据实际测试,还需要以下依赖包:

    container-selinux-2.124.0-1.gitf958d0c.module_el8.4.0+521+9df8e6d3.noarch.rpm
    libcgroup-0.41-19.el8.x86_64.rpm
    

提示:这些 RPM 包可以从 CentOS 8 的镜像源获取,虽然 openEuler 与 CentOS 的包管理兼容,但仍需注意版本匹配问题。

2. 离线安装步骤详解

2.1 安装依赖包

首先安装基础依赖包:

rpm -ivh libcgroup-0.41-19.el8.x86_64.rpm
rpm -ivh container-selinux-2.124.0-1.gitf958d0c.module_el8.4.0+521+9df8e6d3.noarch.rpm

2.2 安装 Docker 核心组件

按顺序安装 Docker 组件:

rpm -ivh containerd.io-1.6.31-3.1.el8.x86_64.rpm
rpm -ivh docker-ce-cli-26.1.3-1.el8.x86_64.rpm
rpm -ivh docker-ce-26.1.3-1.el8.x86_64.rpm

2.3 解决常见依赖问题

在离线环境中可能会遇到以下依赖问题及解决方案:

问题描述 解决方案 所需 RPM 包
缺少 libseccomp 从 openEuler 镜像源获取 libseccomp-2.5.1-1.oe2203.x86_64.rpm
缺少 libtool-ltdl 从 openEuler 镜像源获取 libtool-ltdl-2.4.6-30.oe2203.x86_64.rpm
SELinux 策略冲突 临时禁用 SELinux 或安装正确策略 container-selinux-2.xxx.rpm

3. 配置与验证

3.1 基础配置

安装完成后,进行基本配置:

# 创建docker配置目录
mkdir -p /etc/docker

# 写入基础配置
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

3.2 服务管理

启动并启用 Docker 服务:

systemctl enable docker
systemctl start docker

3.3 验证安装

使用以下命令验证 Docker 是否正常运行:

docker version
docker info
docker run hello-world

4. 高级配置与优化

4.1 离线镜像导入

在离线环境中,可以通过以下方式导入 Docker 镜像:

# 在有网络的环境中保存镜像
docker pull nginx:latest
docker save -o nginx.tar nginx:latest

# 在离线环境中加载镜像
docker load -i nginx.tar

4.2 存储驱动优化

对于生产环境,建议使用 direct-lvm 存储驱动:

  1. 准备 LVM 卷组
  2. 修改 /etc/docker/daemon.json
{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.directlvm_device=/dev/sdX",
    "dm.thinp_percent=95",
    "dm.thinp_metapercent=1",
    "dm.thinp_autoextend_threshold=80",
    "dm.thinp_autoextend_percent=20",
    "dm.directlvm_device_force=true"
  ]
}

4.3 网络配置

对于需要特定网络配置的环境:

# 创建自定义网络
docker network create \
  --driver=bridge \
  --subnet=172.28.0.0/16 \
  --ip-range=172.28.5.0/24 \
  --gateway=172.28.5.254 \
  my-network

5. 常见问题解决

5.1 服务启动失败排查

如果 Docker 服务无法启动,可以按以下步骤排查:

  1. 查看日志:

    journalctl -u docker -n 100 --no-pager
    
  2. 常见错误及解决方案:

    错误信息 可能原因 解决方案
    Failed to start Docker Application Container Engine containerd 未运行 systemctl start containerd
    permission denied SELinux 限制 临时禁用 SELinux 或配置正确策略
    no such file or directory 内核模块缺失 加载 overlay 模块: modprobe overlay

5.2 兼容性问题处理

由于使用的是 CentOS 8 的 RPM 包,可能会遇到以下兼容性问题:

  1. 库版本冲突

    # 检查缺失的库
    ldd $(which dockerd)
    
    # 解决方案:从openEuler源获取兼容版本的库
    
  2. systemd 单元文件问题

    # 检查并修正单元文件
    systemctl cat docker
    
  3. 内核参数调整

    # 增加最大文件描述符数量
    echo "fs.file-max=1000000" >> /etc/sysctl.conf
    sysctl -p
    

6. 维护与升级策略

6.1 离线环境升级方案

在离线环境中升级 Docker 的推荐流程:

  1. 在有网络的环境中下载新版本 RPM 包
  2. 使用 rpm -Uvh 命令按顺序升级
  3. 升级顺序:containerd.io → docker-ce-cli → docker-ce

6.2 备份与恢复

建议定期备份以下内容:

  1. Docker 配置

    tar -czvf docker-config-backup.tar.gz /etc/docker
    
  2. 镜像与容器

    # 备份所有镜像
    docker save $(docker images -q) -o all-images.tar
    
    # 备份容器数据卷
    tar -czvf docker-volumes.tar.gz /var/lib/docker/volumes
    
  3. 恢复流程

    # 恢复镜像
    docker load -i all-images.tar
    
    # 恢复配置
    tar -xzvf docker-config-backup.tar.gz -C /
    

7. 安全加固建议

7.1 基础安全配置

  1. 启用用户命名空间

    echo "user.max_user_namespaces=15000" >> /etc/sysctl.conf
    sysctl -p
    
  2. 限制容器能力

    {
      "default-capabilities": [
        "CHOWN",
        "DAC_OVERRIDE",
        "FSETID",
        "FOWNER",
        "SETGID",
        "SETUID",
        "NET_BIND_SERVICE"
      ]
    }
    

7.2 审计与监控

  1. 启用 Docker 审计

    echo "-w /usr/bin/docker -p x -k docker" >> /etc/audit/rules.d/docker.rules
    systemctl restart auditd
    
  2. 资源限制

    # 全局限制
    echo '{"cgroup-parent":"/docker.slice"}' > /etc/docker/daemon.json
    
    # 单个容器限制
    docker run --memory=1g --cpus=2 nginx
    

8. 性能调优指南

8.1 存储性能优化

  1. 选择合适的存储驱动

    存储驱动 适用场景 性能特点
    overlay2 默认选择 平衡性能与功能
    devicemapper 需要直接块设备 更高IO性能
    btrfs 需要快照功能 中等性能
  2. 调整日志配置

    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "50m",
        "max-file": "3"
      }
    }
    

8.2 网络性能优化

  1. 选择网络驱动

    网络驱动 适用场景 性能特点
    bridge 默认网络 中等性能
    macvlan 需要直接主机网络 接近原生性能
    host 最高性能需求 无隔离
  2. 调整内核参数

    echo "net.core.somaxconn=65535" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_max_syn_backlog=65535" >> /etc/sysctl.conf
    sysctl -p
    

9. 企业级部署建议

9.1 高可用架构

对于生产环境,建议采用以下架构:

  1. 多节点集群 :使用 Docker Swarm 或 Kubernetes
  2. 共享存储 :配置 NFS 或 Ceph 作为持久化存储
  3. 负载均衡 :前端配置 HAProxy 或 Nginx

9.2 监控方案

推荐监控指标及工具:

监控项 推荐工具 采集频率
容器资源使用 cAdvisor 15s
主机指标 Node Exporter 15s
日志收集 Fluentd 实时
告警 Prometheus Alertmanager 实时

10. 迁移与兼容性

10.1 从旧版本迁移

从 Docker 旧版本迁移到 26.x 的注意事项:

  1. 数据迁移

    # 停止旧版本
    systemctl stop docker
    
    # 备份数据
    tar -czvf /var/lib/docker-backup.tar.gz /var/lib/docker
    
    # 安装新版本后恢复
    tar -xzvf /var/lib/docker-backup.tar.gz -C /
    
  2. 配置调整

    • 检查废弃参数
    • 更新存储驱动配置
    • 验证网络配置

10.2 与其他组件集成

Docker 26 与常见组件的兼容性:

组件 兼容性 注意事项
Kubernetes 1.29+ 需使用 cri-dockerd
CI/CD工具 全兼容 无特殊要求
监控系统 全兼容 可能需要更新插件

在实际部署中,我们发现使用 CentOS 8 的 RPM 包在 openEuler 22.03-LTS 上安装 Docker 26 是可行的,但需要特别注意依赖关系的处理。建议在测试环境充分验证后再部署到生产环境。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐