使用 docker buildx 实现多平台编译 - 环境篇
使用 docker buildx 实现多平台编译
docker registry api v2
支持多 CPU 架构镜像.
同时 harbor v2 也实现了 docker registry api v2 的支持.
0x01 准备
docker开启实验模式buildx插件qemu模拟器Linux kernel >= 4.8
linux 系统内核
由于 binfmt_misc 机制开启需要依赖 Linux kernel >= 4.8 。 因此,在对 linux 系统操作选型上有一定要求。
建议使用 发行版 出场内核已经满足需求的操作系统。 而不是选择自己升级系统内核。
ubuntu:18.04 LTS及以上debian:10及以上
参考文章:
开启实验模式
当前 buildx 还是一个实验模式, 如需要支持, 需要进行如下配置
- 开启实验模式。 修改
/etc/docker/daemon.json, 增加experimental字段, 如下。
| |
安装 buildx
- 将
buildx放到~/.docker/cli-plugins/目录下
| |
安装 qemu
下载并安装 qumu 到 /usr/bin/qemu-$(uname -m)-static
| |
0x02 example
创建 buildx builder
| |
创建 Dockerfile 和 bakefile
目录结构如下
| |
alpine-bake/alpine.Dockerfile
| |
docker-bake.hcl
| |
使用 bake 执行编译
| |
当命令中省略 -f 参数时, 默认 bake 文件为:
- docker-bake.json
- docker-bake.hcl
- docker-compose.yaml
执行结果
可以在 tangx/alpine:buildx-bake-hcl 看到,生成的镜像, 支持了 5个 cpu 架构。

- 执行过程
| |
使用命令行执行编译
| |
参数解释
docker buildx build: 主命令及子命令--platform=linux/amd64,linux/arm64: 执行 cpu 架构--file: 指定Dockerfile的文件及路径。 省略则表示当前目录下的Dockerfile--tag: 镜像名字及TAG--push: 完成并推送到仓库alpine-bake: docker context 的目录地址。
执行结果
略
相关文档
buildx- buildx README.md
in
Github.com - buildx Documents
in
docs.docker.com
- buildx README.md
in
buildx bakedocker
buildx hcl 支持的变量值
| |
在 github action 上使用 buildx
https://github.com/marketplace/actions/customizable-docker-buildx
troubleshoot
multiple platforms feature is currently not supported for docker driver
当前模式不支持 buildx : https://github.com/docker/cli/blob/master/experimental/README.md
| |
auto-push is currently not implemented for docker driver
缺少 builder
| |
failed to solve: rpc error: code = Unknown desc = failed to load LLB: runtime execution on platform linux/arm64 not supported
参考 qemu-user-static #getting-started 执行以下命令。 如果正常返回,则表示成功
| |
- 原文链接:https://typonotes.com/posts/2020/06/10/docker-buildx/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。


