位置: IT常识 - 正文

Docker镜像多架构构建(docker运行多个镜像)

编辑:rootadmin
Docker镜像多架构构建

推荐整理分享Docker镜像多架构构建(docker运行多个镜像),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:docker from多个镜像,docker镜像分层结构,docker多个镜像运行在一个实例,docker多个镜像,docker多个镜像运行在一个实例,docker多镜像构建,多个docker镜像合并有什么用,docker多镜像构建,内容如对您有帮助,希望把文章链接给更多的朋友!

目前arm系统越来越常见,对镜像的多架构需求也越来越大。对于同一个镜像,最简单的办法就是在amd64或arm机器上build后通过不同的tag进行区分,比如 nginx:v1-amd64 、 nginx:v1-arm64 ,但这种方式比较丑陋,而且没有对应架构的机器用来构建怎么办?

目前最新的办法就是使用buildx来进行构建,不过这个特性目前默认是没启用的,需要在docker的配置文件中添加 “experimental”: true 后重启docker服务生效。

首先执行下面的命令让amd64的机器也可以构建arm的镜像:

docker run --rm --privileged tonistiigi/binfmt:latest --install all

然后创建一个新的build实例:

docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master

这样准备工作就全都做好了。

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

# Build the manager binaryFROM --platform=$TARGETPLATFORM golang:1.16 as builderARG TARGETOS TARGETARCHWORKDIR /workspace# Copy the Go Modules manifestsCOPY go.mod go.modCOPY go.sum go.sum# cache deps before building and copying source so that we don't need to re-download as much# and so that source changes don't invalidate our downloaded layerRUN go mod download# Copy the go sourceCOPY main.go main.goCOPY api/ api/COPY controllers/ controllers/# BuildRUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -a -o manager main.go# Use distroless as minimal base image to package the manager binary# Refer to https://github.com/GoogleContainerTools/distroless for more detailsFROM --platform=$TARGETPLATFORM gcr.io/distroless/static:nonrootWORKDIR /COPY --from=builder /workspace/manager .USER 65532:65532ENTRYPOINT ["/manager"]Docker镜像多架构构建(docker运行多个镜像)

修改点有2个:

--platform=$TARGETPLATFORMGOOS=${TARGETOS} GOARCH=${TARGETARCH}

这些TARGET开头的变量可以在参考链接2里看到全部含义。

接下来使用这个文件进行构建:

docker buildx build -t hello/namespace/name:v1 -f Dockerfile . --platform linux/amd64,linux/arm64 --push

注意这里的 buildx 、 --platform 参数后面跟随需要构建的版本、以及 --push ,buildx构建的多架构镜像要么使用这个参数push到镜像仓库,要么使用 --load 加载到本地,不可省略。

构建完成后就会生成相应的多架构镜像了,可以使用 docker manifest inspect 来进行验证,比如:

