使用Docker Buildx构建多架构多平台Docker镜像

2023-10-29T14:58:47


Buildx 是一款用于通过 Build­Kit 扩展构建功能的 Docker CLI 插件,使用 Buildx,我们无需对 Dock­er­file 进行任何修改,就可以构建不同 CPU 架构的 Docker 镜像,并支持推送到 Docker Hub。

注意:在开始之前,默认已经安装好了 64 位的 Docker,且 Docker 版本大于 19.03。

安装 Docker Buildx

(1)使用二进制安装

# 下载二进制文件
wget https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64

# 创建文件夹
mkdir -p $HOME/.docker/cli-plugins

# 移动文件
mv buildx-v0.11.2.linux-amd64 $HOME/.docker/cli-plugins/docker-buildx

# 赋予二进制文件执行权限
chmod +x $HOME/.docker/cli-plugins/docker-buildx

(2)编译二进制文件安装

建议采用编译安装的方式,避免在接下来的过程中出现奇怪的错误。

export DOCKER_BUILDKIT=1
docker build --platform=local -o . "https://github.com/docker/buildx.git"
mkdir -p $HOME/.docker/cli-plugins
mv buildx $HOME/.docker/cli-plugins/docker-buildx
chmod +x $HOME/.docker/cli-plugins/docker-buildx

启用 Buildx 插件

Docker Buildx 属于实验性功能,在确保 Docker 版本不低于 19.03 ,通过执行以下命令开启新特性,以启用 buildx 插件。

export DOCKER_CLI_EXPERIMENTAL=enabled

初始化 Docker Buildx

docker buildx create --name builderx
docker buildx use builderx
docker buildx inspect --bootstrap

启用 binfmt_misc

如果你使用的是 Docker 桌面版(包含 macOS 和 Windows)默认已启用,而对于 Linux 系统,可通过运行一个特权容器来启用 binfmt_misc

docker run --privileged --rm tonistiigi/binfmt --install all

验证是binfmt_misc是否开启:

ls -al /proc/sys/fs/binfmt_misc/

buildx 会通过 QEMU 模拟器和 binfmt_misc 模拟不同平台构建镜像,请查看是否包含 qemu-* 文件。

构建多平台镜像

可提前通过 docker login 命令登录 Docker Hub,在完成构建多平台镜像后,会同时推送镜像至 Docker Hub。

安装并启用后,我们就可以使用 Docker Buildx 来构建多平台镜像了,以往我们进行构建镜像的命令:

build -t ${IMAGE_NAME}:${VERSION} .

使用 Docker Buildx 体验上与 docker build 用法基本相同,构建多平台的命令为:

docker buildx build --platform=linux/amd64,linux/arm/v7,linux/arm64/v8 -t ${IMAGE_NAME}:${VERSION} . --push
  • --platform :指定需要构建的平台,例如:linux/amd64linux/arm64darwin/amd64
  • --push :指构建完毕后自动推送到 Docker hub 仓库;
  • -t :镜像的名称及 tag;
  • . :表示 Dockerfile 文件位于当前路径下。

Docker 镜像完成构建、推送后,我们可以在 Docker Hub 找到对应镜像的 tag 就可以看到支持多个平台。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »