docker buildx 多平台构建并推送到私有仓库
-
使用以下命令来检查是否已安装该插件:
$ docker buildx version github.com/docker/buildx v0.6.1-docker 260d07a9a19b03df969787496419a0808a27ac61
-
安装模拟器(用于多平台镜像构建)
docker run --privileged --rm tonistiigi/binfmt --install all docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes
-
创建一个新的 builder 实例
如果私有仓库是http没有证书的情况下需要指定--driver-opt network=host
和--config /etc/buildkit/buildkitd.toml
两个参数,另外需要在/etc/docker/daemon.json
中添加"insecure-registries": ["image.xxxxxx.com"]
其中buildkitd.toml
内容为:debug = true # insecure-entitlements allows insecure entitlements, disabled by default. insecure-entitlements = [ "network.host", "security.insecure" ]# optionally mirror configuration can be done by defining it as a registry. [registry."image.xxxxxx.com"]http = trueinsecure = true
创建命令:
docker buildx create --name mybuilder --use --driver-opt network=host --config /etc/buildkit/buildkitd.toml
-
使用以下命令为 builder 实例添加多个平台
$ docker buildx inspect --bootstrap Name: mybuilder Driver: docker-containerNodes: Name: mybuilder0 Endpoint: unix:///var/run/docker.sock Status: running Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
-
查看实例是否正确
没有执行docker buildx inspect --bootstrap
之前状态:$ docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS mybuilder * docker-container mybuilder0 unix:///var/run/docker.sock inactive default docker default default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
执行后状态:
$ docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS mybuilder * docker-container mybuilder0 unix:///var/run/docker.sock running linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6 default docker default default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
-
构建镜像并推送
FROM alpine ARG TARGETPLATFORM ARG BUILDPLATFORM RUN echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM"
docker buildx build --platform linux/arm64,linux/amd64 -t image.xxxxxx.com/release/test:1.0.0 --push .