使用 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 bake
docker
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/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。