参考:Build multi-platform images

安装

docker run --privileged --rm tonistiigi/binfmt --install all

创建builder

docker buildx create --use --name mybuild default

构建镜像

使用go语言为例子,参考这位大佬博客

cat > hello.go <<EOF
package main

import (
        "fmt"
        "runtime"
)

func main() {
        fmt.Printf("Hello, %s!\n", runtime.GOARCH)
}
EOF

Dockerfile

cat > Dockerfile <<EOF
FROM golang:alpine AS builder
ENV GO111MODULE auto
RUN mkdir /app
ADD . /app/
WORKDIR /app
RUN go build -o hello .

FROM alpine
RUN mkdir /app
WORKDIR /app
COPY --from=builder /app/hello .
CMD ["./hello"]
EOF

开始构建镜像

# 本地打包
docker buildx build -t test --platform=linux/arm64 . --load
# 在远程主机打包,需要修改docker.service文件
docker -H tcp://192.168.10.75:2375 buildx build -t test --platform=linux/arm64 . --load

推送http私库问题

正常情况下,推送Dockerhub:

docker buildx build -t oneslide/test --platform=linux/arm64 . --push

但是推送http私库推送不了,目前无人解决,参考issue 218

但是,我找到一种解决办法:

docker buildx的原理是创建一个buildkit容器, 只需要通过传入私库--config配置

  • create_build.sh
docker buildx create --use \
  --name mybuilder \
  --driver docker-container \
  --config buildkitd.toml  --use default

  • buildkitd.toml
debug = true
# root is where all buildkit state is stored.


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618542503)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