Docker 构建多平台镜像

Summary: Author: 张亚飞 | Read Time: 1 minute read | Published: 2023-02-02
Filed under Categories: MarkDownTags: Tag,

Docker 多平台构建

新建 Dockerfile 文件。

FROM --platform=$TARGETPLATFORM alpine

RUN uname -a > /os.txt

CMD cat /os.txt

使用 $ docker buildx build 命令构建镜像,注意将 myusername 替换为自己的 Docker Hub 用户名。 –push 参数表示将构建好的镜像推送到 Docker 仓库。

$ docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t myusername/hello . --push

查看镜像信息

$ docker buildx imagetools inspect myusername/hello

docker buildx

使用 docker buildx 实现多平台编译

使用 ssh://user@host 远程构建

创建 remotebuilder

ARM64=ssh://root@192.168.100.101
AMD64=ssh://root@192.168.100.102

## 注意: 这里指定名称 remotebuilder
DOCKER_HOST=${AMD64} docker buildx create --name remotebuilder --node hk-amd64 --platform=amd64
### --append 表示追加, 而非重新创建
DOCKER_HOST=${ARM64} docker buildx create --append --name remotebuilder --node hk-arm64 --platform=arm64

## 使用 remotebuilder
docker buildx use remotebuilder

## 查看 remotebuilder 状态
docker buildx ls --builder remotebuilder

当我们在本地执行 docker buildx build … 任务的时候, 任务就会分发到对应 cpu 架构的主机上。

配置优化

在国内使用 docker buildx 有一个最大的问题,就是网络。 由于 driver 是有运行在容器中, 参考官方文档 buildx - github.com , 很多本机的配置因此而不能生效。 诸如 docker.io 这样国外官方镜像, 拉取速度就非常不理想了。

使用镜像加速优化 新建配置文件 buildkitd.toml

buildkitd.toml

[registry."docker.io"]
mirrors = ["wlzfs4t4.mirror.aliyuncs.com"]

并创建本地 builder

create builder with mirror

docker buildx create --use --name localbuilder --platform=linux/amd64,linux/arm64 --config=buildkitd.toml

新建 Dockerfile

构建镜像

docker buildx build --platform=linux/amd64,linux/arm64 .

如果不使用配置优化的话,构建镜像可能因为网络原因而构建失败


Comments

Cor-Ethan, the beverage → www.iirii.com