银河麒麟V10 SP3 ARM64服务器离线部署Docker 26.1全流程指南

在国产化替代浪潮中,银河麒麟V10 SP3作为主流国产操作系统,常搭载于飞腾等ARM架构服务器。由于特殊场景下的网络隔离要求,离线环境部署容器引擎成为刚需。本文将手把手带您完成从CentOS 8源获取Docker 26.1到最终稳定运行的完整闭环,特别针对ARM64架构的依赖差异提供解决方案。

1. 环境准备与兼容性适配

1.1 系统版本确认与伪装

首先通过 nkvers 命令确认系统版本,输出应包含"Kylin Linux Advanced Server release V10 (SP3)"。由于Docker官方仅维护CentOS的YUM源,我们需要将银河麒麟伪装成CentOS 8环境:

# 创建CentOS版本标识文件
echo "8" > /etc/yum/vars/centos_version

验证文件内容:

cat /etc/yum/vars/centos_version  # 应输出数字8

1.2 清理旧版本组件

为避免冲突,需彻底移除旧版Docker及相关组件:

yum remove docker \
    containerd.io \
    docker-runc \
    docker-client-* \
    docker-common \
    docker-latest-* \
    docker-logrotate \
    docker-engine \
    docker-compose-plugin \
    docker-buildx-plugin

注意:在ARM架构下,部分依赖包名称可能与x86平台不同,若报错提示包不存在可忽略

2. 离线资源获取与传输

2.1 搭建临时下载环境

在有外网连接的临时机器上(需相同架构)执行:

# 安装必要工具
yum install -y yum-utils createrepo

# 添加Docker官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 替换仓库变量
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo

2.2 下载完整依赖包

创建存储目录并下载ARM64架构专用包:

mkdir -p /root/docker-arm64-rpm

# 指定版本下载(示例为26.1.0)
yum install --downloadonly --downloaddir=/root/docker-arm64-rpm/ \
    docker-ce-3:26.1.0-1.el8 \
    docker-ce-cli-1:26.1.0-1.el8 \
    containerd.io-1.6.31-3.1.el8 \
    docker-buildx-plugin-0.14.0-1.el8 \
    docker-compose-plugin-2.6.0-3.el8

关键文件校验清单:

文件名 预期大小(ARM64)
docker-ce-26.1.0-1.el8.aarch64.rpm ~25MB
containerd.io-1.6.31-3.1.el8.aarch64.rpm ~30MB

2.3 制作本地仓库

为方便依赖解析,可创建本地仓库:

createrepo /root/docker-arm64-rpm
tar -czvf docker-arm64-repo.tar.gz -C /root docker-arm64-rpm

3. 离线安装与配置

3.1 传输与解压

将打包文件通过安全介质拷贝到目标服务器:

mkdir -p /opt/docker-offline
tar -xzvf docker-arm64-repo.tar.gz -C /opt/docker-offline

3.2 强制安装RPM包

跳过依赖检查直接安装:

cd /opt/docker-offline/docker-arm64-rpm
rpm -Uvh --nodeps *.rpm

ARM架构特殊处理:

# 修复可能的库链接
ln -sf /usr/lib/aarch64-linux-gnu/libdevmapper.so.1.02 /usr/lib64/libdevmapper.so.1.02

3.3 存储与镜像配置

创建专用数据目录并配置daemon.json:

{
  "data-root": "/data/docker",
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "default-runtime": "runc"
}

验证配置:

mkdir -p /data/docker
systemctl daemon-reload
systemctl enable --now docker
docker info | grep -E 'Storage|Cgroup'

4. 容器运行时调优

4.1 containerd配置

编辑配置文件确保CRI插件启用:

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
sed -i 's/disabled_plugins = \["cri"\]/# disabled_plugins = ["cri"]/' /etc/containerd/config.toml

重启服务验证:

systemctl restart containerd
ctr version

4.2 crictl工具配置

创建客户端配置文件:

runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false

验证容器运行时接口:

crictl ps

5. 常见问题排查

5.1 依赖缺失处理

若出现库文件缺失错误,可手动补充:

# 示例:解决libseccomp报错
wget http://mirror.centos.org/altarch/8/BaseOS/aarch64/os/Packages/libseccomp-2.5.1-1.el8.aarch64.rpm
rpm -ivh libseccomp-2.5.1-1.el8.aarch64.rpm

5.2 服务启动失败排查

查看详细日志:

journalctl -u docker --no-pager -n 50

关键错误代码对照表:

错误码 可能原因 解决方案
139 架构不兼容 确认下载的是aarch64包
203 内核模块缺失 检查kernel-headers版本
127 命令不存在 检查PATH环境变量

5.3 性能调优建议

针对ARM服务器特有优化:

# 调整内存分配策略
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl -p

# 优化swap使用
echo "vm.swappiness=10" >> /etc/sysctl.conf

更多推荐