鲲鹏架构+银河麒麟V10:手把手教你离线搞定Docker-ce 20.10.7

📅 发布时间:2026/7/9 1:26:34 👁️ 浏览次数:
鲲鹏架构+银河麒麟V10:手把手教你离线搞定Docker-ce 20.10.7
鲲鹏架构银河麒麟V10手把手教你离线搞定Docker-ce 20.10.7最近在几个信创项目里我频繁接触到基于鲲鹏920处理器和银河麒麟V10操作系统的服务器。这些环境通常部署在内网甚至完全与互联网隔离但业务上又迫切需要容器化技术来提升部署效率和资源利用率。Docker自然是首选但官方源用不了各种依赖问题层出不穷确实让人头疼。如果你也正面临类似困境希望在一个纯净的、离线的麒麟V10系统上从零开始部署一个稳定可用的Docker环境那么这篇结合了多次实战踩坑经验的指南或许能帮你省下不少折腾的时间。我们将聚焦于aarch64架构下的二进制包离线安装绕过令人烦恼的yum依赖地狱直接通过最底层的二进制文件完成部署和配置确保过程清晰、可控。1. 环境准备与深度检查在动手安装任何软件之前充分了解你的战场——操作系统环境——是避免后续无数坑的第一步。对于国产化平台这一点尤其重要因为通用Linux发行版的许多经验在这里可能不再完全适用。首先我们需要确认系统的确切版本和架构。打开终端执行以下命令cat /etc/os-release cat /etc/kylin-release uname -m对于银河麒麟V10你通常会看到类似Kylin Linux Advanced Server release V10 (Tercel)的信息而uname -m或uname -p的输出必须是aarch64这对应着鲲鹏处理器的ARM架构。这一点至关重要因为所有后续的软件包都必须是对应aarch64架构的版本x86_64的包完全无法运行。注意有些文档可能会提到银河麒麟基于CentOS但在我们的离线安装场景下完全不需要配置任何CentOS的yum源。依赖在线源反而会引入复杂的兼容性问题我们追求的是最小化依赖、最大化可控的离线部署。接下来检查内核版本。Docker需要Linux内核版本不低于3.10。运行uname -r查看。银河麒麟V10默认的内核版本通常是4.x完全满足要求。此外虽然我们采用二进制安装不依赖系统包管理器安装Docker但一些基础的工具如tar,wget用于从可联网的机器下载包、iptables等需要确保存在。可以用which tar这样的命令简单检查。最后规划好你的工作目录。我习惯在/opt下创建一个临时工作区用于存放所有下载的安装包和进行解压操作这样便于管理安装完成后也容易清理。sudo mkdir -p /opt/docker_install cd /opt/docker_install2. 彻底清理旧版本与获取二进制包如果你之前尝试过其他方式安装Docker但失败了或者系统预装了未知版本的Docker一个干净的起点非常必要。与在线安装不同二进制安装方式不通过包管理器因此卸载时也要注意清理相关文件。彻底移除旧Docker组件 即使系统显示没有安装docker也可能存在残留的旧版本二进制文件、配置或容器数据。执行以下命令组进行深度清理# 停止所有可能的Docker服务 sudo systemctl stop docker docker.socket containerd sudo systemctl disable docker docker.socket # 移除通过包管理器安装的Docker如果存在 sudo yum remove -y docker-engine docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-ce docker-ce-cli containerd.io 2/dev/null # 关键手动删除Docker相关目录和文件 sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -rf /etc/docker sudo rm -rf /usr/bin/docker* sudo rm -rf /usr/bin/containerd* sudo rm -rf /usr/bin/ctr sudo rm -rf /usr/bin/runc清理完成后最好重启一次系统确保所有残留进程被清除。获取Docker-ce 20.10.7二进制包 由于是离线环境你需要在一台能够访问互联网的、同样为aarch64架构的机器上或者通过其他方式下载所需的压缩包。我们选择Docker官方提供的静态二进制归档文件它包含了运行Docker守护进程和客户端所需的所有二进制文件不依赖复杂的系统库。官方下载地址为https://download.docker.com/linux/static/stable/aarch64/。我们选择版本20.10.7这是一个长期支持LTS版本在稳定性和功能上取得了很好的平衡。直接下载wget https://download.docker.com/linux/static/stable/aarch64/docker-20.10.7.tgz将下载好的docker-20.10.7.tgz文件通过U盘、内部文件服务器或任何可行的方式传输到目标离线服务器的/opt/docker_install目录下。3. 二进制部署与系统服务集成现在我们开始在目标服务器上进行核心安装。这种方式直接将可执行文件部署到系统路径类似于“绿色安装”。解压与部署二进制文件# 进入工作目录 cd /opt/docker_install # 解压tgz包 sudo tar -xzvf docker-20.10.7.tgz # 查看解压出的内容 ls docker/你会看到解压出的docker/目录里包含了dockerd,docker,containerd,ctr,runc等一系列二进制文件。接下来将它们复制到系统的可执行文件路径/usr/bin/下sudo cp docker/* /usr/bin/至此Docker的核心引擎和客户端工具就已经安装到你的系统里了。你可以尝试直接运行sudo dockerd来启动守护进程但这会占用当前终端且不是持久化的服务。我们需要将其配置为systemd服务。创建并配置systemd服务单元 使用systemd来管理Docker服务是最规范、最便于管理的方式。创建服务配置文件sudo vi /usr/lib/systemd/system/docker.service将以下配置内容粘贴进去。这份配置针对二进制安装进行了优化指定了正确的二进制路径并设置了一些重要的参数如Typenotify让systemd能更好地监控服务状态LimitNOFILEinfinity解除文件描述符限制等。[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service containerd.service Wantsnetwork-online.target Requirescontainerd.service [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID TimeoutStartSec0 RestartSec2 Restartalways StartLimitBurst3 StartLimitInterval60s LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity Delegateyes KillModeprocess [Install] WantedBymulti-user.target保存退出后设置文件权限并重新加载systemd配置sudo chmod 644 /usr/lib/systemd/system/docker.service sudo systemctl daemon-reload配置Docker守护进程参数 为了让Docker更好地运行特别是考虑到国内网络环境和与系统集成的需要我们创建daemon.json配置文件。这个文件可以配置镜像加速器、日志驱动、存储驱动等。sudo mkdir -p /etc/docker sudo vi /etc/docker/daemon.json输入以下基础配置。这里我们设置了native.cgroupdriversystemd这对于使用systemd作为init系统的银河麒麟V10来说是最佳选择能确保系统稳定。data-root指定了Docker镜像和容器的存储路径你可以根据需要修改。{ exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m, max-file: 3 }, data-root: /var/lib/docker, storage-driver: overlay2 }提示在完全离线的环境中registry-mirrors镜像加速器配置是无效的因此这里没有添加。镜像需要提前下载并导入我们会在后面章节详细说明。4. 服务启动、验证与基础优化完成所有配置后就可以启动Docker服务了。启动并设置开机自启# 启动docker服务 sudo systemctl start docker # 设置开机自动启动 sudo systemctl enable docker # 查看服务状态确认是否为active (running) sudo systemctl status docker如果状态显示为active (running)并且没有报错信息那么恭喜你Docker服务已经成功在离线环境下跑起来了。验证安装 运行几个基本命令来验证Docker客户端和引擎是否正常工作# 查看Docker版本信息 docker version # 查看更详细的系统级信息 docker infodocker info的输出会包含很多有用信息请关注以下几项Server Version: 应为 20.10.7OSType: linuxArchitecture: aarch64Cgroup Driver: systemdStorage Driver: overlay2如果这些信息都正确无误说明安装和基础配置是成功的。进行一个简单的“冒烟测试” 虽然离线我们仍然可以测试Docker的基本运行能力。Docker本身带有一个内置的测试镜像hello-world但它需要从仓库拉取。在离线环境下我们可以通过一个极简的命令测试容器运行功能运行一个什么都不做的容器并立即退出。docker run --rm alpine:latest echo Docker is working!这条命令会尝试运行一个Alpine Linux容器并执行echo命令。注意在首次执行时由于本地没有alpine:latest镜像它会报错“Unable to find image”。这恰恰证明了Docker客户端在正常工作只是在尝试拉取镜像。离线环境下的镜像管理是下一个重点。基础性能与安全调优可选但推荐 对于生产环境可以考虑在/etc/docker/daemon.json中增加一些优化参数然后执行sudo systemctl restart docker重启服务生效。配置项建议值说明default-ulimits{nofile: {Hard: 65536, Name: nofile, Soft: 65536}}设置容器默认的文件描述符限制避免应用报“too many open files”错误。live-restoretrue允许在dockerd重启期间保持容器运行增强服务的可用性。iptablesfalse在严格的内网离线环境且网络策略由外部防火墙统一管理时考虑。禁用Docker自动管理iptables规则避免冲突。5. 离线镜像管理与实战操作指南离线环境下最大的挑战是如何获取和管理Docker镜像。无法直接使用docker pull意味着我们需要一套“手工搬运”的流程。镜像的导出与导入 这是离线环境镜像分发的核心方法。在可以联网的机器上架构必须也是aarch64拉取所需镜像然后导出为文件再传输到离线服务器导入。在联网机aarch64上操作# 拉取需要的镜像例如Nginx、Redis docker pull nginx:alpine docker pull redis:alpine # 将镜像保存为tar归档文件 docker save -o nginx-alpine.tar nginx:alpine docker save -o redis-alpine.tar redis:alpine你也可以将多个镜像打包到一个文件里docker save -o my-images.tar image1:tag1 image2:tag2。将生成的.tar文件传输到离线服务器。在离线服务器上操作# 导入镜像 docker load -i nginx-alpine.tar docker load -i redis-alpine.tar # 确认镜像已存在 docker images使用私有镜像仓库高级推荐 对于需要频繁分发大量镜像的场景在离线环境内部搭建一个私有Docker镜像仓库Registry是更优雅的解决方案。这样内部开发测试机就可以像使用Docker Hub一样向这个私有仓库推送和拉取镜像。在离线环境中的一台服务器上部署私有Registry# 从之前导入的镜像中运行Registry假设已导入registry:2镜像 docker run -d -p 5000:5000 --restartalways --name registry -v /opt/registry:/var/lib/registry registry:2这个命令会在本地启动一个Registry服务数据持久化在宿主机的/opt/registry目录并通过5000端口提供服务。配置Docker客户端信任该私有仓库非HTTPS情况下 修改离线服务器和其他内部机器的/etc/docker/daemon.json添加insecure-registries配置{ ... // 原有配置 insecure-registries: [your-registry-ip:5000] }重启Docker服务sudo systemctl restart docker。镜像推送与拉取流程在联网机打标签并推送到私有仓库需要先将Registry镜像和仓库地址传输到联网机并配置docker tag nginx:alpine your-registry-ip:5000/my-nginx:v1 docker push your-registry-ip:5000/my-nginx:v1在离线环境的任何一台已配置的机器上可以直接拉取docker pull your-registry-ip:5000/my-nginx:v1编写Dockerfile并构建镜像 在离线环境下你同样可以基于已有的基础镜像通过编写Dockerfile来构建自定义镜像。关键在于Dockerfile中所有COPY或ADD指令所需的文件都必须预先存在于构建上下文中所有RUN指令中执行的命令都不能依赖外网下载。例如一个离线的Python应用Dockerfile可能长这样# 使用已导入的Python基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 将本地的依赖文件清单和所有源代码复制到镜像中 COPY requirements.txt ./ COPY src/ ./src/ # 离线安装Python依赖包假设已通过pip download下载好所有whl/tar.gz包到本地packages目录 COPY packages/ ./packages/ RUN pip install --no-index --find-links/app/packages -r requirements.txt # 声明应用端口 EXPOSE 8000 # 启动命令 CMD [python, src/app.py]构建时只需在包含Dockerfile和所有本地文件的目录下执行docker build -t my-offline-app .即可。在整个离线镜像管理过程中核心思想就是“提前准备本地化所有资源”。通过规范的镜像导出导入流程或搭建内部私有仓库完全可以构建起一个高效、自治的离线容器化开发和部署环境。