0%

使用 Docker buildx 构建多架构镜像

blog-docker-buildx

Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持 Moby BuildKit 提供的功能。提供了与 docker build 相同的用户体验,并增加了许多新功能。

1.简介

BuildKit 是下一代的镜像构建组件,主要特点有很多,本文主要使用其可以编译多种系统架构的特性。
网址:https://github.com/moby/buildkit
需要注意的是,该功能仅适用于 Docker v19.03+ 版本。

本文将讲解如何使用 Buildx 构建多种系统架构的镜像。
在开始之前,已经默认你在 Linux 系统(各大发行版)下安装好了 64 位的 Docker,我的测试环境为Linux amd64Ubuntu20.04.

2.开始实验性功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
~$ vim /etc/docker/daemon.json
{
"experimental": true
}

# 重启docker使配置生效
~$ sudo systemctl restart docker.service

~$ docker version
Client:
Version: 19.03.8
API version: 1.40
Go version: go1.13.8
Git commit: afacb8b7f0
Built: Tue Jun 23 22:26:12 2020
OS/Arch: linux/amd64
Experimental: true # <--------开启成功

2.安装跨平台编译环境依赖支持

1
~$ apt install qemu binfmt-support qemu-user-static

3.安装buildx

下载地址:https://github.com/docker/buildx/releases/

1
2
3
xdl@ubuntu20:~$ mkdir -p ~/.docker/cli-plugins
xdl@ubuntu20:~$ mv buildx-v0.4.1.linux-amd64 .docker/cli-plugins/docker-buildx
xdl@ubuntu20:~$ chmod a+x ~/.docker/cli-plugins/docker-buildx

4.准备环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
xdl@ubuntu20:~$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
default * docker
default default running linux/amd64, linux/386
xdl@ubuntu20:~$ docker buildx create --name mybuilder \
444--platform linux/arm,linux/arm64,linux/amd64
mybuilder

xdl@ubuntu20:~$ docker buildx use mybuilder
xdl@ubuntu20:~$ docker buildx inspect
Name: mybuilder
Driver: docker-container

Nodes:
Name: mybuilder0
Endpoint: unix:///var/run/docker.sock
Status: inactive # <------- 未运行
Platforms: linux/arm/v7*, linux/arm64*, linux/amd64*

$ docker buildx inspect --bootstrap
[+] Building 3.5s (1/1) FINISHED
=> [internal] booting buildkit 3.5s
=> => pulling image moby/buildkit:buildx-stable-1 3.2s
=> => creating container buildx_buildkit_mybuilder0 0.4s
Name: mybuilder
Driver: docker-container

Nodes:
Name: mybuilder0
Endpoint: unix:///var/run/docker.sock
Status: running # <-------- 运行状态
Platforms: linux/arm/v7*, linux/arm64*, linux/amd64*, linux/386

5.登录Docker Hub

1
2
# 登录 DockerHub 便于push images
~$ docker login

6.编译示例

下面使用Trojan源码编译适用多CPU架构的 docker 镜像,系统配置越高编译越开,需要设置科学上网环境或者在国外的VPS上编译。由于我常使用的CPU架构有 armv7,arm64,amd64,其它的可自己添加,我就只编译这三种架构的镜像。

1
2
3
4
5
6
7
8
9
10
# 下载最新Trojan源码
$ wget https://github.com/trojan-gfw/trojan/archive/v1.16.0.zip
$ unzip *.zip
$ cd trojan

# 加入自定义的设置
$ vim Dockerfile

$ docker buildx build --platform linux/arm,linux/arm64,linux/amd64 \
-t pengshp/trojan:v1.16 . --push

–platform 指定要编译的CPU架构

–push 编译完后上传到 Docker Hub

image-20200716162421820

参考链接

1.使用 Docker Buildx 构建多种系统架构镜像

2.Github buildx

3.Docker buildx

如果对你有帮助,请我喝杯奶茶吧!
pengshp 微信

微信

pengshp 支付宝

支付宝

欢迎关注我的其它发布渠道