代码之家  ›  专栏  ›  技术社区  ›  rabidang3ls

Docker历史库图像添加:sha256hash

  •  8
  • rabidang3ls  · 技术社区  · 8 年前

    我正试图更好地理解 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) 除了第三行,它是 RUN Dockerfile中的命令-没什么大不了的
    2. 命令的顺序相反(Dockerfile中的最后一个命令是 码头工人历史 )-也没什么大不了的
    3. 这一个是踢球者 FROM debian:jessie Dockerfile中的行被转换为:

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

    我花了一段时间才意识到上面的最后两个命令( ADD CMD[“/bin/bash”] 线)从基础图像中带入 debian:jessie 一旦我明白了这一点,我对自己说,“赛尔夫 file:89ec...da957 必须是 rootfs.tar.xz 包括作为文件系统。但不是,rootfs.tar的sha256散列。xz是 467328e24c316fd058f086eb8eb77706f3f448ad8886d202e7c9687d30692eca .

    我的问题是: 中列出的散列在哪里 码头工人历史 来自为什么它与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:杰西 作为基础图像。即使 docker history debian:jessie 显示相同的哈希:

    /bin/sh -c #(nop) CMD ["/bin/bash"]
    /bin/sh -c #(nop) ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /
    

    我想你可能会同意,只有一个文件可能在 debian:杰西 Dockerfile:

    FROM scratch
    ADD rootfs.tar.xz /
    CMD ["/bin/bash"]
    

    如果有人能提供一些见解或给我指出我尚未找到的资源,我将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Community CDub    8 年前

    这个 docker brew debian image 由中间容器制成,如 Understand images, containers, and storage drivers ".

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

    看见 issue 25925 :存储在中的每个层(例如) /var/lib/docker/aufs/mnt/ .

    所以 ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95 将添加在中找到的所有文件 /var/lib/docker/aufs/mnt/89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95 .

    (注:我提到 (nop) 参与 Docker missing layer IDs in output ")