银河麒麟V10 ARM64环境下Docker离线部署全指南
在国产化替代浪潮中,银河麒麟V10操作系统凭借其安全可靠的特性,正逐步成为关键领域的基础设施选择。而作为现代应用部署的核心工具,Docker的离线安装能力对于内网环境、安全隔离区域以及批量部署场景尤为重要。本文将手把手带您完成从依赖包下载到最终配置的完整流程,特别针对ARM64架构和麒麟V10 SP3的特殊需求进行优化。
1. 环境准备与基础清理
在开始制作离线安装包前,我们需要确保基础环境的纯净性。银河麒麟V10 SP3基于CentOS 8构建,这意味着我们可以利用CentOS生态中的大部分工具,但同时也需要注意一些细微差别。
首先确认系统架构和版本信息:
nkvers uname -m彻底清理旧版Docker组件是避免冲突的关键步骤。不同于简单的yum remove,我们需要采用更全面的清理方案:
yum remove -y docker* containerd.io docker-runc \ docker-client* docker-common* docker-latest* \ docker-logrotate* docker-engine* \ docker-compose-plugin* docker-buildx-plugin*注意:在ARM64架构上,某些x86_64残留配置文件可能导致后续安装异常,建议同时检查并清理
/etc/docker和/var/lib/docker目录。
2. 仓库配置与版本选择
Docker官方并未直接提供针对银河麒麟的仓库配置,但通过变量替换技巧可以完美适配。这里的关键在于理解$releasever变量的工作机制。
分步配置仓库:
- 安装必要工具:
yum install -y yum-utils - 添加官方仓库:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo - 设置CentOS版本变量:
echo "8" > /etc/yum/vars/centos_version - 替换仓库变量:
sed -i 's/$releasever/$centos_version/g' /etc/yum.repos.d/docker-ce.repo
版本选择直接影响后续的兼容性。建议通过以下命令查看可用版本:
for pkg in docker-ce docker-ce-cli docker-buildx-plugin docker-compose-plugin; do echo "=== $pkg ===" yum list $pkg --showduplicates | sort -r | head -5 done3. 离线包制作与完整性验证
真正的离线安装难点在于依赖项的完整下载。yum downloadonly虽然方便,但在ARM64架构下仍需特别注意依赖解析。
创建下载目录:
mkdir -p /root/docker-rpm精确下载指定版本(以26.1.0为例):
yum install --downloadonly --downloaddir=/root/docker-rpm/ \ docker-ce-3:26.1.0-1.el8 \ docker-ce-cli-1:26.1.0-1.el8 \ docker-buildx-plugin-0.14.0-1.el8 \ docker-compose-plugin-2.6.0-3.el8验证下载内容时应检查:
- 所有主包是否完整
- ARM64架构标识(.aarch64后缀)
- 依赖项数量(通常不少于20个包)
打包技巧:
tar czvf docker-offline-arm64.tar.gz -C /root/docker-rpm .4. 离线环境部署实战
将打包好的tar文件传输到目标机器后,按以下步骤部署:
解压安装包:
mkdir -p /root/docker-offline tar xzvf docker-offline-arm64.tar.gz -C /root/docker-offline强制安装所有RPM(忽略依赖警告):
rpm -Uvh --nodeps /root/docker-offline/*.rpm验证安装:
docker --version containerd --version
存储配置优化:
mkdir -p /data/docker cat > /etc/docker/daemon.json << EOF { "data-root": "/data/docker", "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://registry.docker-cn.com"] } EOF启动并验证服务:
systemctl enable --now docker docker info | grep -E 'Storage Driver|Cgroup Driver'5. 常见问题排查与调优
在ARM64环境中,容器运行时可能遇到一些特殊问题。以下是几个典型场景的解决方案:
CRI插件冲突: 当同时使用Kubernetes时,可能需要调整containerd配置:
sed -i 's/disabled_plugins = \["cri"\]/# disabled_plugins = ["cri"]/' /etc/containerd/config.toml systemctl restart containerdcrictl端点配置:
cat <<EOF > /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF性能调优建议:
- 对于ARM64服务器,建议在
daemon.json中添加:"default-ulimits": { "nofile": { "Name": "nofile", "Hard": 65535, "Soft": 65535 } } - 内存限制调整:
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf sysctl -p
6. 批量部署与版本管理
对于需要大规模部署的场景,可以考虑以下进阶方案:
版本锁定文件:
rpm -qa docker-ce docker-ce-cli > docker-version.lock自动化校验脚本:
#!/bin/bash EXPECTED="docker-ce-3:26.1.0-1.el8" CURRENT=$(rpm -q docker-ce) if [ "$CURRENT" != "$EXPECTED" ]; then echo "版本不匹配: 期望 $EXPECTED, 实际 $CURRENT" exit 1 fi仓库镜像方案: 在内网搭建yum仓库镜像,将离线包导入:
createrepo /data/repos/docker-offline/对应的仓库配置文件示例:
[docker-offline] name=Docker Offline Packages baseurl=file:///data/repos/docker-offline enabled=1 gpgcheck=0通过这套方案,我们不仅实现了单机的离线安装,更构建了一套可复用的标准化部署流程。在实际的国产化替代项目中,这种"一次制作,多处部署"的方法能显著提升效率,特别是在需要部署数十甚至上百台服务器的场景下。