使用 docker buildx 构建多 CPU 架构镜像

简介: 本文主要为大家讲解使用 docker buildx 构建多 CPU 架构镜像的过程。

1.png


镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

一、概述

ARM 架构与 X86 相比,ARM 低功耗、移动市场占比高,X86 高性能、服务器市场占比高。

不同的 CPU 架构,对于运行相同的应用程序的 Docker 容器,需要分别在相应的 CPU 架构下编译的 Docker 镜像。

传统的构建多架构镜像的方法又比较麻烦,所以接下来将为大家介绍如何使用 docker buildx 构建多架构镜像。通过在 X86 架构下构建 ARM 架构的镜像的方式,使得构建多架构镜像变得更简单。

二、环境

  • Docker Desktop(Mac)
  • Docker Engine 19.03+

2.png

三、操作步骤

1. 开启 docker buildx

docker buildx 目前还是试验功能,默认没有开启,需要在 Docker Desktop 的首选项中开启它
Docker —>Preferences —>Command Line —> Enable experimental features

3.png


执行 docker buildx 命令,输出截图如下:

4.png

2. 构建多架构镜像,并推送到 Docker Hub

写个简单的 Dockerfile,仅做演示:

echo "FROM python:3.7-alpine”>Dockerfile

列出 builder:

$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker
  default default         running linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

我们当前使用的是默认的 builder,它基本上是旧的 builder。
让我们创建一个新的 builder,它使我们能够访问一些新的多架构结构功能。
创建 builder:

$ docker buildx create --use --name mybuilder
mybuilder

查看 builder:

$ docker buildx inspect --bootstrap
[+] Building 18.8s (1/1) FINISHED
=> [internal] booting buildkit                                                                                                                                                                       18.8s
=> => pulling image moby/buildkit:buildx-stable-1                                                                                                                                                    18.0s
=> => creating container buildx_buildkit_mybuilder0                                                                                                                                                   0.7s
Name:   mybuilder
Driver: docker-container
Nodes:
Name:      mybuilder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/amd64, linux/arm64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

构建多架构镜像,并推送到 Docker Hub:

docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t donhui/multiarch --push .

该 --platform 标志指示 buildx 要为 Intel 64位、Arm 32位和 Arm 64位架构生成 Linux 镜像。
该 --push 标志生成一个多架构清单,并将所有镜像推送到 Docker Hub。

5.png


在 DockerHub 查看该镜像,latest tag 下有三个镜像,当在不同的架构 pull 该 tag 时会根据其环境 pull 相应架构的镜像:

6.png

四、思考与总结

实践中不断产生疑问,不断思考,不断求解,或许你也会有同样的问题:
1、多架构镜像对 docker 版本有何要求?
构建时要用到 docker buildx 命令,docker 版本需要 19.03+;
运行时 docker 版本不一定需要 19.03+,笔者使用 1.13.1 和 18.06.1 都可以 pull 多架构镜像的。
2、所有 Dockerfile 都可以构建成多架构吗?还是有什么要求?
对 Dockerfile 没有要求,任何 Dockerfile 无需修改。
3、镜像构建后默认保存在构建缓存中,如何将镜像保存在本地?
可以将 type 指定为 docker,但必须分别为不同的 CPU 架构构建不同的镜像,不能合并成一个镜像,如:

docker buildx build -t donghui/multiarch-armv7 --platform=linux/arm/v7 -o type=docker .
docker buildx build -t donghui/multiarch-arm64 --platform=linux/arm64 -o type=docker .
docker buildx build -t donghui/multiarch-amd64 --platform=linux/amd64 -o type=docker .

也可以将镜像 push 到镜像仓库后,再进行 pull。
4、只支持推送到 Docker Hub 吗?如果要推送到私有镜像仓库,对私有镜像仓库有什么要求?
也可以将镜像推送到私有镜像仓库,但需要该镜像仓库支持多架构镜像的功能。
如果要将多架构镜像推送到 Harbor,需要 Harbor 的版本为 v2.0.0。
Harbor v2.0.0 于 2020/05/13 发布,Harbor v2.0.0 完全支持多架构镜像。
Harbor v2.0.0 更新日志:Release v2.0.0 · goharbor/harbor · GitHub

本文转自:使用 docker buildx 构建多 CPU 架构镜像-阿里云开发者社区 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Buildx 是 Docker 官方发布的一款用于构建和打包 Docker 镜像的工具。它可以支持多种不同的构建器,包括 Dockerfile、BuildKit、Jib 等,同时还支持多种不同的平台和架构。 以下是使用 Docker Buildx 进行构建的步骤: 1. 安装 Docker Buildx 在 Docker 19.03 版本以上,Docker Buildx 已经内置,可以直接使用。如果你使用的是旧版本的 Docker,则需要安装 Docker Buildx 插件。可以通过以下命令进行安装: ``` docker buildx install ``` 2. 创建一个可用的构建使用 `docker buildx create` 命令创建一个可用的构建器,可以使用 `docker buildx ls` 命令查看所有可用的构建器。例如: ``` docker buildx create --name mybuilder ``` 3. 切换到指定的构建使用 `docker buildx use` 命令切换到指定的构建器,例如: ``` docker buildx use mybuilder ``` 4. 构建 Docker 镜像 使用 `docker buildx build` 命令来构建 Docker 镜像,例如: ``` docker buildx build --platform linux/amd64,linux/arm64 -t myimage:latest . ``` 其中 `--platform` 参数指定了要构建的平台和架构,`-t` 参数指定了镜像的名称和版本,`.` 表示 Dockerfile 所在的目录。 5. 推送 Docker 镜像 使用 `docker buildx push` 命令来推送 Docker 镜像,例如: ``` docker buildx push myimage:latest ``` 这样就完成了 Docker 镜像构建和推送。 除了上述基本操作,Docker Buildx 还支持其他一些高级功能,如多阶段构建构建缓存、并发构建等。更多详细的使用方法可以参考 Docker 官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值