ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

银河麒麟V10 SP2离线安装Docker 20.10全攻略

银河麒麟V10 SP2离线安装Docker 20.10全攻略

1. 项目背景与需求解析

在国产化替代的大背景下,银河麒麟操作系统作为国产自主操作系统的代表,其服务器版本V10 SP2已广泛应用于政务、金融等关键领域。而Docker作为容器化技术的标杆,其20.10版本在稳定性与功能完备性上达到了较好的平衡。但在实际生产环境中,很多部署场景往往面临以下典型问题:

  1. 内网环境无法直接访问外网软件源
  2. 安全合规要求所有组件必须经过完整性校验
  3. 需要明确记录所有依赖项的来源和版本
  4. 安装过程必须适配国产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-ce20.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/rpms

3. 分步安装实施

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 EOF

3.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 EOF

3.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.com

4.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.crt

5. 生产环境加固建议

  1. 日志审计配置:
cat > /etc/rsyslog.d/docker.conf <<EOF if $programname == 'dockerd' then /var/log/docker.log & stop EOF
  1. 资源限制策略:
# 在daemon.json中追加 "default-ulimits": { "nofile": { "Name": "nofile", "Hard": 65535, "Soft": 65535 } }
  1. 定期维护脚本:
#!/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)
  • 镜像签名验证
  • 网络策略白名单
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进