之前在 《完成了新的 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推荐
感谢你的阅读,我是中文区见证人之一,欢迎通过 AuthSteem 来给我投票,或者打开 https://steemitwallet.com/~witnesses 页面,输入 ety001 进行投票。
中文区的见证人目前有:
支持一下他们(按字母顺序),一人可以有30票:
- @cn-witnesses| 投票
- @ety001| 投票
- @familyonline-tv| 投票
- @fuli| 投票
- @justyy |投票
- @ldsn001| 投票
- @lemooljiang| 投票
- @maiyude | 投票
- @smt-wherein| 投票
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.