利用雨云服务器编译 ARMv7 Docker 镜像
平常我需要在一些老设备(比如树莓派 3B、全志 H3/H5、RK3288)上运行 Docker 服务,但官方镜像越来越多只提供 amd64 和 arm64,没有 armv7。于是我决定自己编译一套 ARMv7 镜像。结果发现:用雨云的 1 元/天高性能服务器,加上 QEMU 模拟器,就能轻松搞定。
环境介绍
- 服务器提供商:雨云
- 机型:美国 洛杉矶 KVM 旗舰版(x86_64 架构)
- 价格:1 元/天(非常适合短期编译任务)
- 系统:Ubuntu 22.04 LTS
- 编译方式:使用
qemu-user-static+buildx模拟 ARMv7 环境
编译环境准备
apt update
apt install -y docker.io qemu-user-static git build-essential
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker buildx create --use
确认多架构支持:
docker buildx ls
输出中能看到:
Platforms: linux/amd64, linux/arm/v7, linux/arm64
说明编译环境配置成功。
🏗️ 编译目标
这次编译了四个主要软件的 ARMv7 镜像,并推送到了自己的仓库:
| 软件 | 镜像名 | 版本 | 架构 |
|---|---|---|---|
| Gitea | docker.wqyblog.cn/gitea/gitea:1.24.6 | 1.24.6 | ARMv7 |
| Gitea Rootless | docker.wqyblog.cn/gitea/gitea-rootless:1.24.6 | 1.24.6 | ARMv7 |
| MinIO | docker.wqyblog.cn/minio/minio:RELEASE.2024-10-02T17-50-41Z | 2024.10.02 | ARMv7 |
| OpenList | docker.wqyblog.cn/openlist/openlist:4.1.3 | 4.1.3 | ARMv7 |
⚙️ 编译示例:Gitea 1.24.6
git clone https://github.com/go-gitea/gitea.git
cd gitea
git checkout v1.24.6
docker buildx build \
--platform linux/arm/v7 \
-t docker.wqyblog.cn/gitea/gitea:1.24.6 \
--push .
整个编译过程大约 12 分钟(QEMU 模拟比原生慢,但能接受)。雨云提供的 CPU 性能够用,没有出现超时或内存爆炸。
🧾 编译结果验证
编译完成后在树莓派上验证:
docker pull docker.wqyblog.cn/gitea/gitea:1.24.6
docker run -d -p 3000:3000 docker.wqyblog.cn/gitea/gitea:1.24.6
正常启动,无 “exec format error”,网页能正常访问。MinIO、OpenList 同样测试通过。
🪄 编译经验与坑
- QEMU 性能不错,但 I/O 是瓶颈。
解决办法:雨云的高性能机型带 NVMe,编译时快很多。 - Go 项目最好手动设定 GOARCH / GOARM:
export GOARCH=arm
export GOARM=7
- 雨云 1 元方案非常划算:
临时起机器,编完就删,成本比买开发板还低。
🌐 仓库地址
https://docker.wqyblog.cn/
镜像可直接拉取,无需登录、无需加速器。