树莓派的 docker base image 该如何选择

2017-06-05 21:23:08 +08:00
 yangxuan8282

arm 架构的 image 比较少,不少都得自己 build

之前先是用 hypriot 的 base image,后来用官方的 armhf ,今天看 docker hub armhf 的 repo 已经不维护了,取而代之的是对架构分类更细的 arm32v5,arm32v6,arm32v7,arm64v8 这几个 repo,虽说 pi3 是 64 位的 cpu,但目前没找到功能完善的 64 位系统,v5 也不适合,arm32v6 和 arm32v7 这两个里选的话好像 arm32v6 适用性更广,包括 pi 1 或 zero 也能运行,不知道选 arm32v6 的镜像当 base image 的话在 pi3 上会不会对性能和使用有影响

3693 次点击
所在节点    Linux
5 条回复
aleung
2017-08-17 00:01:55 +08:00
Resin 的 base image 有没有试过?看介绍似乎挺不错的 https://docs.resin.io/runtime/resin-base-images
yangxuan8282
2017-08-17 00:12:13 +08:00
@aleung 试过 resin 的,不过后来基本是用的 arm32v6 的 Alpine 和 arm32v7 的镜像,因为基本和 library 里的镜像是一致的,resin 的镜像有点太多了,docker hub 的搜索又不太好用,加上 arm32v7 的基本够用就没用 resin 的镜像了
另外它的系统 resin os 倒是挺特别的,基本是为物联网准备的,可以完全在云端操作,git push 之后自动 build,有点 ci/cd 的意思,不过好像只能部署一个容器,也可能是我用的姿势不对
aleung
2017-08-17 09:05:44 +08:00
如果用 arm32v6/7 作为 base image,是不是必须要在树莓派上 build image ?

我看中 resin 的 cross build 比较方便,在 github 上放了 dockerfile,docker hub 上创建一个 auto build,image 就在云上 build 好了。

像它的 [blog]( https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/) 中的例子:

```
FROM resin/armv7hf-debian

RUN [ "cross-build-start" ]

RUN apt-get update
RUN apt-get install python
RUN pip install virtualenv

RUN [ "cross-build-end" ]
```
yangxuan8282
2017-08-17 11:07:38 +08:00
@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 的,也就是你提到的博客里的方法
aleung
2017-08-18 09:28:20 +08:00
@yangxuan8282 很有用的信息,谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/366162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX