
在国产化技术栈逐步落地的过程中龙芯平台因其自主指令集架构而备受关注。龙芯 3B6000 作为新一代高性能处理器其软件生态的适配与完善是开发者面临的实际挑战。其中容器化技术 Docker 的部署是构建现代应用环境的基础。然而在龙芯架构LoongArch上直接使用官方仓库的 Docker 版本往往存在兼容性问题尤其是当需要特定高版本如 29.5.1时通过 RPM 包进行离线或定制化安装成为常见需求。本文将详细讲解在龙芯 3B6000 平台上如何从源码编译或获取适配的 RPM 包并成功安装 Docker 29.5.1 版本涵盖从环境准备、依赖解决、安装配置到验证排错的完整流程。1. 理解龙芯平台 Docker 安装的特殊性在 x86_64 或 ARM64 架构上安装 Docker 通常只需几条命令从官方仓库拉取预编译的二进制包即可。但在龙芯 LoongArch 架构上情况则复杂得多。1.1 架构差异与软件生态龙芯 3B6000 处理器采用 LoongArch 指令集这与主流的 x86_64 和 ARM64 架构二进制不兼容。Docker 官方并未为 LoongArch 提供预编译的二进制包。因此在龙芯平台上运行 Docker 主要有两种途径一是使用社区或厂商提供的、已经移植编译好的软件包二是自行从源码编译。对于生产环境使用经过验证的 RPM 包是更稳定、更便于分发的选择。1.2 Docker 29.5.1 版本的意义Docker 版本迭代迅速新版本通常会带来性能改进、新特性支持和安全补丁。29.5.1 是一个相对较新的维护版本可能修复了之前版本的一些关键问题。在龙芯平台上并非所有 Docker 版本都有现成的移植包因此明确目标版本29.5.1意味着我们需要找到或构建针对该特定版本的 LoongArch 架构 RPM 包。这涉及到对 Docker 及其庞大依赖链的交叉编译或本机编译是一项系统工程。1.3 RPM 包管理的优势在基于 RPM 的 Linux 发行版如 CentOS、Anolis OS、Loongnix上使用 RPM 包安装软件可以自动处理依赖关系便于版本管理和系统化部署。对于 Docker 这样包含客户端 (docker)、守护进程 (dockerd)、容器运行时 (containerd) 和工具 (docker-compose-plugin) 的复杂套件通过 RPM 安装能确保各个组件版本匹配文件路径规范服务管理集成良好。2. 安装前的环境准备与检查在开始安装之前必须确保基础系统环境满足要求并准备好必要的工具和依赖。2.1 系统与内核要求首先确认你正在龙芯 3B6000 硬件上运行一个支持 LoongArch 的 Linux 发行版。常见的如 Loongnix Server、Anolis OS for LoongArch 或统信 UOS 服务器版。通过以下命令检查系统信息# 查看 CPU 和架构信息 lscpu | grep -E “Architecture|Model name” # 预期输出应包含 “LoongArch” 和 “3B6000” # 查看内核版本 uname -r # Docker 对内核版本有要求建议内核版本在 4.x 以上推荐 5.x # 查看操作系统发行版 cat /etc/os-release一个典型的输出可能如下Architecture: loongarch64 Model name: Loongson-3B6000 5.10.0-26-generic NAME“Loongnix Server” VERSION“20”2.2 安装基础编译与依赖工具无论你是要编译 Docker RPM 包还是直接安装已编译好的包都需要一些基础工具。执行以下命令安装# 更新软件包索引 sudo dnf update -y # 对于基于 DNF 的系统如 Loongnix, Anolis # 或 sudo yum update -y 对于旧版 YUM 系统 # 安装编译工具、开发库和 RPM 构建工具 sudo dnf groupinstall -y “Development Tools” sudo dnf install -y rpm-build rpmdevtools createrepo \ make gcc git wget curl tar gzip \ bash-completion device-mapper-persistent-data lvm2 \ libseccomp-devel systemd-devel glibc-devel2.3 配置软件源与解决通用依赖确保系统的软件源已正确配置能够安装 Docker 所需的基础运行时依赖如containerd、runc等。这些依赖可能已有 LoongArch 版本的 RPM 包。# 示例检查并添加必要的软件源具体源地址需根据你的发行版调整 # 例如Loongnix 可能已有相关源 sudo dnf config-manager --add-repo http://pkg.loongnix.cn/loongnix/loongarch64/ sudo dnf makecache3. 获取或构建 Docker 29.5.1 的 LoongArch RPM 包这是最核心也是最困难的一步。你有两个选择从可信渠道下载已构建好的 RPM 包或者自行从源码构建。3.1 方案一下载预编译的 RPM 包如果存在优先寻找由龙芯社区、操作系统厂商或可信第三方提供的预编译包。这可以节省大量时间和计算资源。确定包名Docker 通常被打包成多个 RPM例如docker-ce-29.5.1-1.el9.loongarch64.rpm(Docker 客户端和守护进程)docker-ce-cli-29.5.1-1.el9.loongarch64.rpm(Docker CLI)containerd.io-1.6.31-1.el9.loongarch64.rpm(容器运行时)docker-ce-rootless-extras-29.5.1-1.el9.loongarch64.rpm(Rootless 扩展)docker-buildx-plugin-0.14.0-1.el9.loongarch64.rpm(Buildx 插件)docker-compose-plugin-2.27.1-1.el9.loongarch64.rpm(Compose 插件)搜索与下载访问龙芯开源社区、Anolis OS 镜像站或相关厂商的软件仓库。使用wget或curl下载找到的包。务必验证包的完整性和签名。# 示例假设在 /opt/packages 目录下存放下载的 RPM 包 mkdir -p /opt/packages/docker-29.5.1 cd /opt/packages/docker-29.5.1 # 使用 wget 下载URL 需替换为真实地址 wget http://example.repo/path/to/docker-ce-29.5.1-1.el9.loongarch64.rpm wget http://example.repo/path/to/docker-ce-cli-29.5.1-1.el9.loongarch64.rpm wget http://example.repo/path/to/containerd.io-1.6.31-1.el9.loongarch64.rpm # ... 下载其他所需包3.2 方案二从源码编译构建 RPM 包如果找不到预编译包则需要从源码构建。这是一个复杂的过程需要解决大量依赖。准备构建环境# 设置 RPM 构建目录结构 rpmdev-setuptree cd ~/rpmbuild/SOURCES获取 Docker 源码 前往 Docker 官方 GitHub 仓库的 Release 页面找到 29.5.1 版本的源码压缩包。wget https://github.com/moby/moby/archive/refs/tags/v29.5.1.tar.gz -O docker-29.5.1.tar.gz # 注意Docker 引擎moby和 CLIcli是分开的仓库构建 RPM 可能需要 spec 文件。 # 更常见的方法是使用发行版如 Fedora/CentOS的 docker-ce.spec 文件进行适配。适配 Spec 文件与解决依赖 这是最关键的步骤。你需要一个用于 LoongArch 的docker-ce.spec文件。可以尝试从 Fedora Rawhide 或 CentOS Stream 的源码包中获取并针对 LoongArch 进行修改。修改%{_arch}判断加入loongarch64。确保所有 BuildRequires 和 Requires 中的依赖在 LoongArch 上可用或可被构建。可能需要先手动为 LoongArch 编译containerd、runc、libnetwork、tini等依赖项并制作成 RPM 包。执行构建# 将 spec 文件和源码放入正确位置后 rpmbuild -ba ~/rpmbuild/SPECS/docker-ce.spec这个过程可能持续数小时并可能遇到大量编译错误需要逐一解决依赖和代码适配问题。注意从源码为龙芯构建 Docker 是一个深度任务涉及整个容器技术栈的移植。对于大多数应用开发者强烈建议优先寻找并验证预编译的二进制包。如果必须编译建议参考龙芯社区或操作系统厂商提供的完整构建指南。4. 安装 Docker RPM 包与配置假设你已经通过方案一或方案二获得了所需的 RPM 包。接下来进行安装。4.1 安装 RPM 包使用rpm或dnf命令安装。推荐使用dnf或yum因为它们能自动处理包之间的依赖关系。# 进入存放 RPM 包的目录 cd /opt/packages/docker-29.5.1 # 使用 dnf localinstall 安装它会自动解决本地包的依赖 sudo dnf localinstall -y ./*.rpm # 或使用 rpm 命令手动安装需按依赖顺序 # sudo rpm -ivh containerd.io*.rpm # sudo rpm -ivh docker-ce-cli*.rpm # sudo rpm -ivh docker-ce*.rpm # sudo rpm -ivh docker-*.rpm4.2 验证安装与版本安装完成后验证 Docker 组件是否安装成功及其版本。# 检查 Docker 客户端版本 docker version --format ‘{{.Client.Version}}’ # 预期输出29.5.1 # 检查 Docker 守护进程版本需要服务启动 sudo systemctl start docker sudo docker version --format ‘{{.Server.Version}}’ # 预期输出29.5.1 # 检查 containerd 版本 containerd --version4.3 配置 Docker 守护进程默认安装后Docker 守护进程的配置文件位于/etc/docker/daemon.json。如果文件不存在可以创建它来进行自定义配置这对于国内用户设置镜像加速器尤为重要。sudo tee /etc/docker/daemon.json -‘EOF’ { “registry-mirrors”: [ “https://docker.mirrors.ustc.edu.cn“, “https://hub-mirror.c.163.com“ ], “exec-opts”: [“native.cgroupdriversystemd”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “100m” }, “storage-driver”: “overlay2” } EOF配置说明registry-mirrors配置国内镜像加速源大幅提升拉取镜像速度。native.cgroupdriversystemd对于使用 systemd 的发行版建议设置为systemd以保持一致性。log-driver和log-opts配置日志驱动和轮转策略防止日志占满磁盘。storage-driver存储驱动overlay2是现代 Linux 内核的推荐选择。4.4 启动并设置开机自启应用配置并启动 Docker 服务。# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动 Docker 服务 sudo systemctl start docker # 设置 Docker 服务开机自启 sudo systemctl enable docker # 检查 Docker 服务状态 sudo systemctl status docker状态检查应显示active (running)。5. 运行验证与基础操作测试安装和配置完成后必须进行实际测试以确保 Docker 完全可用。5.1 运行经典测试容器运行一个最简单的容器验证 Docker 守护进程、镜像拉取和容器运行功能。# 拉取一个 LoongArch 架构的测试镜像如果存在 # 由于公共 LoongArch 镜像较少可以先尝试运行一个不依赖特定架构的轻量级命令 sudo docker run --rm hello-world如果hello-world镜像不存在Docker 会尝试拉取。但由于 Docker Hub 上官方hello-world可能没有 LoongArch 版本这一步可能会失败。这是架构差异导致的正常现象。5.2 测试 LoongArch 架构镜像更实际的测试是运行一个为 LoongArch 编译的镜像。可以尝试从支持多架构的仓库拉取或者运行一个简单的基于busybox或alpine的 LoongArch 镜像如果可用。# 示例尝试运行一个 busybox 容器并执行命令 # 首先查找或构建一个 loongarch64 的 busybox 镜像 # 假设本地已有标签为 busybox:loongarch64 的镜像 sudo docker run --rm -it busybox:loongarch64 uname -m # 期望输出loongarch645.3 测试 Docker 常用命令确保 Docker CLI 的基本功能正常。# 查看 Docker 系统信息 sudo docker info # 列出本地镜像 sudo docker images # 列出运行中的容器 sudo docker ps # 测试构建上下文使用当前目录的 Dockerfile # echo “FROM scratch” Dockerfile # sudo docker build -t test-image .6. 常见问题排查与解决在龙芯平台上安装和使用 Docker 可能会遇到一些特有或常见的问题。6.1 安装阶段问题问题现象可能原因检查与解决方式rpm -ivh报错Failed dependencies缺少依赖包使用dnf localinstall自动解决或根据错误信息手动安装缺少的依赖包需找到 LoongArch 版本。安装成功但docker version报错Cannot connect to the Docker daemonDocker 服务未启动或用户权限不足1. 执行sudo systemctl start docker。2. 将当前用户加入docker组sudo usermod -aG docker $USER然后需要注销并重新登录。systemctl status docker显示失败日志包含failed to start daemon: Error initializing network controller防火墙、网络插件或iptables兼容性问题1. 确保iptables和nftables可用。2. 尝试暂时关闭防火墙sudo systemctl stop firewalld(测试用)。3. 检查内核模块是否加载lsmod6.2 运行时与镜像问题问题现象可能原因检查与解决方式docker run拉取镜像失败报错no matching manifest for linux/loongarch64镜像仓库中没有该镜像的 LoongArch 版本1. 这是最常见的问题。需要寻找提供 LoongArch 镜像的仓库或自行构建。2. 可以尝试使用--platform参数指定但若宿主机是 LoongArch则无法运行其他架构的容器。容器启动后立即退出容器内没有前台进程或镜像中的二进制文件架构不兼容1. 使用docker run -it交互式启动检查。2. 使用docker logs container_id查看容器日志。3. 确认镜像内的可执行文件是为 LoongArch 编译的。容器内网络不通Docker 网络配置问题或宿主机网络策略限制1. 检查容器网络模式docker inspect container_id6.3 性能与稳定性问题存储性能确保使用overlay2存储驱动并检查/var/lib/docker所在磁盘的 I/O 性能。内存与交换分区Docker 对 cgroup 和内存管理有要求确保系统交换分区swap已启用或根据需求正确配置。内核参数对于生产环境可能需要调整内核参数如net.ipv4.ip_forward,vm.max_map_count等。可以通过修改/etc/sysctl.conf并执行sysctl -p来生效。7. 生产环境最佳实践与后续步骤在开发测试环境成功运行后若计划用于生产还需考虑以下方面。7.1 镜像来源与安全官方与可信镜像尽可能使用来自龙芯生态合作伙伴、Anolis OS 官方或经过安全扫描的 LoongArch 基础镜像。私有镜像仓库搭建私有镜像仓库如 Harbor用于存储企业内部构建的 LoongArch 应用镜像避免依赖外部不可控源。镜像扫描集成镜像安全扫描工具检查镜像中的漏洞。7.2 资源管理与监控资源限制为容器设置 CPU、内存限制防止单个容器耗尽主机资源。docker run -it --cpus“1.5” --memory“512m” your-image日志管理配置统一的日志驱动如json-file,syslog,journald并配合日志收集工具如 ELK, Loki进行集中管理。监控部署容器监控方案如 Prometheus cAdvisor Grafana监控容器和宿主机的资源使用情况。7.3 持续集成与镜像构建Dockerfile 优化编写多阶段构建的 Dockerfile减少最终镜像体积。确保在 Dockerfile 中使用 LoongArch 架构的基础镜像FROM loongarch64/...。构建环境在 CI/CD 流水线中使用龙芯架构的构建节点或通过 QEMU 模拟来构建 LoongArch 镜像。多架构构建如果应用需要支持多架构可以研究使用 Docker Buildx 构建多平台镜像但需要为 LoongArch 配置相应的构建器。7.4 下一步学习方向Docker Compose学习使用docker-compose或 Docker Compose Plugin 来定义和运行多容器应用。容器编排了解 Kubernetes 在龙芯平台上的部署与使用这是管理大规模容器化应用的标准。深入内核特性研究 Linux 内核中与容器相关的特性如 cgroups, namespaces, seccomp在 LoongArch 上的支持情况。参与社区关注龙芯开源社区和 Anolis OS 社区获取最新的软件适配动态反馈使用问题甚至参与贡献。在龙芯 3B6000 平台上成功部署 Docker 29.5.1标志着向完整的国产化容器应用生态迈出了坚实的一步。整个过程的核心挑战在于软件包的获取与兼容性。对于团队而言建立内部的基础软件包仓库包括 Docker、常用中间件等是提升后续开发部署效率的关键。在实际项目中除了关注 Docker 本身的运行更要重视基于 LoongArch 架构的应用镜像的构建、存储与分发链条的打通。