关注分享主机优惠活动
国内外VPS云服务器

介绍docker镜像多架构构造(Docker创建了三种镜像)

前言:

目前arm系统越来越普遍,对镜像的多架构要求也越来越高。对于同一个图像,最简单的方法就是在amd64或者arm机器上搭建后,通过不同的标签来区分,比如nginx:v1-amd64,nginx:v1-arm64,但是这种方法比较难看,也没有相应的架构机器来搭建。我该怎么办?

目前最新的方法是使用buildx来构建,但目前默认不启用该功能,所以需要在docker的配置文件中添加“。实验性的& quotAfter: true,重启docker服务生效。

首先,执行以下命令,以便amd64机器也可以构建arm的映像:

docker run --RM--特权Tonistigii/Binfmt:最新的--Install然后创建一个新的构建实例:

dock buildx create --use --name = my builder -CN --Driver docker -Container --Driver -OptImage = docker practice SIG/Build Kit:Master。所有的准备工作都做好了。

接下来,以kubebuilder命令创建的operator项目的默认Dockerfile为例:

#从--平台构建管理器二进制文件= $ target platform golang:1.16 as builder arg TARGETOS TARGETARCHWORKDIR/workspace #复制go模块manifestsCOPY Go . mod Go . modcopy Go . sum Go . sum #在构建和复制源代码之前缓存deps,以便我们不需要re-下载那么多#并且源代码更改不会使我们下载的层无效运行go mod下载#复制Go源代码Copy main . Go main . Go Copy API/API/Copy controllers/# Build run CGO _ ENABLED = . 使用发行版作为最小的基础映像来打包管理器二进制文件#请参考https://github.com/GoogleContainerTools/的disruless以获得来自--platform = $ target platform gcr.io/distroless/static:nonrootWORKDIR/copy--from = builder/workspace/manager . user 65532:65532 entry point["/manager "]有两个修改点:

--platform = $ TARGETplatformgoos = $ { targetos } go arch = $ { target arch } target开头的这些变量可以在参考链接2中看到它们的完整含义。

接下来,使用该文件构建:

docker buildx build -t hello/namespace/name:v1 -f docker file。--平台linux/amd64,Linux/arm 64 --推送注意,这里的buildx,--平台参数后面是要构建的版本,--推送。buildx构建的多架构映像,要么用这个参数推送到映像库,要么用--load本地加载,不能省略。

构造完成后,会生成相应的多架构映像,可以使用docker manifest inspect进行验证,比如:

docker清单检查hello/namespace/name:v1 { " schema version ":2," media type ":" application/vnd . docker . distribution . manifest . list . vzhujipindaoJSON "," manifests ":[{ " media type ":" application/vnd . docker . distribution . manifest . vzhujipindaoJSON "," size": 1367," Digest ":" sha 256:a7b 99854 e 13939 e 3 beaf 21 da 8 b 4654022018 EDA 9 f 438155 B1

对于一些没有办法使用buildx的场景,我们可以手动构建不同架构的镜像,然后手动创建manifest,比如:

#指定拉amd64架构Docker pull --平台amd64 gcr.io/distroless/static:nonroot#和调用标签Docker TAG 9f 34 Hello/NS/Static:non root -amd64 # Push Docker Push Hello/NS/Static:non root -amd64 #指定拉arm64架构Docker pull --平台arm 64 gcr.io/distroless/static:nonroot#.重调用标签Docker TAG 91714 Hello/NS/Static:non root -arm 64 # Push Docker Push Hello/NS/Static:non root -arm 64 # Make

另外,如果你想构建多个架构,有几点需要注意:

Yum|apt install Others检查映像库中有哪些映像:

Curl -u "用户名":"密码" -X GET http:// mirror地址:5000/v2/_catalog?N=2000 | python -m json.tool查看镜像有哪些标签:

curl -u " username ":" password " -X GET http://mirror address:5000/v2/namespace/mirror name/tags/list | python -mjonson . tool就是这样。这篇关于介绍Docker image的多架构构建的文章就在这里。关于Docker image的更多信息,请搜索主机频道zhujipindao的往期文章。com或

未经允许不得转载:主机频道 » 介绍docker镜像多架构构造(Docker创建了三种镜像)

评论 抢沙发

评论前必须登录!