V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
yangxuan8282
V2EX  ›  Linux

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

  •  
  •   yangxuan8282 · 2017-06-05 21:23:08 +08:00 · 3717 次点击
    这是一个创建于 2763 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 上会不会对性能和使用有影响

    5 条回复    2017-08-18 09:28:20 +08:00
    aleung
        1
    aleung  
       2017-08-17 00:01:55 +08:00
    Resin 的 base image 有没有试过?看介绍似乎挺不错的 https://docs.resin.io/runtime/resin-base-images
    yangxuan8282
        2
    yangxuan8282  
    OP
       2017-08-17 00:12:13 +08:00 via iPhone
    @aleung 试过 resin 的,不过后来基本是用的 arm32v6 的 Alpine 和 arm32v7 的镜像,因为基本和 library 里的镜像是一致的,resin 的镜像有点太多了,docker hub 的搜索又不太好用,加上 arm32v7 的基本够用就没用 resin 的镜像了
    另外它的系统 resin os 倒是挺特别的,基本是为物联网准备的,可以完全在云端操作,git push 之后自动 build,有点 ci/cd 的意思,不过好像只能部署一个容器,也可能是我用的姿势不对
    aleung
        3
    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
        4
    yangxuan8282  
    OP
       2017-08-17 11:07:38 +08:00 via iPhone
    @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
        5
    aleung  
       2017-08-18 09:28:20 +08:00 via Android
    @yangxuan8282 很有用的信息,谢谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2640 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:06 · PVG 23:06 · LAX 07:06 · JFK 10:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.