簡體   English   中英

Docker 歷史基礎鏡像添加: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 /

除了三個值得注意的例外

  1. 所有行都以/bin/sh -c #(nop)開頭,除了第三行是 Dockerfile 中的RUN命令 - 沒什么大不了的
  2. 該命令是反向(在Dockerfile最后一個命令是列出的第一個命令docker history ) -也沒什么大不了的
  3. 這是最重要的 - Dockerfile 中的FROM debian:jessie行被轉換為:

    ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in / CMD ["/bin/bash"]

我花了一點時間才意識到上面的最后兩個命令( ADDCMD ["/bin/bash"]行)是從基礎映像debian:jessie繼承而來的。 一旦我想通了這一點,我就對自己想,“我自己, file:89ec...da957必須是作為文件系統包含的rootfs.tar.xz的 sha256 哈希值。但不,是 rootfs 的 sha256 哈希值。 tar.xz 是467328e24c316fd058f086eb8eb77706f3f448ad8886d202e7c9687d30692eca

這就是我的問題: docker history列出的哈希來自哪里? 為什么它與 rootfs.tar.xz 的實際散列不同?

我已經徹底查看了 Docker 的大部分文檔,但運氣不佳,包括:

  1. https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/
  2. https://docs.docker.com/engine/reference/commandline/history/
  3. 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"]

如果有人能提供一些見解或指向我尚未找到的資源,將不勝感激。

docker brew debian 映像由中間容器組成,如“ 了解映像、容器和存儲驅動程序”中所述。

https://docs.docker.com/engine/userguide/storagedriver/images/image-layers.jpg

請參閱問題 25925 :每個層都存儲在(例如) /var/lib/docker/aufs/mnt/

因此, ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95將添加的所有文件中找到的/var/lib/docker/aufs/mnt/89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95

(注意:我在“輸出中的 Docker 缺少層 ID ”中提到了(nop)部分)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM