在Ubuntu上编译多架构Docker镜像

Docker能够在包括ARM64、Power PC等很多不同架构的处理器平台上运行。然而,有些处理器平台上不容易找到可用于构建容器镜像的设备。例如,常见的能够运行Docker的ARM设备包括Raspberry Pi、NAS等,它们通常拥有较小的内存和性能普通的处理器,不太能够胜任构建容器镜像的任务。通过Docker的实验性功能Docker Buildx以及多平台仿真软件QEMU,可以实现在x64平台的Ubuntu操作系统中为多种架构构建Docker镜像。

Docker Buildx能够同时为多个不同配置的镜像构建,其作为实验性功能包含在Docker 19.03版本中。要使用Buildx,首先需要开启Docker CLI(而不是Daemon)的实验性功能:按Docker官方网站指南安装19.03版本的Docker后,在Docker CLI配置文件~/.docker/config.json文件中添加"experimental": "enabled"设置(若使用root用户运行Docker CLI,则为/root/.docker/config.json),示例文件如下。

{
  "experimental": "enabled"
}

若能使用docker buildx命令,说明已经成功启用Docker Buildx。

QEMU是一款功能强大的仿真器软件,它以用户模式运行时,能够直接启动其他架构的程序而不需要仿真整个操作系统。可以运行以下命令,使用Docker安装并在binfmt_misc中注册QEMU,给本机提供运行其他架构Docker镜像的能力(参见multiarch/qemu-user-static | Github

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

尝试运行以下命令,若能成功运行,说明已经成功配置QEMU:

docker run --rm -t arm64v8/ubuntu uname -m
# 输出:aarch64

随后,在Docker Buildx中添加新的builder:

docker buildx create --use --name mybuilder

然后就可以使用Buildx为所需的架构构建Docker镜像。以taoyouh/iperf3-alpine项目为例,构建命令如下:

docker buildx build --tag taoyou/iperf3-alpine:latest --platform linux/amd64,linux/arm64,linux/ppc64le,linux/s390x,linux/386,linux/arm/v7 --push .

该命令会分别以linux/amd64、linux/arm64、linux/ppc64le、linux/s390x、linux/386、linux/arm/v7这几种架构运行Dockerfile指定的构建步骤,并将构建结果推送到Docker Hub中。该项目使用这种方法,为流行的iperf3网络性能测量工具构建了可用于多种不同平台的Docker镜像taoyou/iperf3-alpine

留言

有想法?请给我们留言!您的留言不会直接显示在网站内。