龙芯3B6000平台手动安装Docker 29.5.1:二进制部署与架构适配指南 这次我们来看一个在龙芯 3B6000 平台上安装高版本 Docker 的具体实践。对于使用国产龙芯 CPU 的开发者来说直接通过包管理器安装的 Docker 版本往往较低可能无法满足新特性或安全更新的需求。本文将聚焦于如何绕过系统包管理器通过二进制方式手动安装 Docker 29.5.1 版本并解决在龙芯架构下可能遇到的关键依赖问题。这个方案的核心价值在于它不依赖于特定发行版的软件仓库为龙芯平台提供了一个获取最新 Docker 引擎的可靠路径。整个过程涉及二进制包下载、关键依赖库如containerd、runc的部署、服务配置与验证。如果你正在龙芯 3B6000 上部署容器化应用或需要特定高版本 Docker 的功能这篇文章将提供一套可直接操作、步骤清晰的部署指南。1. 核心能力速览能力项说明目标平台龙芯 3B6000 处理器LoongArch 架构安装方式二进制手动安装不依赖系统包管理器如apt、yum目标版本Docker Engine 29.5.1核心组件dockerd守护进程、containerd、runc、docker-cli客户端主要功能完整的 Docker 容器生命周期管理构建、运行、推送镜像等适用场景龙芯平台需要高版本 Docker 特性的开发、测试与生产环境前置要求系统已安装基础工具curl,tar并具备sudo或 root 权限2. 适用场景与使用边界这个安装方案主要适用于以下几类用户和场景龙芯平台开发者与运维人员需要在龙芯 3B6000 服务器或开发板上搭建最新的容器化环境。追求特定 Docker 版本项目依赖 Docker 29.x 版本的新特性如构建器BuildKit的增强、安全特性更新等而系统仓库只提供旧版本。环境隔离与控制希望将 Docker 的安装与系统包管理器解耦便于独立升级和管理。CI/CD 流水线构建在龙芯架构的构建节点上需要统一且高版本的 Docker 环境来保证构建的一致性。使用边界与注意事项非官方仓库支持此方法安装的 Docker 未集成到系统包管理器中后续升级需要手动重复类似过程。依赖管理需要自行处理containerd、runc等运行时组件的版本兼容性与更新。系统服务集成虽然会配置为 systemd 服务但可能与某些深度集成 Docker 的系统工具如某些监控代理存在适配问题。安全更新你需要主动关注 Docker 官方安全公告并手动更新二进制文件无法通过apt-get upgrade等命令自动获取安全补丁。3. 环境准备与前置条件开始安装前请确保你的龙芯 3B6000 系统满足以下条件操作系统一个主流的 Linux 发行版如 LoongnixFedora 衍生、UOS、麒麟等。本文命令以通用 Linux 为基础。用户权限你需要拥有sudo权限或直接使用root用户进行操作。网络连接系统可以访问互联网用于下载 Docker 官方发布的静态编译二进制包。基础工具确保已安装curl用于下载、tar用于解压和grep等常用工具。通常它们默认已安装可通过以下命令检查which curl tar grep防火墙与 SELinux如果系统启用了防火墙如firewalld、ufw或 SELinux请预先规划好放行策略或将其设置为宽容模式避免影响 Docker 守护进程的启动和网络通信。本文侧重于安装安全策略需根据实际生产环境配置。旧版本 Docker如果系统已通过包管理器安装了旧版 Docker建议先彻底卸载避免冲突。卸载命令因发行版而异例如# 对于基于 Debian/Ubuntu 的系统 sudo apt-get remove docker docker-engine docker.io containerd runc # 对于基于 RHEL/CentOS/Fedora 的系统 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine4. 安装部署与启动方式我们将按照下载、安装、配置、启动的步骤进行。4.1 下载 Docker 二进制包Docker 官方为不同架构提供了静态编译的二进制包。我们需要找到适用于loong64架构的版本。通常你可以从 Docker 官方的 GitHub Release 页面或镜像站获取。创建一个临时工作目录并进入mkdir -p /tmp/docker-install cd /tmp/docker-install使用curl下载 Docker 二进制压缩包。你需要确认下载链接的有效性。一个通用的方法是尝试从官方仓库下载。以下是一个示例命令请注意版本和架构# 示例下载 Docker 29.5.1 的静态二进制包假设 loong64 架构的包名包含 ‘loong’ 或 ‘la64’ # 实际URL需要根据官方发布情况调整。如果此链接失效请前往 https://download.docker.com/linux/static/stable/ 查看是否有 loong64 目录。 # 这里以社区维护的镜像站为例请确保来源可信 DOCKER_VERSION29.5.1 sudo curl -L https://mirror.ghproxy.com/https://github.com/moby/moby/releases/download/v${DOCKER_VERSION}/docker-${DOCKER_VERSION}.loong64.tar.gz -o docker.tar.gz重要如果上述链接不可用你需要手动在网络上搜索 “docker static binary loong64” 或访问 Docker 官方 GitHub 仓库的 Releases 页面寻找为 LoongArch 架构编译的*.tar.gz文件。下载containerd和runc的二进制文件它们通常包含在 Docker 的静态包中但为了确保版本匹配有时需要单独下载。如果 Docker 包内已包含可跳过此步。同样需要寻找loong64版本。# 示例下载 containerd版本需与 Docker 兼容 sudo curl -L https://github.com/containerd/containerd/releases/download/v2.0.0/containerd-2.0.0-linux-loong64.tar.gz -o containerd.tar.gz # 示例下载 runc sudo curl -L https://github.com/opencontainers/runc/releases/download/v1.2.0/runc.loong64 -o runc4.2 解压与安装二进制文件解压 Docker 二进制包到系统目录sudo tar xzvf docker.tar.gz --strip-components1 -C /usr/local/bin这会将docker、dockerd、docker-init、docker-proxy等可执行文件解压到/usr/local/bin。如果单独下载了containerd解压并安装sudo tar xzvf containerd.tar.gz -C /usr/local/bin如果单独下载了runc安装并设置可执行权限sudo install -m 755 runc /usr/local/bin/runc验证关键二进制文件是否已就位ls -lh /usr/local/bin/docker /usr/local/bin/dockerd /usr/local/bin/containerd /usr/local/bin/runc 2/dev/null || echo “部分文件可能不存在请检查下载和解压步骤”4.3 配置 Docker 系统服务为了让 Docker 守护进程dockerd随系统启动并方便管理我们将其配置为 systemd 服务。创建 Docker 的 systemd 服务单元文件sudo tee /etc/systemd/system/docker.service /dev/null EOF [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/local/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID TimeoutSec0 RestartSec2 Restartalways StartLimitBurst3 StartLimitInterval60s LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity Delegateyes KillModeprocess [Install] WantedBymulti-user.target EOF创建containerd的 systemd 服务单元文件sudo tee /etc/systemd/system/containerd.service /dev/null EOF [Unit] Descriptioncontainerd container runtime Documentationhttps://containerd.io Afternetwork.target local-fs.target [Service] ExecStartPre-/sbin/modprobe overlay ExecStart/usr/local/bin/containerd KillModeprocess Delegateyes LimitNOFILE1048576 LimitNPROCinfinity LimitCOREinfinity TasksMaxinfinity Restartalways RestartSec5 [Install] WantedBymulti-user.target EOF重新加载 systemd 配置使新的服务文件生效sudo systemctl daemon-reload4.4 启动 Docker 服务首先启动containerd服务sudo systemctl enable --now containerd sudo systemctl status containerd检查状态确保containerd处于active (running)。启动 Docker 服务sudo systemctl enable --now docker sudo systemctl status docker同样检查 Docker 服务状态是否为active (running)。5. 功能测试与效果验证服务启动后需要进行一系列测试来验证 Docker 是否安装成功且功能正常。5.1 基础命令测试验证 Docker 客户端与服务器版本docker version此命令应同时输出客户端Client和服务器Server的版本信息。确认 Server 版本为29.5.1并且OS/Arch显示为linux/loong64。这是安装成功的最直接证据。运行一个简单的测试容器sudo docker run --rm hello-world这个命令会从 Docker Hub 拉取hello-world镜像如果本地没有并运行一个一次性容器。如果成功你将在终端看到 “Hello from Docker!” 等欢迎信息。这验证了 Docker 守护进程运行正常能够拉取镜像、创建并运行容器。5.2 核心功能验证镜像管理测试# 搜索镜像例如搜索 LoongArch 架构的 Alpine Linux docker search --filter is-officialtrue alpine # 拉取一个轻量级镜像进行测试注意选择支持多架构或明确支持 loong64 的镜像 docker pull alpine:latest # 列出本地镜像 docker images容器生命周期测试# 以后台模式运行一个 Alpine 容器 docker run -d --name test-alpine alpine sleep 3600 # 查看运行中的容器 docker ps # 进入容器执行命令 docker exec test-alpine echo “Hello from inside the container” # 停止容器 docker stop test-alpine # 删除容器 docker rm test-alpine网络功能测试# 运行一个 Nginx 容器并映射端口 docker run -d --name test-nginx -p 8080:80 nginx:alpine # 使用 curl 访问本地映射的端口 curl http://localhost:8080如果返回 Nginx 的欢迎页面 HTML则说明容器网络和端口映射功能正常。测试完毕后记得清理docker stop test-nginx docker rm test-nginx。6. 配置优化与用户组管理默认情况下运行docker命令需要sudo。为了方便可以将当前用户加入docker用户组。创建docker用户组如果不存在sudo groupadd docker将当前用户添加到docker组sudo usermod -aG docker $USER重要为了使组更改生效你需要注销并重新登录或者打开一个新的终端会话。验证无需sudo即可运行 Docker 命令docker run --rm hello-world如果成功说明用户组配置生效。7. 常见问题与排查方法在龙芯平台上手动安装高版本 Docker 可能会遇到一些特有或常见的问题。问题现象可能原因排查方式解决方案执行docker version时 Server 部分显示为空或报错1.dockerd守护进程未启动。2. 用户权限不足无法连接 Docker 套接字。3.containerd服务启动失败。1.sudo systemctl status docker查看服务状态。2.sudo docker version看是否正常。3. 检查/var/run/docker.sock的权限。1. 根据systemctl status的日志启动服务。2. 将用户加入docker组并重新登录。3. 排查containerd的日志sudo journalctl -u containerd。启动docker或containerd服务失败1. 二进制文件缺失或权限不对。2. 依赖的内核模块未加载如overlay、br_netfilter。3. 端口冲突如 2375, 2376。1.ls -l /usr/local/bin/dockerd检查文件是否存在且可执行。2. lsmodgrep overlay检查模块。br3.sudo netstat -tlnp 查看端口占用。拉取镜像失败报no matching manifest for linux/loong64拉取的镜像不支持 LoongArch 架构。使用docker manifest inspect image:tag查看镜像支持的架构。1. 寻找明确支持linux/loong64的镜像。2. 尝试拉取多架构镜像Manifest ListDocker 会自动选择支持的架构。3. 在 x86 机器上构建支持多架构的镜像并推送到仓库。运行容器时提示exec format error容器内的可执行文件格式与宿主机架构不匹配。确认你运行的镜像是否是为loong64编译的。使用为 LoongArch 架构编译的基础镜像如cr.loongnix.cn/library/alpine:latest来构建或运行容器。docker run命令执行非常慢或卡住1. 首次拉取镜像网络慢。2. 镜像层校验或解压慢。3. 存储驱动如overlay2在特定文件系统上性能问题。1. 观察docker pull的输出和网络状态。2. 检查磁盘 I/O 使用率iostat。1. 配置 Docker 镜像加速器修改/etc/docker/daemon.json。2. 确保有足够的磁盘空间和正常的 I/O 性能。3. 考虑使用devicemapper等其他存储驱动需谨慎配置。8. 最佳实践与使用建议配置镜像加速器为了提升拉取镜像的速度特别是对于国内网络环境强烈建议配置镜像加速器。创建或修改/etc/docker/daemon.json文件{ “registry-mirrors”: [ “https://docker.mirrors.ustc.edu.cn“, “https://hub-mirror.c.163.com“ ] }修改后重启 Docker 服务sudo systemctl restart docker。数据目录管理默认情况下Docker 镜像、容器、卷等数据存储在/var/lib/docker。如果该目录所在分区空间不足可以考虑在安装前通过符号链接或直接修改daemon.json中的>