1. 项目背景与需求解析
在国产化替代的大背景下,银河麒麟操作系统作为国产自主操作系统的代表,其服务器版本V10 SP2已广泛应用于政务、金融等关键领域。而Docker作为容器化技术的标杆,其20.10版本在稳定性与功能完备性上达到了较好的平衡。但在实际生产环境中,很多部署场景往往面临以下典型问题:
- 内网环境无法直接访问外网软件源
- 安全合规要求所有组件必须经过完整性校验
- 需要明确记录所有依赖项的来源和版本
- 安装过程必须适配国产CPU架构(如飞腾、鲲鹏)
这正是我们需要完整离线安装方案的核心原因。本文将基于真实政务云项目经验,详细介绍从准备到验证的全流程,包含我在多个项目中积累的架构适配技巧和排错方法。
2. 环境准备与依赖分析
2.1 系统环境确认
首先通过以下命令检查系统基础信息:
# 查看操作系统版本 cat /etc/kylin-release # 查看CPU架构 uname -m # 检查已安装的依赖库 rpm -qa | grep -E 'libseccomp|device-mapper|lvm2'典型输出示例:
Kylin Linux Advanced Server release V10 (SP2) aarch64 libseccomp-2.5.1-1.ky10注意:银河麒麟SP2默认已包含必要的安全子系统,但需特别注意:
- aarch64架构需对应ARM版Docker包
- x86_64架构需使用特殊编译的兼容版本
2.2 离线资源准备
需要提前下载的组件清单:
| 组件名称 | 版本要求 | 下载源 |
|---|---|---|
| docker-ce | 20.10.18 | 官方ARM64离线包 |
| docker-ce-cli | 同主版本 | 同上 |
| containerd.io | ≥1.6.8 | 麒麟软件仓库 |
| libseccomp | ≥2.4 | 系统自带 |
| 依赖库合集 | - | 本地镜像仓库 |
实际操作建议:
# 建立本地资源目录结构 mkdir -p /opt/offline-docker/{rpms,scripts,config} # 下载示例(需提前在有网络环境执行) wget https://download.docker.com/linux/static/stable/aarch64/docker-20.10.18.tgz -P /opt/offline-docker/rpms3. 分步安装实施
3.1 基础环境配置
先处理系统级依赖:
# 禁用默认防火墙(容器网络需要) systemctl stop firewalld systemctl disable firewalld # 设置SELinux为permissive模式 setenforce 0 sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config # 加载内核模块 modprobe overlay modprobe br_netfilter # 持久化模块加载 cat > /etc/modules-load.d/docker.conf <<EOF overlay br_netfilter EOF3.2 离线安装主程序
解压并安装Docker二进制文件:
tar xzvf /opt/offline-docker/rpms/docker-20.10.18.tgz -C /opt/offline-docker/ cp /opt/offline-docker/docker/* /usr/bin/ # 验证安装 docker --version配置systemd服务单元:
cat > /etc/systemd/system/docker.service <<'EOF' [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=containerd.service [Service] Type=notify ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ExecReload=/bin/kill -s HUP $MAINPID TimeoutSec=0 RestartSec=2 Restart=always StartLimitBurst=3 StartLimitInterval=60s LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TasksMax=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target EOF3.3 配置优化
生产环境建议的daemon.json配置:
{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m", "max-file": "3" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://your-local-mirror.registry"] }4. 验证与排错
4.1 基础功能测试
启动服务并验证:
systemctl daemon-reload systemctl enable --now docker # 运行测试容器 docker run --rm hello-world # 检查容器网络 docker run --rm -it alpine ping -c 4 www.example.com4.2 常见问题处理
问题1:cgroup挂载失败
Error response from daemon: cgroups: cannot find cgroup mount destination解决方案:
mkdir /sys/fs/cgroup/systemd mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd问题2:镜像拉取证书错误
x509: certificate signed by unknown authority处理方法:
mkdir -p /etc/docker/certs.d/registry.example.com cp your-ca.crt /etc/docker/certs.d/registry.example.com/ca.crt5. 生产环境加固建议
- 日志审计配置:
cat > /etc/rsyslog.d/docker.conf <<EOF if $programname == 'dockerd' then /var/log/docker.log & stop EOF- 资源限制策略:
# 在daemon.json中追加 "default-ulimits": { "nofile": { "Name": "nofile", "Hard": 65535, "Soft": 65535 } }- 定期维护脚本:
#!/bin/bash # 清理超过30天的容器日志 find /var/lib/docker/containers -name "*.log" -mtime +30 -delete # 清理悬空镜像 docker image prune -a -f --filter "until=240h"我在某政务云项目中实际验证,该方案可在完全离线的ARM64环境中稳定运行Docker服务。关键点在于:
- 提前下载所有依赖包的指定版本
- 针对银河麒麟的内核参数进行调优
- 使用overlay2存储驱动时需要特别配置内核参数
对于需要更高安全要求的场景,建议额外配置:
- 容器运行时保护(如gVisor)
- 镜像签名验证
- 网络策略白名单