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

  • 寻找一双合适的鞋(寻找一双合适的鞋子英文)

    寻找一双合适的鞋(寻找一双合适的鞋子英文)

  • 采样码在哪里查询(采样码怎么获取)

    采样码在哪里查询(采样码怎么获取)

  • realme gt neo2语音助手怎么唤醒小布(realmegtneo语音唤醒)

    realme gt neo2语音助手怎么唤醒小布(realmegtneo语音唤醒)

  • steam手机版怎么下载(steam手机版怎么注册)

    steam手机版怎么下载(steam手机版怎么注册)

  • 华为nova3手机壳3i能用吗(华为nova3手机壳和哪个通用)

    华为nova3手机壳3i能用吗(华为nova3手机壳和哪个通用)

  • 拼多多评论后不显示(拼多多评论不可以删除吗)

    拼多多评论后不显示(拼多多评论不可以删除吗)

  • iphone6splus卡顿严重(iphone6plus很卡)

    iphone6splus卡顿严重(iphone6plus很卡)

  • 苹果手机时间慢了2分钟(苹果手机时间慢几秒怎么办)

    苹果手机时间慢了2分钟(苹果手机时间慢几秒怎么办)

  • tplink恢复出厂后没网(tplink恢复出厂设置后怎么办)

    tplink恢复出厂后没网(tplink恢复出厂设置后怎么办)

  • 华为无线耳机freebuds3充电要多久(华为无线耳机freebuds4e)

    华为无线耳机freebuds3充电要多久(华为无线耳机freebuds4e)

  • pci简易通讯控制器是什么驱动(pci简易通讯控制器驱动怎么安装)

    pci简易通讯控制器是什么驱动(pci简易通讯控制器驱动怎么安装)

  • 打开cad图纸上的文字不显示怎么办(打开cad图纸上的坐标和坐标不对)

    打开cad图纸上的文字不显示怎么办(打开cad图纸上的坐标和坐标不对)

  • 8摄像头和电筒打不开(前后摄像头和手电筒一起坏了排线)

    8摄像头和电筒打不开(前后摄像头和手电筒一起坏了排线)

  • 手机看电视剧为什么会黑屏(手机看电视剧为什么不能投屏)

    手机看电视剧为什么会黑屏(手机看电视剧为什么不能投屏)

  • 苹果激活不了什么原因(苹果激活不了怎么办?)

    苹果激活不了什么原因(苹果激活不了怎么办?)

  • 苹果平板可以插卡吗(苹果平板可以插卡的是什么型号)

    苹果平板可以插卡吗(苹果平板可以插卡的是什么型号)

  • 电脑没有主机怎么开机(电脑没有主机怎么连接wifi)

    电脑没有主机怎么开机(电脑没有主机怎么连接wifi)

  • 支付宝好友怎么看电话号码(支付宝好友怎么查看对方账号)

    支付宝好友怎么看电话号码(支付宝好友怎么查看对方账号)

  • 计算机存储器分为(计算机存储器分成内存和外存)

    计算机存储器分为(计算机存储器分成内存和外存)

  • 华为分辨率怎么调清晰(华为分辨率怎么调整不了笔记本)

    华为分辨率怎么调清晰(华为分辨率怎么调整不了笔记本)

  • 微信视频怎么录屏(微信视频怎么录屏才会有声音)

    微信视频怎么录屏(微信视频怎么录屏才会有声音)

  • 惠普126nw和132nw区别(惠普126nw和132nw和132snw)

    惠普126nw和132nw区别(惠普126nw和132nw和132snw)

  • 陌陌怎么不能视频聊天了(陌陌怎么不能视频显示时间太短)

    陌陌怎么不能视频聊天了(陌陌怎么不能视频显示时间太短)

  • 陌陌载入失败请稍后再试(陌陌载入失败请重新登录)

    陌陌载入失败请稍后再试(陌陌载入失败请重新登录)

  • linux系统配置vsftpd服务后启动失败该怎么办?(linux系统配置ip地址命令)

    linux系统配置vsftpd服务后启动失败该怎么办?(linux系统配置ip地址命令)

  • 增值税发票综合服务平台怎么下载
  • 暂估入库后怎么冲回
  • 物流进项税
  • 国外公司税号查询
  • 低值易耗品定义出处
  • 五险一金账务处理流程图
  • 公司银行社保代缴怎么交
  • 材料入库时实收什么意思
  • 软件 企业
  • 增值税专用发票和普通发票的区别
  • 物业管理提供的服务变化
  • 环保税和环境税一样吗
  • 税收滞纳金可以税前扣除吗
  • 苹果笔记本如何切换输入法
  • 出纳现金管理的目标与方法
  • 固定资产包括哪些种类
  • 基本户是否可以冻结
  • 长期借款利息如何做账
  • linux中链接
  • win7开机拨号取消
  • win11电脑屏幕倒过来了怎么办
  • 错账的种类
  • 劳务报酬所得缴纳时间
  • 取得短期借款会计科目
  • PHP:mcrypt_module_open()的用法_Mcrypt函数
  • 应收票据影响现金流吗
  • 在php中使用mysql
  • 开具负数发票的流程
  • python编程100例
  • 命令启动服务管理
  • 帝国cms手机模板是什么
  • 银行的抵债资产会过到银行名下吗
  • 契税属于哪种说法
  • 加油站的卷式发票能抵扣吗
  • 设计服务的成本票可以暂估吗
  • 购买保健食品
  • 数字黑洞有哪些
  • 应交税费需要结转到本年利润吗
  • 酒店维修费是计入销售成本吗
  • 开具免税的发票,"税率"栏该如何填开?
  • 企业按行业划分可划分为哪些
  • Mysql以utf8存储gbk输出的实现方法提供
  • 上期留底增值税什么意思
  • 盈余公积提取多了
  • 免税农产品怎么开发票
  • 小规模纳税人公转私技巧
  • 无发票材料可以入材料账吗
  • 员工还款还公司会计分录
  • 单位购买防疫物资请示
  • 担保公司预计负债
  • 卡巴斯基反病毒软件
  • ubuntu x
  • macos怎么使用
  • linux常用基本命令pwd
  • windows server 2008 r2激活密钥
  • windows10周年更新
  • linux系统中的一切都归结为
  • svchost进程可以结束吗
  • linux操作系统主要学什么
  • 电脑开机蓝屏怎么解决xp系统
  • ubuntu系统键盘无用
  • win10系统怎么打开软键盘
  • Linux中怎么安装nano已经有安装包了
  • win7怎么设置局域网共享文件和操作
  • win8无法安装inter显卡驱动
  • windows应用图标
  • cocos2dx场景切换
  • 用jquery制作网页
  • CocoStudio textfiled 文本点击区域按背景拉伸
  • 菜鸟app兼职
  • python生成器有几种写法
  • 基于jQuery实现Tabs选项卡自定义插件
  • 获取标签的属性值的方式
  • javascript总结笔记
  • javascript编程软件
  • jquery实现下拉框
  • js类的定义方法
  • json遍历对象集合
  • 车辆购置税去哪个税务局交
  • 银行最新税率
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设