使用Docker Buildx构建多平台镜像

使用Docker Buildx构建多平台镜像
最新回答
舀一瓢月色

2022-10-17 04:18:05

在x86_64平台上使用Docker Buildx构建多平台镜像(如arm64)的完整流程如下:

一、安装Docker Buildx(以CentOS 7 x64为例)
  1. 下载Buildx工具访问

    官方下载链接
    获取最新版本(示例使用v0.7.1):

    wget
    https://github.com/docker/buildx/releases/download/v0.7.1/buildx-v0.7.1.linux-amd64
  2. 安装到Docker插件目录

    mkdir -p $HOME/.docker/cli-pluginsmv buildx-v0.7.1.linux-amd64 $HOME/.docker/cli-plugins/docker-buildxchmod +x ~/.docker/cli-plugins/docker-buildx
二、启用Docker Buildx实验性功能
  1. 修改Docker配置文件编辑/etc/docker/daemon.json,添加以下内容(若文件不存在则新建):

    { "experimental": true}
  2. 重启Docker服务

    systemctl restart docker
三、初始化Buildx构建器
  1. 创建并启用构建器实例docker buildx create --name builderxdocker buildx use builderxdocker buildx inspect --bootstrap

    输出应显示Status: running,表示构建器已就绪。

四、构建多平台镜像
  1. 基础构建命令替换传统docker build命令为Buildx版本:

    docker buildx build --platform linux/amd64,linux/arm64 -t ${IMAGE_NAME}:${VERSION} . --push

    关键参数

    --platform:指定目标平台(支持多平台逗号分隔)。

    --push:自动推送镜像至Docker Hub(若省略,镜像可能仅存在于构建器缓存中)。

  2. 验证镜像平台支持推送后,在Docker Hub或私有仓库中查看镜像的Tags标签页,应显示类似以下信息:

    linux/amd64, linux/arm64

五、注意事项
  1. 配置文件必要性Docker Buildx为实验性功能,必须通过daemon.json启用experimental: true,否则会报错unknown flag: --platform。

  2. 构建器初始化首次使用前需执行create、use、inspect --bootstrap三步操作,否则构建命令会因构建器未就绪而失败。

  3. --push参数的重要性若省略--push,镜像可能仅存在于本地构建器缓存中,导致docker images无法列出。建议始终添加此参数以确保镜像持久化。

  4. 跨平台构建原理Buildx通过QEMU模拟器实现在x86_64主机上构建arm64镜像,无需实际ARM硬件支持。

六、完整操作示例# 1. 下载并安装Buildxwget
https://github.com/docker/buildx/releases/download/v0.7.1/buildx-v0.7.1.linux-amd64mkdir
-p $HOME/.docker/cli-pluginsmv buildx-v0.7.1.linux-amd64 $HOME/.docker/cli-plugins/docker-buildxchmod +x ~/.docker/cli-plugins/docker-buildx# 2. 启用实验性功能echo '{"experimental": true}' | sudo tee /etc/docker/daemon.jsonsudo systemctl restart docker# 3. 初始化Buildxdocker buildx create --name builderxdocker buildx use builderxdocker buildx inspect --bootstrap# 4. 构建多平台镜像并推送IMAGE_NAME="myapp"VERSION="1.0"docker buildx build --platform linux/amd64,linux/arm64 -t $IMAGE_NAME:$VERSION . --push

通过以上步骤,您可以在x86_64主机上高效构建支持多平台的Docker镜像,并自动推送至仓库供不同架构设备使用。