栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker buildx跨平台镜像生成

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker buildx跨平台镜像生成

注:构建的镜像会推送到Docker Hub(docker官方仓库),所以需要在Docker Hub网站注册个人账号,以下使用的cf2021docker均为个人docker账号id。

step1:新建 builder 实例
Docker for Linux 不支持构建 arm 架构镜像,我们可以运行一个新的容器让其支持该特性,Docker 桌面版无需进行此项设置。这里是通过QUME支持多CPU架构。QUME安装命令:
$ docker run --rm --privileged tonistiigi/binfmt:latest --install all

QUME卸载:docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-aarch64 

由于 Docker 默认的 builder 实例不支持同时指定多个 --platform,我们必须首先创建一个新的 builder 实例。
同时由于国内拉取镜像较缓慢,我们可以使用配置了 镜像加速地址 的 dockerpracticesig/buildkit:master 镜像替换官方镜像。
# 适用于国内环境(我用的)
$ docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master

# 适用于腾讯云环境(腾讯云主机、coding.net 持续集成)
$ docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master-tencent

备注:Buildx 命令中的--driver和--driver-opt是用来指定buildx驱动的,可以通过docker buildx create --help来查看各自的作用。常用的有两种驱动:docker 与 docker-container:
1)–driver docker,表示使用绑定到 dockerd 的 BuildKit 工具来进行构建操作。但是,由于绑定到 dockerd 的 Buildkit 库使用不同的存储组件,所以该驱动未支持某些特性。比如说,使用 docker 驱动构建的镜像直接保存到本地,可以使用 docker images 查看。
2)–driver docker-container,表示使用容器运行 BuildKit 工具,在此容器中执行构建任务。而该构建方式产生的镜像,无法直接通过 docker images 查看,需要指定 –output 选项来导出。

step2:docker buildx use mybuilder-cn (step1中已经指定了--use, step2不用执行了)

step3:我的Dockerfile在f:/test,就在此目录下执行,默认根据Dockerfile构建镜像
docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t cf2021docker/hello . --push

这步需要注意:如果是在linux上,需要先执行:
docker login --username xxx --password xxxx
这样,个人登陆信息会被记录到/home/admin/.docker/config.json  的auths字段。不同用户登陆,这个字段信息会被替换成最新的登陆信息。如果没有登陆,授权信息有可能不是自己的,当执行buildx build xxx --push 时会报“failed with status: 401 Unauthorized”。 

Dockerfile内容入下: 

# TARGETPLATFORM 是架构变量,指构建镜像主机平台,例如 linux/amd64,系统会自动匹配当前主机平台参数
FROM --platform=$TARGETPLATFORM alpine

# 执行uname -a命令,并把命令的输出结果写入目录文件/os.txt
RUN uname -a > /os.txt

# 查看os.txt的文件内容
CMD cat /os.txt

step4:在不同架构下加载镜像
(1)先检查下,列出每个镜像的 digests: 
docker buildx imagetools inspect cf2021docker/hello

或者登陆docker.hub网站,看看自己的账号下cf2021docker/hello镜像是否已存在。

(2)在鲲鹏华为云上测试
[admin@hadoop2 ~]$  docker run -it --rm cf2021docker/hello
Unable to find image 'cf2021docker/hello:latest' locally
latest: Pulling from cf2021docker/hello
9b3977197b4f: Pull complete 
4fdaf3797dc8: Pull complete 
Digest: sha256:8b83cfa443096d7755ab9736916f677683877474e988fa17aabdfac64b366c39
Status: Downloaded newer image for cf2021docker/hello:latest
Linux buildkitsandbox 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 aarch64 Linux

案例参考:使用 buildx 构建多种系统架构支持的 Docker 镜像 · Docker —— 从入门到实践 · 看云

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/680621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号