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

  • 抖音音浪是什么(抖音音浪是什么时候可以提现)

    抖音音浪是什么(抖音音浪是什么时候可以提现)

  • 苹果手机注册新ID(苹果手机注册新id电子邮件怎么填)

    苹果手机注册新ID(苹果手机注册新id电子邮件怎么填)

  • 华为Mate X2支持哪些5g

    华为Mate X2支持哪些5g

  • 荣耀x10如何恢复出厂设置(荣耀10怎么还原)

    荣耀x10如何恢复出厂设置(荣耀10怎么还原)

  • 怎么解除微信绑定的app(怎么解除微信绑定的企业微信)

    怎么解除微信绑定的app(怎么解除微信绑定的企业微信)

  • 微信怎么设置不接受对方消息(微信怎么设置不接收某人信息)

    微信怎么设置不接受对方消息(微信怎么设置不接收某人信息)

  • 快手登录无法连接网络怎么回事(快手登录无法连麦怎么办)

    快手登录无法连接网络怎么回事(快手登录无法连麦怎么办)

  • 微信表情在哪个文件夹(怎么制作表情包在微信上)

    微信表情在哪个文件夹(怎么制作表情包在微信上)

  • 锤子无线网络直连什么意思(锤子r1无线充电怎么打开)

    锤子无线网络直连什么意思(锤子r1无线充电怎么打开)

  • 华为nova7怎么设置24小时(华为nova7怎么设置时间24小时制)

    华为nova7怎么设置24小时(华为nova7怎么设置时间24小时制)

  • 磁盘清理一直不结束(磁盘清理没反应)

    磁盘清理一直不结束(磁盘清理没反应)

  • 显卡n卡和a卡的区别(显卡n卡和a卡的差距)

    显卡n卡和a卡的区别(显卡n卡和a卡的差距)

  • word空半字距离怎么设置(字间距空半格)

    word空半字距离怎么设置(字间距空半格)

  • 微信有一个耳朵标志怎么取消(微信有一个耳朵怎么去掉)

    微信有一个耳朵标志怎么取消(微信有一个耳朵怎么去掉)

  • 什么传递需要调制编码(什么可以传递)

    什么传递需要调制编码(什么可以传递)

  • 电脑初始化失败怎么办(电脑初始化失败 重装没用)

    电脑初始化失败怎么办(电脑初始化失败 重装没用)

  • 手机投屏搜不到电视设备(手机投屏搜不到电脑)

    手机投屏搜不到电视设备(手机投屏搜不到电脑)

  • 苹果11演示机和正常机区别(苹果演示机和官换机哪个好)

    苹果11演示机和正常机区别(苹果演示机和官换机哪个好)

  • 苹果xsmax需要充电几小时(苹果iphonexsmax充电要充多久满?)

    苹果xsmax需要充电几小时(苹果iphonexsmax充电要充多久满?)

  • 体重秤ib什么意思(体重秤lb什么意思)

    体重秤ib什么意思(体重秤lb什么意思)

  • 天猫买东西不发货怎么办(天猫买东西不发取件码)

    天猫买东西不发货怎么办(天猫买东西不发取件码)

  • 苹果xr锁屏手电筒移除(苹果xr锁屏界面的手电筒为什么开不了)

    苹果xr锁屏手电筒移除(苹果xr锁屏界面的手电筒为什么开不了)

  • 卡贴能二次使用吗(卡贴能用几次号码)

    卡贴能二次使用吗(卡贴能用几次号码)

  • qq音乐怎样增加qq成长值(qq音乐怎么加)

    qq音乐怎样增加qq成长值(qq音乐怎么加)

  • ddhelper32.exe进程安全吗.是病毒吗 ddhelper32是什么进程(tdxcef.exe进程)

    ddhelper32.exe进程安全吗.是病毒吗 ddhelper32是什么进程(tdxcef.exe进程)

  • Node.js和Vue的安装与配置(超详细步骤)(node 和vue)

    Node.js和Vue的安装与配置(超详细步骤)(node 和vue)

  • celery的介绍和使用(celery eventlet)

    celery的介绍和使用(celery eventlet)

  • 专票税号不对可以认证吗
  • 税财通财务软件备份与恢复
  • 收到上年度所得税发票
  • 预收账款可以挂多久
  • 货款不入公司账户属什么行为
  • 企业股权无偿转让不缴增值税
  • 递延收益为什么是非流动负债
  • 个体工商户注销后的责任承担问题
  • 合伙企业发生亏损的原因
  • 人力资源代缴社保合法吗
  • 公司和员工之间
  • 以前年度费用未入账税务处理
  • 境外服务收入免税范围
  • 超市积分礼品
  • 承兑汇票漏章证明怎么写?
  • 偶然所得怎么缴纳个人所得税免税
  • 企业支出的辞退补偿金
  • 工伤保险公司缴纳部分为何是0
  • c++ 库文件
  • 单位支付安装天然气费
  • sbsetup.exe - sbsetup是什么进程 有什么用
  • pddpic是什么文件
  • php数组函数,选班长
  • 陶尔米纳电影节
  • php操作mysql数据库
  • php中类静态成员描述不正确的是
  • 公司给员工购买商业保险报销哪些
  • 开源项目排行榜
  • 永磁同步电机基础理论pdf
  • 股东分红会计分录案例
  • mongodb 教程
  • 织梦cms要钱吗
  • 营业外收入 销项税
  • 企业所得税成本费用一定要发票的吗
  • 个体对公账户是什么意思
  • 免税普票要交企业所得税吗
  • 建筑工程分包案例
  • 期权费的合理范围计算
  • 备案办税人员信息是谁
  • 年末结转步骤
  • 应付账款一直挂在账上会有问题吗
  • 建筑材料租赁公司
  • 外贸公司收取国家税费吗
  • 费用化资本化对税收的影响
  • 主营业务毛利率和毛利率
  • 总分类账的依据
  • mysql 5.6 从陌生到熟练之_数据库备份恢复的实现方法
  • 在sql查询中使用where子句指定的是
  • 64位Vista、Windows7系统IIS连接数据库故障完美解决
  • fedora os
  • switpa.exe - switpa是什么进程
  • windows7旗舰版开机声音
  • win7系统鼠标右键菜单设置
  • xp系统自动锁定
  • 防止非法使用计算机,可口令
  • win10系统中怎么打开IE浏览器
  • Win7如何开启蓝牙
  • 建立一个新用户并把它加入wheel组,设置用户密码为123
  • BootStrap glyphicons 字体图标实现方法
  • Nodejs+express+html5 实现拖拽上传
  • javascript提交数据
  • Fragment里onActivityResult()无回调的问题
  • 浏览器css3兼容
  • python web开发环境搭建
  • js的document.getelembyid
  • node 调用c
  • Python搭建HTTP服务器和FTP服务器
  • python中的\r
  • javascript第二章上机怎么写
  • 安卓自定义app
  • 广东省税务局官网 国家税务总局
  • 河南办税服务厅
  • 如何打印纳税申报表
  • 城市垃圾处理费会计分录
  • 捐赠纳税
  • 车船税属于地方固定收入吗
  • 环保税申报流程视频
  • 国税稽查局查账单凭个人流水能不能当做证据
  • 公民海外收入纳税
  • 湖南省株洲市税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设