Docker 构建多平台镜像
Summary: Author: 张亚飞 | Read Time: 1 minute read | Published: 2023-02-02
Filed under
—
Categories:
MarkDown
—
Tags:
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
使用 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