在国产麒麟V10 ARM服务器上离线部署Docker 26.1,我踩过的坑都帮你填好了
银河麒麟V10 ARM64环境下的Docker 26.1离线部署实战指南在信创国产化浪潮下越来越多的企业开始采用银河麒麟V10操作系统作为基础平台。作为一名长期奋战在一线的运维工程师我最近在一个严格内网隔离的客户现场完成了Docker 26.1版本的离线部署工作。整个过程充满了各种惊喜从系统兼容性问题到依赖包冲突再到配置文件的微妙差异每一个环节都可能成为部署路上的绊脚石。本文将详细记录这次部署的全过程特别是那些官方文档没有提及的坑希望能为同行提供参考。1. 环境准备与前置检查在开始部署之前充分的环境检查可以避免很多后续问题。银河麒麟V10基于CentOS 8开发但又有自己的特性特别是在ARM64架构下很多细节需要特别注意。首先确认系统版本和架构nkvers uname -m输出应该显示类似Kylin Linux Advanced Server release V10 (Sword) aarch64关键检查点确保系统是银河麒麟V10 SP3及以上版本确认架构为aarch64(ARM64)检查系统语言设置为en_US.UTF-8避免后续安装出现编码问题提示在内网环境中建议提前准备好所有依赖包。Docker 26.1需要以下基础组件libseccomp 2.4iptables 1.8containerd 1.62. 清理旧版本与配置YUM源很多服务器可能已经安装过旧版Docker彻底清理是避免冲突的关键。不同于常见的yum remove我们需要更彻底的清理方式for pkg in docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; do rpm -qa | grep $pkg | xargs -r rpm -e --nodeps done由于是离线环境我们需要巧妙配置YUM源。虽然Docker官方只提供CentOS的RPM包但通过变量替换可以让麒麟系统正确识别echo 8 /etc/yum/vars/centos_version sed -i s/$releasever/$centos_version/g /etc/yum.repos.d/docker-ce.repo常见问题排查如果遇到无法解析主机错误检查/etc/resolv.conf中的DNS设置出现GPG密钥错误时可以临时禁用校验yum install --nogpgcheck3. 离线包下载与完整性校验在有网络的环境中提前下载所有依赖包是离线部署的核心。我们不仅要下载Docker主包还要考虑所有依赖项mkdir -p /root/docker-rpm yum install --downloadonly --downloaddir/root/docker-rpm/ \ docker-ce-26.1.0 \ docker-ce-cli-26.1.0 \ containerd.io \ docker-buildx-plugin \ docker-compose-plugin \ libseccomp \ iptables下载完成后建议制作一个完整性校验清单cd /root/docker-rpm rpm -qp --requires *.rpm | sort -u requirements.txt关键技巧使用createrepo命令创建本地仓库元数据便于后续管理将下载的包按功能分类存储如base/,docker/,tools/等目录4. 离线安装与系统集成将准备好的RPM包复制到目标服务器后安装顺序非常重要。错误的安装顺序可能导致依赖问题cd /root/docker-rpm rpm -Uvh --nodeps *.rpm安装完成后需要特别关注三个关键配置文件/etc/docker/daemon.json- Docker主配置/etc/containerd/config.toml- containerd配置/etc/crictl.yaml- CRI工具配置推荐的基础配置{ data-root: /data/docker, exec-opts: [native.cgroupdriversystemd], registry-mirrors: [https://your-internal-mirror], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 } }5. 系统调优与故障排查银河麒麟V10上运行Docker需要一些特殊的调优参数。以下是我总结的关键优化点内核参数调整cat /etc/sysctl.d/docker.conf EOF net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 vm.swappiness 10 vm.max_map_count 262144 EOF sysctl -p /etc/sysctl.d/docker.conf常见故障处理cgroup驱动问题Failed to connect to containerd: failed to dial /run/containerd/containerd.sock解决方案确保daemon.json中配置了native.cgroupdriversystemdCRI接口问题validate CRI v1 image API for endpoint需要修改/etc/containerd/config.toml注释掉disabled_plugins [cri]crictl警告WARN[0000] runtime connect using default endpoints创建/etc/crictl.yaml指定正确的端点路径6. 持久化存储与安全加固在生产环境中数据持久化和安全是重中之重。以下是我的实践建议存储配置最佳实践使用独立的逻辑卷或物理磁盘作为Docker数据目录对于高性能需求考虑direct-lvm模式定期清理无用镜像和容器docker system prune -af安全加固措施# 限制容器能力 echo {default-ulimits: {nofile: {Name: nofile,Hard: 65536,Soft: 65536}}} /etc/docker/daemon.json # 启用用户命名空间隔离 dockerd --userns-remapdefault审计与监控配置Docker守护进程日志级别为info使用auditd监控关键Docker文件和目录定期检查容器漏洞docker scan7. 性能调优实战在ARM架构下Docker的性能调优有一些特殊考量。以下是我在多个项目中验证有效的优化方案容器运行时优化# 使用更高效的存储驱动 echo {storage-driver: overlay2} /etc/docker/daemon.json # 优化containerd配置 cat /etc/containerd/config.toml EOF version 2 [plugins.io.containerd.grpc.v1.cri] sandbox_image registry.aliyuncs.com/google_containers/pause:3.6 [plugins.io.containerd.runtime.v1.linux] shim containerd-shim runtime runc runtime_root /run/containerd/runc EOF网络性能优化# 使用更高效的网络插件 docker plugin install --alias weave weaveworks/net-plugin:latest # 调整网络参数 echo {mtu: 1450,default-address-pools:[{base:10.10.0.0/16,size:24}]} /etc/docker/daemon.json资源限制策略# 全局资源限制 echo {default-cgroup-parent: /docker.slice,default-ulimits: {nproc: {Name: nproc,Hard: 1024,Soft: 512}}} /etc/docker/daemon.json在完成所有配置后建议进行全面的功能测试docker run --rm arm64v8/alpine echo Hello, Kylin docker run --rm -it arm64v8/ubuntu bash