> 文章列表 > docker buildx 多平台构建并推送到私有仓库

docker buildx 多平台构建并推送到私有仓库

docker buildx 多平台构建并推送到私有仓库

  1. 使用以下命令来检查是否已安装该插件:

    $ docker buildx version
    github.com/docker/buildx v0.6.1-docker 260d07a9a19b03df969787496419a0808a27ac61
    
  2. 安装模拟器(用于多平台镜像构建)

    docker run --privileged --rm tonistiigi/binfmt --install all
    docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes
    
  3. 创建一个新的 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
    
  4. 使用以下命令为 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
    
  5. 查看实例是否正确
    没有执行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
    
  6. 构建镜像并推送

    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 .