Docker 历史基础图像 Add:sha256hash
Docker History Base Image Add:sha256hash
我正在尝试更好地理解 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)
开头,除了第三行是 Docker 文件中的 RUN
命令 - 没什么大不了的
- 命令是相反的(Docker文件中的最后一个命令是
docker history
列出的第一个命令)——也没什么大不了的
这是关键 - Docker 文件中的 FROM debian:jessie
行被翻译成:
ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /
CMD ["/bin/bash"]
我花了一点时间才意识到上面的最后两个命令(ADD
和 CMD ["/bin/bash"]
行)是从基本映像 debian:jessie
继承而来的。一旦我明白了这一点,我心想,“自己,file:89ec...da957
必须是作为文件系统包含的 rootfs.tar.xz 的 sha256 哈希。但是不,[=75= 的 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
Docker 文件中只有一个文件可能有散列:
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/bash"]
如果有人能提供一些见解或指出我尚未找到的资源,我们将不胜感激。
docker brew debian image is made of intermediate containers, as described in "Understand images, containers, and storage drivers".
参见issue 25925:每个层存储在(例如)/var/lib/docker/aufs/mnt/
。
因此 ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95
将添加在 /var/lib/docker/aufs/mnt/89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95
中找到的所有文件。
(注:我在“Docker missing layer IDs in output”中提到了(nop)
部分)
我正在尝试更好地理解 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)
开头,除了第三行是 Docker 文件中的RUN
命令 - 没什么大不了的 - 命令是相反的(Docker文件中的最后一个命令是
docker history
列出的第一个命令)——也没什么大不了的 这是关键 - Docker 文件中的
FROM debian:jessie
行被翻译成:ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /
CMD ["/bin/bash"]
我花了一点时间才意识到上面的最后两个命令(ADD
和 CMD ["/bin/bash"]
行)是从基本映像 debian:jessie
继承而来的。一旦我明白了这一点,我心想,“自己,file:89ec...da957
必须是作为文件系统包含的 rootfs.tar.xz 的 sha256 哈希。但是不,[=75= 的 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
Docker 文件中只有一个文件可能有散列:
FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/bash"]
如果有人能提供一些见解或指出我尚未找到的资源,我们将不胜感激。
docker brew debian image is made of intermediate containers, as described in "Understand images, containers, and storage drivers".
参见issue 25925:每个层存储在(例如)/var/lib/docker/aufs/mnt/
。
因此 ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95
将添加在 /var/lib/docker/aufs/mnt/89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95
中找到的所有文件。
(注:我在“Docker missing layer IDs in output”中提到了(nop)
部分)