这次我们来看一个在龙芯 3B6000 平台上安装 Docker 29.5.1 的实战过程。对于使用国产龙芯架构(LoongArch)的开发者来说,直接使用官方仓库的 Docker 版本往往较低,而高版本 Docker 带来的新特性和性能优化又是开发部署中迫切需要的。本文将详细拆解如何通过 RPM 包,在龙芯 3B6000 上成功部署 Docker 29.5.1,并验证其核心功能。

整个过程的核心挑战在于解决高版本 Docker 在龙芯平台上的依赖和兼容性问题。我们将从环境准备、依赖包手动编译安装、Docker RPM 包获取与安装,到最后的服务验证与基础使用,提供一套完整的、可复现的操作指南。如果你正在龙芯平台上构建容器化环境,或者对国产化软件生态的适配感兴趣,这篇文章将为你提供直接的参考。

1. 核心能力速览

在开始具体操作前,我们先快速了解本次部署的目标和关键信息。

能力项 说明
目标平台 龙芯 3B6000 处理器,LoongArch 架构
目标软件 Docker Engine 29.5.1
安装方式 RPM 包离线安装
核心价值 在龙芯平台获取较新的 Docker 版本,支持更多现代容器特性
主要挑战 解决高版本依赖(如 containerd.io , runc )的架构适配问题
前置要求 系统需具备基本的编译环境(gcc, make等)和网络访问(用于下载源码)
适合场景 龙芯平台下的软件开发、测试、CI/CD 流水线搭建等容器化需求

2. 适用场景与使用边界

在龙芯 3B6000 上安装高版本 Docker,主要服务于特定的技术场景和用户群体。

适合谁?

  1. 龙芯平台开发者 :需要在本地进行容器化应用开发、测试和调试。
  2. 系统运维工程师 :负责维护基于龙芯服务器的生产或测试环境,需要部署和管理容器服务。
  3. 国产化项目团队 :项目技术栈要求使用国产芯片,并且应用架构基于容器技术。
  4. 技术爱好者 :希望深入探索龙芯生态软件适配的细节和过程。

能解决什么问题?

  • 版本滞后 :解决龙芯官方源 Docker 版本老旧,无法使用新功能的问题。
  • 环境一致性 :通过容器确保应用在龙芯开发机与服务器环境的一致性。
  • 依赖隔离 :简化复杂应用的依赖管理,避免污染主机系统。
  • 现代化部署 :为在龙芯平台上实践 Kubernetes、微服务等现代架构奠定基础。

不适合什么场景?

  • 对 Docker 版本无要求 :如果系统自带的 Docker 20.10 等旧版本已满足所有需求,则无需折腾。
  • 生产环境直接使用 :本文演示的编译安装方式,更适合测试和开发环境。生产环境部署前需进行更充分的稳定性测试。
  • 完全离线且无编译能力的环境 :此过程需要从网络下载源码进行编译,纯离线环境需提前准备好所有源码包。

安全与合规边界

  • Docker 本身需要特权操作,务必在可信的环境中使用。
  • 从网络下载源码包时,请尽量使用官方仓库或可信源,验证文件完整性。
  • 在龙芯平台上运行容器,同样需遵循镜像安全最佳实践,仅使用来自可信仓库的基础镜像。

3. 环境准备与前置条件

开始安装前,请确保你的龙芯 3B6000 系统满足以下条件。

操作系统

  • 通常为基于 LoongArch 架构的 Linux 发行版,如 Loongnix(Fedora 衍生版)、UOS、麒麟等。本文以类 Fedora 系统为例,包管理工具为 dnf (或 yum )。

系统更新 首先更新系统,确保所有已安装的软件包为最新版本,并安装必要的开发工具。

sudo dnf update -y
sudo dnf groupinstall “Development Tools” -y
sudo dnf install wget git cmake golang libseccomp-devel -y

依赖检查 高版本 Docker 依赖较新版本的 containerd runc ,系统自带版本往往过低,我们需要手动编译安装。请先检查现有版本:

# 检查是否已有旧版 Docker,如有可先卸载(谨慎操作)
sudo dnf remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 检查 containerd 和 runc
containerd --version
runc --version

网络与存储

  • 网络 :需要能够访问 GitHub、官方源码仓库等,以下载源码包。
  • 磁盘空间 :确保有足够的空间(建议至少 2GB 剩余)用于下载源码、编译和安装。

4. 安装部署与启动方式

由于 Docker 29.5.1 的 RPM 包可能不直接提供 LoongArch 架构版本,我们的核心思路是: 先手动解决关键依赖,再安装适配好的 Docker RPM 包 。关键在于 containerd.io 这个包。

4.1 编译安装高版本 runc

runc 是容器运行时的基础。我们需要从源码编译一个较新的版本。

  1. 安装 Go 语言环境 :确保已安装 Go(上一步已安装)。检查版本:

    go version
    

    建议使用 Go 1.20+。

  2. 下载 runc 源码

    git clone https://github.com/opencontainers/runc.git
    cd runc
    # 切换到稳定版本标签,例如 v1.1.12
    git checkout v1.1.12
    
  3. 编译 runc

    make
    

    编译成功后,会在当前目录生成 runc 二进制文件。

  4. 安装 runc

    sudo cp runc /usr/local/bin/
    sudo chmod +x /usr/local/bin/runc
    runc --version
    

    确认输出版本为 1.1.12

4.2 编译安装高版本 containerd

containerd 是 Docker 的核心依赖。

  1. 下载 containerd 源码

    git clone https://github.com/containerd/containerd.git
    cd containerd
    # 切换到与 Docker 29.5.1 兼容的版本,例如 v1.7.16
    git checkout v1.7.16
    
  2. 编译 containerd

    make
    

    这个过程可能需要一些时间。

  3. 安装 containerd

    sudo make install
    

    这会将 containerd ctr 等二进制文件安装到 /usr/local/bin/

  4. 验证安装

    containerd --version
    

    应显示 containerd github.com/containerd/containerd v1.7.16 ...

4.3 获取并安装 Docker 29.5.1 RPM 包

现在来处理 Docker 本体。我们需要找到或构建一个 LoongArch 架构的 Docker RPM 包。一种可行的方法是从其他已适配的龙芯发行版仓库中查找。

  1. 寻找 RPM 包 : 可以尝试在龙芯社区或相关发行版的镜像站搜索。例如,有时可以在 https://mirrors.loongnix.cn 或相关企业的软件仓库中找到较新的 Docker 包。假设我们找到了名为 docker-ce-29.5.1-1.lns.loongarch64.rpm 的包。

  2. 下载 RPM 包

    wget https://<镜像站地址>/path/to/docker-ce-29.5.1-1.lns.loongarch64.rpm
    
  3. 安装 Docker RPM : 由于我们已经手动安装了 containerd runc ,安装 RPM 时应跳过这些依赖,否则包管理器会因找不到对应版本的 RPM 包而报错。

    sudo rpm -ivh --nodeps docker-ce-29.5.1-1.lns.loongarch64.rpm
    

    --nodeps 参数表示忽略依赖检查。 使用此参数需要你非常确定依赖已手动满足。

4.4 配置与启动 Docker 服务

  1. 启动 containerd 服务 : Docker 依赖于 containerd。

    sudo systemctl daemon-reload
    sudo systemctl enable --now containerd
    sudo systemctl status containerd
    
  2. 启动 Docker 服务

    sudo systemctl enable --now docker
    sudo systemctl status docker
    

    如果状态显示为 active (running) ,则 Docker 服务已成功启动。

  3. 验证 Docker 安装

    sudo docker version
    

    查看输出,确认 Client Server 的版本都是 29.5.1 。同时,运行一个简单的测试容器:

    sudo docker run hello-world
    

    如果能看到 “Hello from Docker!” 等欢迎信息,说明 Docker 引擎工作正常。

5. 功能测试与效果验证

安装成功只是第一步,我们需要验证 Docker 的核心功能是否完整可用。

5.1 基础容器操作测试

测试拉取镜像、运行容器、查看容器状态等基本操作。

