作者:我是曰照人_692 | 来源:互联网 | 2023-02-13 12:52
我试图更好地理解docker history
输出。当我运行时,docker history nginx:latest
我得到的输出几乎与Dockerfile相匹配:
/bin/sh -c #(nop) CMD ["nginx" "-g" "daemon off;"]
/bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp/bin/sh -c ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
/bin/sh -c apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list && apt-get update && apt-get install --no-install-recommends --no-install-suggests -y ca-certificates nginx=${NGINX_VERSION} nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-perl nginx-module-njs gettext-base && rm -rf /var/lib/apt/lists/*
/bin/sh -c #(nop) ENV NGINX_VERSION=1.11.9-1~jessie
/bin/sh -c #(nop) MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
/bin/sh -c #(nop) CMD ["/bin/bash"]
/bin/sh -c #(nop) ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /
除了三个值得注意的例外
/bin/sh -c #(nop)
除了第三行是RUN
Dockerfile中的命令外,所有行均以开头-没什么大不了的
这些命令是相反的(Dockerfile中的最后一个命令是列出的第一个命令docker history
)-也没什么大不了的
这是一个FROM debian:jessie
关键-Dockerfile中的代码行转换为:
ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /
CMD ["/bin/bash"]
我花了一点时间才意识到上面的最后两个命令(ADD
和CMD ["/bin/bash"]
行)是从基本映像中继承来的debian:jessie
。一旦我说出来,我心想,“自我,file:89ec...da957
必须的SHA256哈希rootfs.tar.xz包括作为文件系统。不过没有关系,该rootfs.tar.xz的SHA256哈希值467328e24c316fd058f086eb8eb77706f3f448ad8886d202e7c9687d30692eca
。
我的问题就在这里:列出的哈希值docker history
从何而来?为何它与rootfs.tar.xz的实际哈希不同?
我已经彻底回顾了很多Docker文档,但运气不佳,包括:
https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/
https://docs.docker.com/engine/reference/commandline/history/
https://docs.docker.com/engine/reference/builder/
在debian:jessie
用作基础图像的所有图像上,哈希值是一致的。甚至docker history debian:jessie
显示相同的哈希值:
/bin/sh -c #(nop) CMD ["/bin/bash"]
/bin/sh -c #(nop) ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /
我想您可能会同意,debian:jessie
Dockerfile中只有一个文件可能包含哈希:
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/bash"]
如果有人可以提供一些见解或将我指向尚未找到的资源,将不胜感激。