龙芯3B6000平台Docker 29.5.1安装部署与兼容性实战指南
这次我们来看一个在龙芯 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,主要服务于特定的技术场景和用户群体。
适合谁?
- 龙芯平台开发者 :需要在本地进行容器化应用开发、测试和调试。
- 系统运维工程师 :负责维护基于龙芯服务器的生产或测试环境,需要部署和管理容器服务。
- 国产化项目团队 :项目技术栈要求使用国产芯片,并且应用架构基于容器技术。
- 技术爱好者 :希望深入探索龙芯生态软件适配的细节和过程。
能解决什么问题?
- 版本滞后 :解决龙芯官方源 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 是容器运行时的基础。我们需要从源码编译一个较新的版本。
-
安装 Go 语言环境 :确保已安装 Go(上一步已安装)。检查版本:
go version建议使用 Go 1.20+。
-
下载 runc 源码 :
git clone https://github.com/opencontainers/runc.git cd runc # 切换到稳定版本标签,例如 v1.1.12 git checkout v1.1.12 -
编译 runc :
make编译成功后,会在当前目录生成
runc二进制文件。 -
安装 runc :
sudo cp runc /usr/local/bin/ sudo chmod +x /usr/local/bin/runc runc --version确认输出版本为
1.1.12。
4.2 编译安装高版本 containerd
containerd 是 Docker 的核心依赖。
-
下载 containerd 源码 :
git clone https://github.com/containerd/containerd.git cd containerd # 切换到与 Docker 29.5.1 兼容的版本,例如 v1.7.16 git checkout v1.7.16 -
编译 containerd :
make这个过程可能需要一些时间。
-
安装 containerd :
sudo make install这会将
containerd、ctr等二进制文件安装到/usr/local/bin/。 -
验证安装 :
containerd --version应显示
containerd github.com/containerd/containerd v1.7.16 ...。
4.3 获取并安装 Docker 29.5.1 RPM 包
现在来处理 Docker 本体。我们需要找到或构建一个 LoongArch 架构的 Docker RPM 包。一种可行的方法是从其他已适配的龙芯发行版仓库中查找。
-
寻找 RPM 包 : 可以尝试在龙芯社区或相关发行版的镜像站搜索。例如,有时可以在
https://mirrors.loongnix.cn或相关企业的软件仓库中找到较新的 Docker 包。假设我们找到了名为docker-ce-29.5.1-1.lns.loongarch64.rpm的包。 -
下载 RPM 包 :
wget https://<镜像站地址>/path/to/docker-ce-29.5.1-1.lns.loongarch64.rpm -
安装 Docker RPM : 由于我们已经手动安装了
containerd和runc,安装 RPM 时应跳过这些依赖,否则包管理器会因找不到对应版本的 RPM 包而报错。sudo rpm -ivh --nodeps docker-ce-29.5.1-1.lns.loongarch64.rpm--nodeps参数表示忽略依赖检查。 使用此参数需要你非常确定依赖已手动满足。
4.4 配置与启动 Docker 服务
-
启动 containerd 服务 : Docker 依赖于 containerd。
sudo systemctl daemon-reload sudo systemctl enable --now containerd sudo systemctl status containerd -
启动 Docker 服务 :
sudo systemctl enable --now docker sudo systemctl status docker如果状态显示为
active (running),则 Docker 服务已成功启动。 -
验证 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 的镜像构建能力,这是核心开发功能。
-
创建简单的 Dockerfile :
cat > ~/Dockerfile << EOF FROM alpine:latest RUN apk add --no-cache curl CMD [“curl”, “--version”] EOF -
构建镜像 :
cd ~ sudo docker build -t my-curl-test . -
运行构建的镜像 :
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 上更稳定、高效地运行,遵循以下建议:
-
系统层面优化 :
- 内核参数 :根据实际容器运行需求,可能需要调整内核参数,如
net.ipv4.ip_forward,vm.max_map_count等。可通过sysctl.conf持久化修改。 - 存储路径 :默认 Docker 数据目录 (
/var/lib/docker) 如果位于根分区,可能导致磁盘空间不足。可以考虑通过daemon.json中的“data-root”选项将其迁移到大容量分区。
- 内核参数 :根据实际容器运行需求,可能需要调整内核参数,如
-
Docker 守护进程配置 :
- 建议创建
/etc/docker/daemon.json文件进行集中配置,如设置镜像加速器、日志驱动、存储驱动、默认运行时等。 - 对于开发环境,可以设置
“log-level”: “debug”以便排查问题,生产环境建议设为“info”或“warn”。
- 建议创建
-
镜像使用策略 :
- 架构标签 :龙芯平台是
loong64架构。拉取镜像时,尽量使用明确支持linux/loong64的镜像。如果镜像支持多架构,Docker 会自动选择匹配的版本。 - 镜像源 :优先使用提供
loong64镜像的国内仓库,如一些高校和云厂商的镜像站。 - 镜像构建 :在龙芯平台上构建的镜像天然是
loong64架构。如果需要为其他架构构建,需要使用buildx等跨平台构建工具。
- 架构标签 :龙芯平台是
-
开发与运维习惯 :
- 非 root 用户运行 :将需要使用 Docker 的用户加入
docker用户组 (sudo usermod -aG docker $USER),之后可以不用sudo执行 docker 命令。 注意这会带来安全风险,仅限可信用户。 - 资源限制 :在
docker run时使用--memory,--cpus等参数为容器设置资源上限,避免单个容器耗尽主机资源。 - 数据持久化 :对于需要保存的数据,务必使用
-v参数挂载宿主机目录或使用 Docker Volume,避免数据丢失。
- 非 root 用户运行 :将需要使用 Docker 的用户加入
-
安全提醒 :
- 定期更新通过此方式安装的 Docker、containerd、runc 等组件,修复安全漏洞。
- 避免在容器内以 root 身份运行不必要的服务。
- 谨慎使用
--privileged标志运行容器。
在龙芯 3B6000 上成功部署 Docker 29.5.1,标志着你能在这个国产平台上使用更现代的容器技术栈。整个过程的关键在于解决核心依赖的编译和兼容性问题。虽然步骤比在 x86 架构上直接 yum install 繁琐,但一旦打通,后续的使用体验与主流平台基本无异。建议将编译好的关键二进制文件(如特定版本的 runc 、 containerd )和 Docker RPM 包进行归档备份,便于在同类环境中快速部署。接下来,你可以尝试部署 Docker Compose 来管理多容器应用,或者探索在龙芯平台上运行 Kubernetes 节点,进一步深入国产化容器生态。
更多推荐
所有评论(0)