构建多平台 Docker 镜像

利用 Docker 引入的插件 buildx,可以很轻松地构建多平台 Docker 镜像。buildx 是 docker build ... 命令的下一代替代品,它利用 BuildKit 的全部功能扩展了 docker build 的功能。

使用一行命令就可以,三个平台同时编译打包和推送到远程 DockerHub

docker buildx build -t hongwenjun/ip \r
--platform=linux/arm,linux/arm64,linux/amd64 . --push

下面就来演示一下如何在短短几分钟内使用 buildx 构建出不同平台的 Docker 镜像。步骤如下:

启用 buildx 插件

export DOCKER_CLI_EXPERIMENTAL=enabled

docker buildx version
# github.com/docker/buildx v0.6.1-docker 260d07a9a19b03df969787496419a0808a27ac61

启用 binfmt_misc

docker pull docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64
docker run --rm --privileged docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64

验证是 binfmt_misc 否开启:

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

-rw-r--r-- 1 root root 0 Aug 22 02:33 qemu-aarch64
-rw-r--r-- 1 root root 0 Aug 22 02:33 qemu-arm
-rw-r--r-- 1 root root 0 Aug 22 02:33 qemu-ppc64le
-rw-r--r-- 1 root root 0 Aug 22 02:33 qemu-riscv64
-rw-r--r-- 1 root root 0 Aug 22 02:33 qemu-s390x

验证是否启用了相应的处理器:

cat /proc/sys/fs/binfmt_misc/qemu-aarch64

enabled
interpreter /usr/bin/qemu-aarch64
flags: OCF
offset 0
magic 7f454c460201010000000000000000000200b7
mask ffffffffffffff00fffffffffffffffffeffff

从默认的构建器切换到多平台构建器

1. 先创建一个新的构建器:

docker buildx create --use --name mybuilder

2. 启动构建器:

docker buildx inspect mybuilder --bootstrap

[+] Building 6.9s (1/1) FINISHED
 => [internal] booting buildkit                                                                                                                                        6.8s
 => => pulling image moby/buildkit:buildx-stable-1                                                                                                                     5.8s
 => => creating container buildx_buildkit_mybuilder0                                                                                                                   1.0s
Name:   mybuilder
Driver: docker-container

Nodes:
Name:      mybuilder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

3. 查看当前使用的构建器及构建器支持的 CPU 架构,可以看到支持很多 CPU 架构:

docker buildx ls

NAME/NODE    DRIVER/ENDPOINT             STATUS  PLATFORMS
mybuilder *  docker-container
  mybuilder0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default      docker
  default    default                     running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6

使用 buildx,我们无需对 Dockerfile 进行任何修改,就可以创建支持多种 CPU 架构的 Docker 镜像,然后将其推送到 Docker Hub。任何安装了 Docker 的系统都可以拉取到与它的 CPU 架构相对应的镜像。


0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注