docker manifest inspect hello/namespace/name:v1{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json", "manifests": [ { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 1367, "digest": "sha256:a7b99854e13939e3beaf21c1da8b4654022018eda9f438155b18ae16eeff49a5", "platform": { "architecture": "amd64", "os": "linux" } }, { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "size": 2169, "digest": "sha256:844885928813685ffa8c5ea4c6e9e7a09d95ac79e417afae0be7b73086762cfd", "platform": { "architecture": "arm64", "os": "linux" } } ]}

可以看出确实是生成了多个架构的镜像,使用时直接在不同架构的机器上pull就会自动下载对应的架构镜像了。或者也可以使用 docker pull --platform arm64|amd64 xxxxx 来指定拉取镜像的架构。

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

# 指定拉取amd64架构docker pull --platform amd64 gcr.io/distroless/static:nonroot# 重新打tagdocker tag 9ef34 hello/ns/static:nonroot-amd64# 推送docker push hello/ns/static:nonroot-amd64# 指定拉取arm64架构docker pull --platform arm64 gcr.io/distroless/static:nonroot# 重新打tagdocker tag 91714 hello/ns/static:nonroot-arm64# 推送docker push hello/ns/static:nonroot-arm64## 制作manifestdocker manifest create hello/ns/static:nonroot hello/ns/static:nonroot-amd64 hello/ns/static:nonroot-arm64docker manifest push hello/ns/static:nonrootdocker manifest rm hello/ns/static:nonroot

重点是最后3行,push manifest后使用就和第一种方法一样了。

另外如果想进行多架构构建有几个注意点:

yum|apt install

其他 查看镜像仓库里都有哪些镜像:

curl -u "用户名":"密码" -X GET http://镜像地址:5000/v2/_catalog?n=2000 | python -m json.tool

查看镜像有哪些tag:

curl -u "用户名":"密码" -X GET http://镜像地址:5000/v2/命名空间/镜像名称/tags/list | python -m json.tool
本文链接地址:https://www.jiuchutong.com/zhishi/298364.html 转载请保留说明!

上一篇:滚动条基本样式设置(滚动条基本样式有哪些)

下一篇:基于Java+SpringBoot+vue+element驾校管理系统设计和实现

  • 基本保险包括
  • 个人所得税计提和发放分录
  • 息税前利润计算每股收益
  • 报销为什么不能多家赔付
  • 建筑公司包工包料账务处理
  • 航空公司开具的个人抬头的发票可以税前扣除吗
  • 出口业务运费可以抵扣吗
  • 出差飞机票报销标准
  • 失业保险费返还属于政府补助吗
  • 小规模企业收到专票可以入账吗
  • 分给当期投资者利润如何做会计分录?
  • 预缴税款的完税证明单
  • 港币转人民币怎么转账
  • 应交税费减免税额结转
  • 外币应收帐款汇兑损益现流附表
  • 技术研发阶段的费用如何做分录
  • 什么情况下需要写答
  • 新版增值税开票软件怎么下载
  • 发票虚开税务局要求补税怎么办?
  • 案例分析建筑业发展趋势
  • 私对公转账需要开发票吗
  • 小企业处置固定资产
  • 留存收益账务处理视频
  • 免征的税款每月几号申报
  • 生产成本可以结转到其他业务成本吗
  • 权利,许可证照印花税
  • win11我的电脑不在桌面显示
  • 股权转让的会计凭证
  • 差额承兑汇票办法规定
  • php实现上传图片功能
  • 隐藏资源管理器窗口
  • searchnavversion.exe - searchnavversion是什么进程 作用是什么
  • 工程竣工结算资料存档几年
  • 房地产销售未完工产品收入是含税的吗
  • 若依框架权限控制
  • [Vue warn]: Error in created hook: “TypeError: Cannot read properties of undefined (reading ‘$on‘)“
  • 会计处理的正确顺序
  • vue错误处理
  • 【角色扮演】
  • openapi开放平台
  • 博客界面模板
  • 差旅费报销会议记录
  • 网络分割算法
  • tensorflow gan
  • 老师不干了可以从事什么行业
  • Es6的新特性promise对象的设计初衷是
  • python累加求和代码,直到最后一项小于10^-6
  • 开出租车怎么租车
  • 上一年的进项税转出还用交企业所得税吗
  • java线程的四种基本状态
  • 兼职人员的个税怎么计算
  • 企业给员工报销的个人消费支出如何计税
  • 个人出租不动产增值税优惠政策
  • 年终奖可以税前扣除吗
  • 附加税税率是指
  • 计提的应收账款坏账准备的科目有哪些
  • 企业取得的财政性资金
  • 工会经费教育经费福利费计提比例
  • 私车公用是否违法
  • 加油充值卡有优惠吗
  • 租赁行业的成本
  • 原始凭证和记账凭证的填制
  • 劳务费如何做账务处理
  • sql server233错误
  • sqlserver如何查询表数据
  • ubuntu怎么录音
  • macbook怎么新建txt文件
  • win7自动升级失败后的处理
  • win8无法打开ie
  • Unity3d_用PlayerPrefs保存和读取数组
  • javascript中声明变量的关键字
  • python做应用软件界面
  • shell脚本的fi
  • unity获取鼠标
  • 细说java
  • 手机sd卡满了怎么办
  • 一个月可不可以瘦十斤
  • 如何加强税务系统财务管理工作
  • 增值税发票报税流程
  • 云南省国税发票查询真伪查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设