热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

构建并推送多拱形泊坞窗图像

如何解决《构建并推送多拱形泊坞窗图像》经验,为你挑选了1个好方法。

我正在尝试根据在postgresRaspbian和Mac OS X/Debian 上运行的官方图像制作自定义图像.

当我做的时候

from postgres:10.4 并且构建了Dockerfile,似乎docker隐式选择了postgres的x64版本,然后只根据该架构构建了一个新的图像.

因此,当我将图像推送到我的GitLab注册表并再次下载时,它不起作用.它抛出一个standard_init_linux.go:190: exec user process caused "exec format error",我认为这是另一种说错建筑的方式.

我可以通过https://blog.docker.com/2017/09/docker-official-images-now-multi-platform/收集,在一个图像中支持多个架构,使其成为"多拱".然而,尽管资源很多,但对于我如何构建自己的多拱形图像以及需求是什么并不明显.

理想情况下,我希望能够无缝地构建和推送armv7和x64版本 - 来自Raspberry Pi/Raspbian主机和Mac/Debian主机.

我发现了这个问题:交叉编译多拱容器

其中一个答案表明了一个过程.但是,该进程不支持使用该RUN命令的dockerfiles ,这是我的项目的要求.



1> BMitch..:

您将需要为特定体系结构构建每个映像,然后生成清单,其中是每个映像的列表。第二部分的命令目前处于试验阶段。该文件显示了这个例子(尽管多数人倾向于把建筑的标签名称,例如myrepo/myapp:arm-linux-v1):

$ docker manifest create 45.55.81.106:5000/coolapp:v1 \
    45.55.81.106:5000/coolapp-ppc64le-linux:v1 \
    45.55.81.106:5000/coolapp-arm-linux:v1 \
    45.55.81.106:5000/coolapp-amd64-linux:v1 \
    45.55.81.106:5000/coolapp-amd64-windows:v1
Created manifest list 45.55.81.106:5000/coolapp:v1

$ docker manifest annotate 45.55.81.106:5000/coolapp:v1 45.55.81.106:5000/coolapp-arm-linux --arch arm

$ docker manifest push 45.55.81.106:5000/coolapp:v1
Pushed manifest 45.55.81.106:5000/coolapp@sha256:9701edc932223a66e49dd6c894a11db8c2cf4eccd1414f1ec105a623bf16b426 with digest: sha256:f67dcc5fc786f04f0743abfe0ee5dae9bd8caf8efa6c8144f7f2a43889dc513b
Pushed manifest 45.55.81.106:5000/coolapp@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f with digest: sha256:b64ca0b60356a30971f098c92200b1271257f100a55b351e6bbe985638352f3a
Pushed manifest 45.55.81.106:5000/coolapp@sha256:39dc41c658cf25f33681a41310372f02728925a54aac3598310bfb1770615fc9 with digest: sha256:df436846483aff62bad830b730a0d3b77731bcf98ba5e470a8bbb8e9e346e4e8
Pushed manifest 45.55.81.106:5000/coolapp@sha256:f91b1145cd4ac800b28122313ae9e88ac340bb3f1e3a4cd3e59a3648650f3275 with digest: sha256:5bb8e50aa2edd408bdf3ddf61efb7338ff34a07b762992c9432f1c02fc0e5e62
sha256:050b213d49d7673ba35014f21454c573dcbec75254a08f4a7c34f66a47c06aba

要为Docker客户端配置实验功能,可以在本地设置以下内容$HOME/.docker/config.json

{
   "auths": { ... },
   "experimental": "enabled"
}

请注意,在上文中,如果您执行了docker登录,则auths部分可能已经配置。除了在右括号后添加逗号外,您应保持该部分不变。如果没有auths部分,则从文件中排除该行。


但是,该过程将不支持使用RUN命令使用dockerfiles,这是我的项目的要求。

您可以下载用于不同体系结构的映像,但无法从错误的体系结构运行这些映像。该RUN命令在构建过程中产生一个临时容器以运行所请求的命令,而该命令将根本无法工作。我知道为另一个体系结构提取映像的唯一原因是将该映像中继到可以使用它们的另一个位置(专用注册表或export + scp),或用于构建多体系结构清单,如您在上面看到的。


这里的重点是在单个主机上构建多个体系结构。我已经看到了使用QEMU实现此目的的博客文章,但是对于每种体系结构,它们都使用不同的基本图像。当基本映像已经是多体系结构映像时,尚不清楚如何执行此操作。

如果您可以不使用任何RUN步骤构建映像,对映像之外的任何二进制文件使用交叉编译器并且仅执行COPY将文件添加到新映像中的步骤,则可以在单个主机上创建所有内容。当上游映像是多体系结构时,您需要更深入地挖掘并找到特定于平台的标签以用于上游映像。有几种选择。困难的选择是检查多体系结构标记的清单以查看特定摘要:

$ docker manifest inspect busybox
{                    
   "schemaVersion": 2,                                                                       
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [                     
      {                  
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 527,
         "digest": "sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510",
         "platform": {                                                       
            "architecture": "amd64",
            "os": "linux"                                                                    
         }            
      },                            
      {                  
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 527,
         "digest": "sha256:3d1b11fb001ece2e99556690ce064b07851649582b1f0907649c21e65ba4298f",
         "platform": {
            "architecture": "arm",                                                                                                           
            "os": "linux",                                                                           
            "variant": "v5"
         }                                                                     
      },
...

然后,您可以使用特定的摘要标签,例如busybox@sha256:3d1b11fb001ece2e99556690ce064b07851649582b1f0907649c21e65ba4298f。要以编程方式进行更多操作,可以使用以下命令解析输出jq

docker manifest inspect busybox | \
  jq '.manifests | .[] | select(.platform.architecture == "arm64") | .digest'

但是,大多数多体系结构映像都包含用于单个体系结构的标签。因此,您将选择该特定标签而不是多体系结构标签。对于官方映像,docker当前在其官方映像repo中记录了特定于体系结构的存储库。


推荐阅读
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • mysql自动打开文件_让docker中的mysql启动时自动执行sql文件
    本文提要本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动My ... [详细]
author-avatar
Mr_维力_811
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有