位置: 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驾校管理系统设计和实现

  • 实用的技巧来增加网站的流量(增长最有效的方法)

    实用的技巧来增加网站的流量(增长最有效的方法)

  • vivo x6s A动态壁纸怎么设置(动态壁纸设置vivo)

    vivo x6s A动态壁纸怎么设置(动态壁纸设置vivo)

  • 美团袋鼠快跑15元红包使用规则(美团袋鼠快跑入口)

    美团袋鼠快跑15元红包使用规则(美团袋鼠快跑入口)

  • 苹果11有哪些功能(苹果11哪些功能比较强大)

    苹果11有哪些功能(苹果11哪些功能比较强大)

  • 手机只能照相不能录像(手机只能照相不能拍视频了)

    手机只能照相不能录像(手机只能照相不能拍视频了)

  • iphonex还原所有设置什么意思(苹果x还原所有设置会清空照片么)

    iphonex还原所有设置什么意思(苹果x还原所有设置会清空照片么)

  • 隔空手势没反应(隔空手势不能用了)

    隔空手势没反应(隔空手势不能用了)

  • 用户ld是什么意思(用户 id)

    用户ld是什么意思(用户 id)

  • 苹果手表怎么配对华为(苹果手表怎么配对vivo的手机)

    苹果手表怎么配对华为(苹果手表怎么配对vivo的手机)

  • 微视红包一天能领几个(微视红包一天可领几次)

    微视红包一天能领几个(微视红包一天可领几次)

  • 感觉耳机有电流刺耳朵(感觉耳机里有电流)

    感觉耳机有电流刺耳朵(感觉耳机里有电流)

  • 没苹果手机可以用watch吗(没苹果手机可以用苹果手表吗)

    没苹果手机可以用watch吗(没苹果手机可以用苹果手表吗)

  • 苹果手机来电不响铃怎么回事(苹果手机来电不响铃声)

    苹果手机来电不响铃怎么回事(苹果手机来电不响铃声)

  • 蓝牙可以投屏吗(蓝牙可以投屏吗?)

    蓝牙可以投屏吗(蓝牙可以投屏吗?)

  • 华为p9plus支不支持nfc(华为p9plus支持5g网络吗)

    华为p9plus支不支持nfc(华为p9plus支持5g网络吗)

  • 魅族16T怎么关闭锁屏画报(魅族16t怎么关闭手机卡服务功能)

    魅族16T怎么关闭锁屏画报(魅族16t怎么关闭手机卡服务功能)

  • 淘宝优惠卷删了想找回(淘宝优惠卷删了还能用吗)

    淘宝优惠卷删了想找回(淘宝优惠卷删了还能用吗)

  • 二进制数101110转换成等值的十六进制数是(二进制数101110转换)

    二进制数101110转换成等值的十六进制数是(二进制数101110转换)

  • 苹果xs没有指纹解锁了吗(苹果13有没有指纹)

    苹果xs没有指纹解锁了吗(苹果13有没有指纹)

  • 人工智能大模型多场景应用原理解析(人工智能大模型体验报告3.0)

    人工智能大模型多场景应用原理解析(人工智能大模型体验报告3.0)

  • 微擎框架破解版v2.7.5去授权一键安装纯净商业版(微擎纯净框架,无任何限制)-电脑学习网(破解版微擎框架如何升级)

    微擎框架破解版v2.7.5去授权一键安装纯净商业版(微擎纯净框架,无任何限制)-电脑学习网(破解版微擎框架如何升级)

  • 帝国模板变量更新后页面不更新怎么办(帝国cms模型)

    帝国模板变量更新后页面不更新怎么办(帝国cms模型)

  • 增值税一般纳税人税率是多少?
  • 公司收到借款利息收入要交增值税吗
  • 成本结转的方法能用百分比法吗
  • 一般纳税人支付给小规模纳税人的税率
  • 异地预缴税款怎么抵扣
  • 加油电子普通发票可以抵扣增值税吗
  • 农产品计算抵扣的税务政策
  • 软件开发里面的人天
  • 缴交社保基金会计分录怎么写?
  • 事业单位结转资金和结余资金区别
  • 减免货款需要进项税额转出吗
  • 现金流量表借款还了流入和流出可以抵消吗
  • 转让土地使用权 简易征收
  • 房租开的专票怎么做账
  • 哪些情况下不就地分摊缴纳企业所得税?
  • 公司注销欠法人款怎么帐务处理?
  • 免征的教育费附加如何账务处理
  • 产品研发的规则
  • 净资产收益率怎么求
  • 公司员工补充医疗保险方案
  • 原材料费用的分配
  • linux怎么安装程序
  • 计提个人社保会计分录实操
  • 更正或作废申报怎么填
  • 2021年6月更新
  • 事业单位财政补助和全额拨款有什么区别
  • 不能抵扣的费用
  • 苹果紧急提醒
  • php数组函数输出《咏雪》里有多少"片"字
  • php面向对象是什么意思
  • linux中添加用户和组的操作
  • 测网速移动的方法是什么
  • PHP:pg_get_pid()的用法_PostgreSQL函数
  • php执行mysql语句的函数
  • 特殊性税务处理弥补亏损限额
  • 窗函数的作用
  • 旅行社小规模纳税人差额征税
  • thinkphp,onethink和thinkox中验证码不显示的解决方法分析
  • pwcorr_a命令
  • 网站top排行榜
  • php 密码
  • 税控盘没有报税处理这个选项
  • 充油卡 发票
  • 发票可以开未来日期吗
  • 结转本期损益怎么看亏损
  • 织梦栏目描述调用
  • 本年利润有余额是什么意思
  • 如何查询以前申请的新西兰签证记录
  • 可以直接在企业所得税税前扣除的是
  • 跨年发票分录
  • 当月没有凭证还能报税吗
  • 资产减值损失的科目编码
  • 单位定期存单利息如何记账
  • 收到微信公众号反诈骗风险提示
  • 三栏式明细账需要结账吗
  • 注册资本金印花税税率是2.5还是5
  • 普通发票和增值发票的区别在哪里
  • 商标是无形资产还是商誉
  • mysql join 慢
  • mysql存储引擎的作用
  • centos rpm命令
  • bois开启usb功能
  • 进程中svchost
  • win8关机后自动重启怎么办
  • OS X 10.12.6 beta 1如何更新 OS X 10.12.6 beta 1如何升级
  • ubuntu怎么建立文件
  • Win7任务栏时间显示秒
  • 关于windows的说法正确的是
  • win8切换到桌面的快捷键
  • css中文手册
  • cocos creator rpg
  • node+express+ejs制作简单页面上手指南
  • js跨域请求的三种方法
  • python xml.etree.ElementTree遍历xml所有节点实例详解
  • 原生js实现ajax步骤
  • jQuery+formdata实现上传进度特效遇到的问题
  • unity3d鼠标点击移动
  • 国税局定额发票查询
  • 矿山占用荒山是什么意思
  • 土地流转需要什么材料
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设