# 1. 拉取一个轻量级镜像 (例如 Alpine Linux)
sudo docker pull alpine:latest

# 2. 运行一个交互式容器
sudo docker run -it --rm alpine:latest /bin/sh
# 在容器内执行命令,例如 `ls /`,然后输入 `exit` 退出

# 3. 以后台方式运行容器
sudo docker run -d --name my-nginx -p 8080:80 nginx:alpine

# 4. 检查容器运行状态和日志
sudo docker ps
sudo docker logs my-nginx

# 5. 访问服务 (在另一终端或使用curl)
curl http://localhost:8080

# 6. 停止并删除测试容器
sudo docker stop my-nginx
sudo docker rm my-nginx

5.2 网络与存储功能测试

验证 Docker 网络和卷挂载功能。

# 1. 创建自定义网络
sudo docker network create my-net

# 2. 运行两个容器加入同一网络,并测试互通
sudo docker run -d --name container1 --network my-net alpine:latest tail -f /dev/null
sudo docker run -it --rm --name container2 --network my-net alpine:latest ping -c 4 container1

# 3. 测试卷挂载
mkdir ~/docker-test
echo “Hello from Host” > ~/docker-test/test.txt
sudo docker run -it --rm -v ~/docker-test:/data alpine:latest cat /data/test.txt
# 应输出 “Hello from Host”

# 4. 清理
sudo docker stop container1
sudo docker rm container1
sudo docker network rm my-net

5.3 构建镜像测试 (Dockerfile)

测试 Docker 的镜像构建能力,这是核心开发功能。

  1. 创建简单的 Dockerfile

    cat > ~/Dockerfile << EOF
    FROM alpine:latest
    RUN apk add --no-cache curl
    CMD [“curl”, “--version”]
    EOF
    
  2. 构建镜像

    cd ~
    sudo docker build -t my-curl-test .
    
  3. 运行构建的镜像

    sudo docker run --rm my-curl-test
    

    如果成功输出 curl 的版本信息,说明 Docker 的构建功能完全正常。

6. 资源占用与性能观察

在龙芯平台上运行 Docker,关注其资源使用情况至关重要。

观察服务启动资源占用

# 查看 Docker 相关进程
ps aux | grep -E “(dockerd|containerd)”

# 使用 top 或 htop 观察内存和 CPU 占用
top -p $(pgrep -d’,’ dockerd containerd)

启动后, dockerd containerd 进程会常驻,占用一定的内存(通常几十到上百 MB)。

观察容器运行时资源占用 运行一个容器后,可以使用 docker stats 命令实时查看资源使用情况。

sudo docker run -d --name stress-test --memory=200m alpine:latest sh -c “while true; do echo ‘test’; sleep 1; done”
sudo docker stats stress-test

此命令会动态显示容器的 CPU、内存、网络 I/O、块 I/O 使用率。按 Ctrl+C 退出。

性能考量

  • CPU :龙芯 3B6000 为多核处理器,Docker 能很好地利用多核进行容器调度和任务处理。
  • 内存 :容器本身内存开销小,但运行业务应用时,需根据应用需求分配足够内存。
  • I/O :容器内文件操作(尤其是使用 overlay2 存储驱动时)的 I/O 性能与宿主机直接操作有细微差别,对于 I/O 密集型应用需注意。
  • 网络 :Docker 的桥接网络会引入少量性能开销,但对大多数应用影响不大。如需高性能网络,可考虑使用 host 网络模式。

7. 常见问题与排查方法

在龙芯架构上安装高版本 Docker,可能会遇到一些特殊问题。

