我正在尝试编写一个程序,以确保容器的父(或祖父母或曾祖父母等)是已批准的容器列表中的容器。(以确保我的公司仅使用经批准的容器。)
当我在我的图像上运行命令docker image inspect
时,我得到一些json响应。json的一部分如下所示:
"RootFS": { "Type": "layers", "Layers": [ "sha256:cb42413394c4059335228c137fe884ff3ab8946a014014309676c25e3ac86864", "sha256:800afb4d883be4a1552b6afb33602caf7c69d5d9caa929aa961e74dd4df1f7fa", "sha256:6db0849b3e99f6471e878c20fdc1449623a5374d563f8463a791533f80f0387b", "sha256:f3bc884425c59baed7a7487a156c18d091ee1b567ab2bb9d286f110d31abb020", "sha256:139aa1a59c8a79c06c61077a51f83793e977bc818875d70ad1cfe7ce9e96cecd", "sha256:093496e1b286284fe6158c87e50aff6a905b809ee5f76d9c1897945fc53fd84c", "sha256:86248bc7c05ebaee4860efed18d1f6225909bbc03eccedd36ea4a154275540e1", "sha256:fe5e09df9bed600922ead78527eb7ff8a6b241dcee185aaa1213942b484cb769", "sha256:8b9bd48d3c62d7ddac27dfcc2c3c0cded5ef8ee530118b9212c8f4b8fd2e6faf", "sha256:4466146b6e2c6e31ffc6bf194ad75758e641e4f99dc6020b67d37024d9f99a98", "sha256:68f8345afd825ee2a0b675b5e93eb7b5504ad71a77136ba2014bd876e3ddbe68", "sha256:49a130b8b29dc6ac46c23bee6ffea315fe4b8ce4f621926834ad5e4fe7694a00", "sha256:bd13a0d30d036bbbd17d539310d0f821405c882419db56884a9562aa6d538975", "sha256:68f4281d14f5e70fc4a558fd4e3affcef4185d3fde53cd758cf46070327bbb06", "sha256:4410271de2fbbc8c72d545dfe212c29b83dc9e94e53a101e92526bdfcc566070", "sha256:5df5ddaa2216e7fa23096d325a984ca5993b6b04100850202a51abdac543f324", "sha256:a938e714d49d5122040f6af3dffc68efb1e9f19167e0982d4e1d2f5932166bec", "sha256:6e835bd4ceec7cc3b858dbbb61c32f08e27d3171428c76806bfab53616be1bad" ] },
我以为这些就是我容器图像的层次。但该列表不包含容器映像的父级。所谓父级,我指的是在FROM
子句中用于创建我检查过的图像的容器图像。)(我使用docker image ls--digests
命令进行了检查。)
这些价值观是什么?
更重要的是,有没有办法获得容器实际层的列表?
也许潜水可以帮你。这是一个探索docker图像、图层内容等的工具。
除了TUI,您还可以在json文件中获得输出:
dive <your_image> --json <output_filename>
更新:另一种(更简单的)方法是使用docker历史记录
$ docker history docker.elastic.co/elasticsearch/elasticsearch:6.3.2 16:32:47
IMAGE CREATED CREATED BY SIZE COMMENT
96dd1575de0f 2 years ago /bin/sh -c #(nop) CMD ["eswrapper"] 0B
<missing> 2 years ago /bin/sh -c #(nop) ENTRYPOINT ["/usr/local/b… 0B
<missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 years ago /bin/sh -c #(nop) EXPOSE 9200 9300 0B
<missing> 2 years ago /bin/sh -c chgrp 0 /usr/local/bin/docker-ent… 4.95kB
<missing> 2 years ago /bin/sh -c #(nop) COPY --chown=1000:0file:73… 4.26kB
<missing> 2 years ago /bin/sh -c #(nop) ENV PATH=/usr/share/elast… 0B
<missing> 2 years ago /bin/sh -c #(nop) COPY --chown=1000:0dir:003… 217MB
<missing> 2 years ago /bin/sh -c #(nop) WORKDIR /usr/share/elastic… 0B
<missing> 2 years ago /bin/sh -c groupadd -g 1000 elasticsearch &&… 296kB
<missing> 2 years ago /bin/sh -c yum update -y && yum install … 65.3MB
<missing> 2 years ago /bin/sh -c ln -sf /etc/pki/ca-trust/extracte… 40B
<missing> 2 years ago /bin/sh -c #(nop) ENV JAVA_HOME=/opt/jdk-10… 0B
<missing> 2 years ago /bin/sh -c curl -s https://download.java.net… 343MB
<missing> 2 years ago /bin/sh -c #(nop) ENV ELASTIC_CONTAINER=true 0B
<missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 years ago /bin/sh -c #(nop) ADD file:8f4b3be0c1427b158… 200MB
我是Docker的新手,正在尝试准确理解Docker映像是什么。Docker映像的每个定义都使用术语“层”,但似乎没有定义层的含义。 从Docker官方文件: 我们已经看到Docker图像是只读模板,从中启动Docker容器。每个图像由一系列层组成。Docker利用union文件系统将这些层合并到单个图像中。Union文件系统允许透明地覆盖单独文件系统(称为分支)的文件和目录,形成单个连贯的文件系
我对Docker是全新的,我正在努力理解Docker形象到底是什么。Docker图像的每个定义都使用术语“层”,但似乎没有定义层的含义。
在这种情况下,这些rest层ID是否与其他一些图像相对应呢?如果是真的,我可以视图层为图像吗?
然而,我研究了API和公共库以及github的细节,但我找不到任何方法来: 检索所有公共存储库/映像(即使有数千个,我仍然需要一个开始列表来迭代) 查找图像的所有层 查找层的大小(因此不是图像,而是单个层的大小)。 谁能帮我找到检索这些信息的方法吗?
让我们以whalesay图片为例<代码>docker history显示以下内容: 我想提取显示为的层。有这样做的工具/方法吗?
根据反馈更新 对于等于或高于17.03的Docker版本,如何查看图像的图层?虽然我为早期的Docker系统找到了大量的解决方案(见这个问题),但现在还能这样做吗? 我特别感兴趣的是能够一次删除一层。我记得很久以前读过这篇文章(在Docker时代,大约12-18个月!)然而,我丢失了那个参考资料,在网上的任何地方都找不到。我从下面的第一个答案中了解到,中间层不再下载并报告丢失,但如果我下载了整个图