@
aleung 它那篇文章里介绍的方法其实就是在 arm 镜像中加入 qemu 来实现在 x86 平台进行编译
我试过的在 x86 上编译树莓派镜像有两种方法,都是要用 qemu
一种就是它这样在 Dockerfile 的编译部分前后加入 RUN [ "cross-build-start"]和 RUN [ "cross-build-end"],这种需要提前把 qemu 和它示例项目里的脚本加入镜像,这样可以在任何 x86 机器上进行 build,包括 dockerhub
另一种方法是通过在 x86 机器上运行:
```
docker run --rm --privileged multiarch/qemu-user-static:register --reset
```
之后就可以在这台机器上 build 或者是 run 任何 arm 镜像了,并且不需要修改原来的 Dockerfile
这两种方法都是可以在 x86 机器上 build arm image 的,不过 qemu 速度相当慢,大概只有运行 x86 镜像速度的 1/10,dockerhub 的自动 build 是有资源限制的,1cpu, 2g ram, 30g 硬盘,2 小时,大一点的项目用 qemu build 很容易就超时了,所以像 php 这种镜像还是要在树莓派上编译的,另外任何用到 gosu 的镜像是没办法用 qemu 的,会直接报错,这个问题存在很久了
除了用 dockerhub 其实也可以用 ci/cd 来 build,像 arm32v7 的镜像记得看日志是用 Jenkins 连了一个 pi 当 slave,另外 drone ci 现在也可以选择 arm 设备当 agent
我在 dockerhub 上建的这个 repo:
https://hub.docker.com/r/pipill/ ,多数镜像就是用的第一种方法在 dockerhub 上自动 build 的,也就是你提到的博客里的方法