问题现象 可能原因 排查方式 解决方案
rpm -ivh 安装时依赖报错 缺少 containerd.io 等特定版本 RPM 包 rpm -qpR docker-ce-*.rpm 查看具体依赖 使用 --nodeps 强制安装,并确保已手动编译安装对应软件。
docker version 显示 Server 版本为旧版或报错 Docker 服务未成功启动,或与手动安装的 containerd 版本不兼容 sudo systemctl status docker 查看服务状态和日志 sudo journalctl -u docker -f 检查 containerd 服务是否运行。确认手动安装的 containerd、runc 版本与 Docker 29.5.1 兼容。
docker run hello-world 失败,提示 exec format error 拉取的 hello-world 镜像架构不正确(可能是 amd64) `docker image inspect hello-world grep Architecture`
docker pull 速度慢或失败 默认镜像仓库 docker.io 网络连接问题 ping registry-1.docker.io 配置国内镜像加速器。编辑 /etc/docker/daemon.json (不存在则创建)。
启动容器提示 cgroup 相关错误 系统未启用或未正确配置 cgroup v2 `cat /proc/filesystems grep cgroup mount
端口绑定失败 端口已被其他进程占用 `sudo ss -tulnp grep :<端口号>`
存储驱动问题 Docker 使用的存储驱动(如 overlay2 )不支持当前文件系统 `docker info grep Storage`

配置镜像加速器示例 ( /etc/docker/daemon.json )

{
  “registry-mirrors”: [
    “https://docker.mirrors.ustc.edu.cn“,
    “https://hub-mirror.c.163.com“
  ]
}

修改后需重启 Docker 服务: sudo systemctl restart docker

8. 最佳实践与使用建议

为了让 Docker 在龙芯 3B6000 上更稳定、高效地运行,遵循以下建议:

  1. 系统层面优化

    • 内核参数 :根据实际容器运行需求,可能需要调整内核参数,如 net.ipv4.ip_forward , vm.max_map_count 等。可通过 sysctl.conf 持久化修改。
    • 存储路径 :默认 Docker 数据目录 ( /var/lib/docker ) 如果位于根分区,可能导致磁盘空间不足。可以考虑通过 daemon.json 中的 “data-root” 选项将其迁移到大容量分区。
  2. Docker 守护进程配置

    • 建议创建 /etc/docker/daemon.json 文件进行集中配置,如设置镜像加速器、日志驱动、存储驱动、默认运行时等。
    • 对于开发环境,可以设置 “log-level”: “debug” 以便排查问题,生产环境建议设为 “info” “warn”
  3. 镜像使用策略

    • 架构标签 :龙芯平台是 loong64 架构。拉取镜像时,尽量使用明确支持 linux/loong64 的镜像。如果镜像支持多架构,Docker 会自动选择匹配的版本。
    • 镜像源 :优先使用提供 loong64 镜像的国内仓库,如一些高校和云厂商的镜像站。
    • 镜像构建 :在龙芯平台上构建的镜像天然是 loong64 架构。如果需要为其他架构构建,需要使用 buildx 等跨平台构建工具。
  4. 开发与运维习惯

    • 非 root 用户运行 :将需要使用 Docker 的用户加入 docker 用户组 ( sudo usermod -aG docker $USER ),之后可以不用 sudo 执行 docker 命令。 注意这会带来安全风险,仅限可信用户。
    • 资源限制 :在 docker run 时使用 --memory , --cpus 等参数为容器设置资源上限,避免单个容器耗尽主机资源。
    • 数据持久化 :对于需要保存的数据,务必使用 -v 参数挂载宿主机目录或使用 Docker Volume,避免数据丢失。
  5. 安全提醒

    • 定期更新通过此方式安装的 Docker、containerd、runc 等组件,修复安全漏洞。
    • 避免在容器内以 root 身份运行不必要的服务。
    • 谨慎使用 --privileged 标志运行容器。

在龙芯 3B6000 上成功部署 Docker 29.5.1,标志着你能在这个国产平台上使用更现代的容器技术栈。整个过程的关键在于解决核心依赖的编译和兼容性问题。虽然步骤比在 x86 架构上直接 yum install 繁琐,但一旦打通,后续的使用体验与主流平台基本无异。建议将编译好的关键二进制文件(如特定版本的 runc containerd )和 Docker RPM 包进行归档备份,便于在同类环境中快速部署。接下来,你可以尝试部署 Docker Compose 来管理多容器应用,或者探索在龙芯平台上运行 Kubernetes 节点,进一步深入国产化容器生态。

更多推荐