使用 docker buildx 实现多平台编译
2020/11/7 8:15:39
本文主要是介绍使用 docker buildx 实现多平台编译,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
docker registry api v2
支持多 CPU 架构镜像.
同时 harbor v2
也实现了 docker registry api v2
的支持.
docker buildx
当前 buildx 还是一个实验模式, 如需要支持, 需要进行如下配置
experimental
开始尝鲜模式
# vi ~/docker/daemon.json { "experimental": true }
- 将
buildx
放到~/.docker/cli-plugins/
目录下
# https://github.com/docker/buildx/blob/master/README.md#docker-ce BUILDX_VERSION=v0.4.1 ARCH=$(uname -m) [ "${ARCH}" == "x86_64" ] && ARCH=amd64 [ "${ARCH}" == "aarch64" ] && ARCH=arm64 mkdir -p ~/.docker/cli-plugins wget -c https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-${ARCH} -O docker-buildx\ && chmod +x docker-buildx \ && mv docker-buildx ~/.docker/cli-plugins/
- 安装
quem
到/usr/bin/qemu-$(uname -m)-static
# https://github.com/multiarch/qemu-user-static#multiarchqemu-user-static-images QEMU_VERSION=v5.0.0-2 wget -c https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-$(uname -m)-static -O qemu-$(uname -m)-static \ && chmod +x qemu-$(uname -m)-static \ && mv qemu-$(uname -m)-static /usr/local/bin/qemu-$(uname -m)-static
compile
# tree # . # ├── alpine-bake # │ └── alpine.Dockerfile # └── bake.hcl # 1. create build docker buildx create --use # 2. compile ## build 命令行方式 ### 注意, 命令行最后也有一个代表 context 的 . (逗点) docker buildx build --platform=linux/amd64,linux/arm64 . ## bake 文件方式 docker buildx bake # default hcl file: docker-bake.json, docker-bake.hcl , docker-compose.yaml docker buildx bake -f bake.hcl # -f alias to bake docker buildx bake -f docker-compose.yml
docker-bake.hcl
group "default" { targets = ["alpine"] } target "alpine" { context = "./alpine-bake" dockerfile = "alpine.Dockerfile" tags = ["docker.io/tangx/alpine:buildx-bake-hcl"] platforms = ["linux/amd64", "linux/arm64", "linux/arm/v6", "linux/arm/v7", "linux/s390x"] ## push to registry output = ["type=registry"] ## pull base image always pull = true } target "debian" { context = "./debian-bake" ## default: Dockerfile # dockerfile = "Dockerfile" tags = ["docker.io/tangx/debian:buildx-bake-hcl"] platforms = ["linux/amd64", "linux/arm64", "linux/arm/v6", "linux/arm/v7", "linux/s390x"] ## push to registry output = ["type=registry"] ## pull base image always pull = true }
buildx hcl 支持的变量值
type Target struct { Name string `json:"-" hcl:"name,label"` // Inherits is the only field that cannot be overridden with --set Inherits []string `json:"inherits,omitempty" hcl:"inherits,optional"` Context *string `json:"context,omitempty" hcl:"context,optional"` Dockerfile *string `json:"dockerfile,omitempty" hcl:"dockerfile,optional"` Args map[string]string `json:"args,omitempty" hcl:"args,optional"` Labels map[string]string `json:"labels,omitempty" hcl:"labels,optional"` Tags []string `json:"tags,omitempty" hcl:"tags,optional"` CacheFrom []string `json:"cache-from,omitempty" hcl:"cache-from,optional"` CacheTo []string `json:"cache-to,omitempty" hcl:"cache-to,optional"` Target *string `json:"target,omitempty" hcl:"target,optional"` Secrets []string `json:"secret,omitempty" hcl:"secret,optional"` SSH []string `json:"ssh,omitempty" hcl:"ssh,optional"` Platforms []string `json:"platforms,omitempty" hcl:"platforms,optional"` Outputs []string `json:"output,omitempty" hcl:"output,optional"` Pull *bool `json:"pull,omitempty" hcl:"pull,optional"` NoCache *bool `json:"no-cache,omitempty" hcl:"no-cache,optional"` // IMPORTANT: if you add more fields here, do not forget to update newOverrides and README. }
debug
multiple platforms feature is currently not supported for docker driver
# 开始实验模式 # ~/docker/daemon.json { "experimental": true } # docker version -f '{{.Server.Experimental}}' ## true
auto-push is currently not implemented for docker driver
缺少 builder
# 创建一个 builder docker buildx create --use # a random name docker buildx create --user --name specified_name # specified name
failed to solve: rpc error: code = Unknown desc = failed to load LLB: runtime execution on platform linux/arm64 not supported
## https://github.com/multiarch/qemu-user-static#getting-started # >> https://github.com/docker/buildx/issues/132#issuecomment-521759117
这篇关于使用 docker buildx 实现多平台编译的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Docker-Compose容器集群化项目实战:新手入门指南
- 2024-11-19Docker镜像仓库项目实战:新手入门教程
- 2024-11-19Docker容器化部署项目实战:新手入门教程
- 2024-11-19Docker-Compose容器集群化资料入门教程
- 2024-11-19Docker镜像仓库资料详解:新手入门教程
- 2024-11-19Docker容器化部署资料:新手入门指南
- 2024-11-19Docker-Compose容器集群化教程:从入门到实践
- 2024-11-19Docker镜像仓库教程:新手入门指南
- 2024-11-19Docker容器化部署教程:初学者指南
- 2024-11-18Docker-Compose容器集群化入门教程