问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

docker 镜像文件包含哪些数据

发布网友 发布时间:2022-04-23 09:03

我来回答

1个回答

热心网友 时间:2022-05-03 11:34

当想让一个容器做两件事情,或者使一个Docker镜像包含来自两个不同镜像的依赖库时,就需要知道每个镜像的Dockerfile。本文介绍了如何通过docker history命令来对Docker镜像进行反向工程,得到它们的Dockerfile,并组织到一个Dockerfile里然后build,从而实现想做的事情。

常言道,“不要重复发明轮子!”

在使用Docker时,构建自己的镜像之前,最好在Docker Hub寻找一些可以直接使用的镜像做练习。把软件架构分布到一系列容器中,每一个容器只做一件事情,这样的效果非常好。构建分布式应用的最好的基石是使用来自Docker Hub的官方镜像,因为可以信任它们的质量。

在某些情况下,可能想让一个容器做两件不同的事情。而在另外一些情况下,可能想让一个Docker镜像包含来自两个不同镜像的依赖库。如果有每个镜像的Dockerfile,这是非常简单的。将它们组织到一个Dockerfile里然后build就行。

然而,大多数时间都在使用Docker Hub上准备好的镜像,不会有它们的源Dockerfile。我花时间找一个可以合并(或flatten)两个不同Docker镜像的工具,当然没有它们的Dockerfile。也就是说在找一个能做下面这件事的东西:
image 1 --
\
---> merged_image_12
/
image 2 --

此前在GitHub上有两个相关的讨论(1、2),尽管它们都被关闭了。

这可能吗?
那么,是否存在工具能够像这样做吗:docker merge image2 image2 merged_image?

没有!
你甚至不可以用下面的方式来构建Dockerfile:
FROM image1
FROM image2

简而言之,在一个Dockerfile里不能有多个基础镜像。

但是我需要这个功能!
唯一的解决办法是取得这些镜像的Dockerfile,然后把它们组织到一个文件中,再进行构建。那么,我能在Docker Hub上获得一个镜像的Dockerfile吗? 幸运的是可以。它不能离线获取(译注:原文是online,但显然online时对于来自GitHub的自动构建镜像是可以直接获取的),但是你可以使用docker history命令,通过反向工程获取。

怎么来使用?
在你的机器上使用docker pull从Docker Hub下载镜像。
docker pull image1
docker pull image2

然后使用docker history来取得构建这两个容器时运行的命令。
docker history --no-trunc=true image > image1-dockerfile
docker history --no-trunc=true image2 > image2-dockerfile

接下来打开这两个文件,你可以看到每个镜像的命令堆栈。这是因为Docker镜像通过层(阅读更多)的方式来构建。即你在Dockerfile中键入的每一个命令所构建的新镜像,都是在之前的命令产生的镜像之上。所以你可以对镜像进行逆向工程。

*
不能对镜像进行反向工程的唯一场景,是镜像的维护者在他的Dockerfile中使用了ADD或COPY命令。你会看到这样一行:
ADD file:1ac56373f7983caf22
或 ADD dir:cf6fe659e9d21535844
这是因为不知道维护者在他自己的机器上,包括镜像里使用了什么本地文件。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
父母离异的话,会不会导致孩子心智不成熟? 过节 公司给我们发的购物卡 这个怎么做分录 属于福利费吗 需要计提吗... 乡村振兴公务员和省考公务员有什么区别 ...小时候跟着爷爷学国画书法,小受家是农村的,小受姓夏或叶,他带着他... 瑞麒X1安全装置 瑞麒X1的舒适型和豪华型有什么区别?配置有哪些不同的地方?这5000块多在... 瑞麒X1的安全性能方面配置如何? 脚崴了 有大量於血 怎么样才能快速消肿 脚崴了外侧出现瘀血浮肿怎么消除? ...换了我喜欢的发型,但是穿了件有点透明的衣服,可以看到肩_百度... 请问我从U盘下载下来的docker镜像tar文件怎么导入虚拟机内并使用? 花呗账单日和还款日? 怎么锁定后台应用程序? docker pull 是从哪里下载镜像的以及怎么样知道有哪些镜像可以拉? docker镜像导出 docker中下载的tomcat镜像文件和正常下载的tomcat有啥区别,在宿主机上的目录在哪里? 30除多少等于315等于多少小数百分之多少等于多少成等于多少折 博朗耳温枪6520温度转换 矢量化后,讲文件保存为SHP格式后,导入ARCMAP中,怎样能够定义坐标? 3.2x3/4等于几分之几? 微信公众平台 回复的内容 怎么查看 博朗耳温枪显示97.5 97.3怎么回事? 9.6/4等于5分之x怎么解? 微信聊天记录如何找回聊天记录 ArcGIS中如何快捷的将一千多个建筑物矢量化? 交易密码是银行卡密码吗 构建docker镜像,download依赖包存储问题? 微信加好友,她回复我的太长了,怎么看全部内容? docker 无法下载镜像? arcgis中关于怎么自动矢量化的问题 后台软件怎么锁住? redis docker 镜像怎么设置密码 手机后台应用怎么锁住 华为手机怎样锁定后台程序? 后台应用不想清理怎么上锁? 荣耀50怎么锁定后台应用? 如何使后台程序不自动关闭? 花呗9号还款日 我今天提前还了 明天在用是不是也是算9号要还清?还是算下个月9号? 酱焖茄子(独家)的做法步骤图,怎么做好吃 酱焖茄子怎么做如何做好吃 花呗还款日是9号 我在那之前就已经还清了 问一下9号那天花呗还能用吗 用了是什么时候还款 酱焖茄子的做法 酱焖茄子怎么做? 焖茄子的做法步骤图,酱焖茄子怎么做好吃 东北酱焖茄子的做法 怎么做好吃,酱焖蓑衣茄子的家常做法 酱焖茄子怎么做呢? 不会改变 歌词 谢天笑的《不会改变》这首歌是写给谁的? 一件事情己经定了不会改变了用什么样成语来形容