docker 19.03 新平台批量跨平台编译 不同架构 的镜像 buildx 命令

前言:

在之前的docker版本中,我们需要用到multiarch的镜像来实现交叉编译不同架构的镜像。

在docker 19.03之后的新版本,增加了buildx 功能,可以实现跨平台编译

步骤:

1、开启buildx功能

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

要想使用 buildx,首先要确保 Docker 版本不低于 19.03,同时还要通过设置环境变量 DOCKER_CLI_EXPERIMENTAL 来启用。可以通过下面的命令来为当前终端启用 buildx 插件:

 export DOCKER_CLI_EXPERIMENTAL=enabled

(若使用root用户运行Docker CLI,则为/root/.docker/config.json),示例文件如下。

{
  "experimental": "enabled"
}

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

2、开启QEMU

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的镜像只支持宿主机为x64的cpu的环境。

其他架构的情况,可以直接安装qemu

sudo apt-get install  qemu-user-static

 

3、开启新的builder:

docker buildx create --use --name mybuilder

4、然后就可以使用Buildx为所需的架构构建Docker镜像。

以https://github.com/scjtqs/docker-kodbox 为例:

cd php-fpm
docker buildx build --tag scjtqs/kodbox: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中。

PS:请确保你的FROM的镜像支持 对应的架构

5、关闭builder:

docker buildx rm mybuilder

 

打赏
Bookmark the permalink.

发表评论

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