在 Ubuntu20.04 下构建 Arm 架构的 Docker 镜像

in cn •  4 years ago 

之前在 《完成了新的 Cloudflare DDNS 镜像包》这篇中实现了 Cloudflare 的 DDNS。

不过当时构建的是 x86 架构的镜像包,最近想要把这个功能迁移到我的树莓派上运行,因此需要重新基于 Arm 架构进行构建。

首先需要确认当前的机器环境是否满足使用 docker buildx 这个多架构的构建程序。

  • Docker >= 19.03
  • Linux kernel >= 4.8
  • binfmt_misc file system mounted
  • QEMU installed
  • binfmt-support package >= 2.1.7
  • Docker image based installation

目前我的系统上的 Docker 是 20.10.5 ,似乎不需要再设置实验模式了,直接执行 docker builx 是有回显内容的。

由于其他架构的编译需要在 QEMU 模拟器里进行,所以我还需要安装一下 QEMU。

sudo apt-get install -y qemu-user-static

接下来进到 Dockerfile 文件所在目录下尝试编译:

$ docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t ety001/cf-ddns:latest --push .

[+] Building 461.6s (35/35) FINISHED                                                     
 => [internal] booting buildkit                                                    20.4s
 => => pulling image moby/buildkit:buildx-stable-1                                 16.7s
 => => creating container buildx_buildkit_practical_dhawan0                         3.7s
 => [internal] load build definition from Dockerfile                                0.1s
 => => transferring dockerfile: 364B                                                0.0s
 => [internal] load .dockerignore                                                   0.1s
 => => transferring context: 2B                                                     0.0s
 => [linux/arm/v7 internal] load metadata for docker.io/library/alpine:latest       4.4s
 => [linux/arm64 internal] load metadata for docker.io/library/alpine:latest        4.1s
 => [linux/amd64 internal] load metadata for docker.io/library/alpine:latest        4.2s
 => [auth] library/alpine:pull token for registry-1.docker.io                       0.0s
 => [auth] library/alpine:pull token for registry-1.docker.io                       0.0s
 => [auth] library/alpine:pull token for registry-1.docker.io                       0.0s
 => [internal] load build context                                                   0.1s
 => => transferring context: 550B                                                   0.1s
 => [linux/arm64 builder 1/4] FROM docker.io/library/alpine:latest@sha256:adab3844  1.9s
 => => resolve docker.io/library/alpine:latest@sha256:adab3844f497ab9171f070d4cae4  0.1s
 => => sha256:58ab47519297212468320b23b8100fc1b2b96e8d342040806ae5 2.71MB / 2.71MB  0.6s
 => => extracting sha256:58ab47519297212468320b23b8100fc1b2b96e8d342040806ae509a77  1.3s
 => [linux/arm/v7 builder 1/4] FROM docker.io/library/alpine:latest@sha256:adab384  1.7s
 => => resolve docker.io/library/alpine:latest@sha256:adab3844f497ab9171f070d4cae4  0.2s
 => => sha256:136482bf81d1fa351b424ebb8c7e34d15f2c5ed3fc0b66b544b8 2.43MB / 2.43MB  0.5s
 => => extracting sha256:136482bf81d1fa351b424ebb8c7e34d15f2c5ed3fc0b66b544b8312bd  1.1s
 => [linux/amd64 builder 1/4] FROM docker.io/library/alpine:latest@sha256:adab3844  1.6s
 => => resolve docker.io/library/alpine:latest@sha256:adab3844f497ab9171f070d4cae4  0.1s
 => => sha256:5843afab387455b37944e709ee8c78d7520df80f8d01cf7f861a 2.81MB / 2.81MB  0.2s
 => => extracting sha256:5843afab387455b37944e709ee8c78d7520df80f8d01cf7f861aae63b  1.4s
 => [linux/amd64 stage-1 2/4] RUN apk --no-cache add curl                          11.1s
 => [linux/amd64 builder 2/4] WORKDIR /tmp                                          1.0s
 => [linux/arm/v7 stage-1 2/4] RUN apk --no-cache add curl                         33.7s
 => [linux/arm/v7 builder 2/4] WORKDIR /tmp                                         1.1s
 => [linux/arm64 stage-1 2/4] RUN apk --no-cache add curl                          35.3s
 => [linux/arm64 builder 2/4] WORKDIR /tmp                                          1.3s
 => [linux/amd64 builder 3/4] RUN apk --no-cache add go git                        76.5s
 => [linux/arm/v7 builder 3/4] RUN apk --no-cache add go git                      151.9s
 => [linux/arm64 builder 3/4] RUN apk --no-cache add go git                       154.4s
 => [linux/amd64 builder 4/4] RUN git clone https://github.com/nickw444/cf-ddns.g  39.5s
 => [linux/amd64 stage-1 3/4] COPY --from=builder /tmp/cf-ddns/cf-ddns /usr/bin/    0.5s
 => [linux/amd64 stage-1 4/4] ADD run.sh /usr/bin/run.sh                            0.4s
 => [linux/arm/v7 builder 4/4] RUN git clone https://github.com/nickw444/cf-ddns  263.7s
 => [linux/arm64 builder 4/4] RUN git clone https://github.com/nickw444/cf-ddns.  262.0s
 => [linux/arm/v7 stage-1 3/4] COPY --from=builder /tmp/cf-ddns/cf-ddns /usr/bin/   0.3s
 => [linux/arm/v7 stage-1 4/4] ADD run.sh /usr/bin/run.sh                           0.1s
 => [linux/arm64 stage-1 3/4] COPY --from=builder /tmp/cf-ddns/cf-ddns /usr/bin/    0.2s
 => [linux/arm64 stage-1 4/4] ADD run.sh /usr/bin/run.sh                            0.0s
 => exporting to image                                                             14.3s
 => => exporting layers                                                             8.0s
 => => exporting manifest sha256:967a24b9794cfa06e14d1ef3b8a862cddc0edc12ae8419c98  0.0s
 => => exporting config sha256:60c85a811f0d525f57cc63b338e76db5a41e110f889eb95c531  0.0s
 => => exporting manifest sha256:cda5813c95a5a85bae2dcaf757819fd0bfc0bf06ff3f27054  0.0s
 => => exporting config sha256:9395cc4c00930b2f8ca426c0a865b3f652895b594b74e7722ba  0.1s
 => => exporting manifest sha256:72680ea1587d6ddb850722310236b6c10938135c92ccb7e41  0.0s
 => => exporting config sha256:e3a2ff62ba3527ff6aa6308a9f9b87268f60187eb01eb0c3eb9  0.0s
 => => exporting manifest list sha256:e1293408ccfd4ff2966e9d7066bf6a0f18dbc621c48b  0.1s
 => => pushing layers                                                               4.2s
 => => pushing manifest for docker.io/ety001/cf-ddns:latest@sha256:e1293408ccfd4ff  1.8s
 => [auth] ety001/cf-ddns:pull,push token for registry-1.docker.io                  0.0s
 => [auth] ety001/cf-ddns:pull,push token for registry-1.docker.io                  0.0s
 => [auth] ety001/cf-ddns:pull,push token for registry-1.docker.io                  0.0s

完美编译并上传到了 Docker Hub。

去树莓派上运行了下,成功!


ET碎碎念,每周更新,欢迎订阅,点赞,转发!


好用不贵的VPS推荐

https://1hour.win


感谢你的阅读,我是中文区见证人之一,欢迎通过 AuthSteem 来给我投票,或者打开 https://steemitwallet.com/~witnesses 页面,输入 ety001 进行投票。

2.gif

中文区的见证人目前有:
支持一下他们(按字母顺序),一人可以有30票


Thank you for reading. I'm a witness. I would really appreciate your witness vote! You can vote by SteemLogin. Or open https://steemitwallet.com/~witnesses page, input ety001 to vote.

2.gif

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!