2017-02-01 4 views
3

docker historyの出力をよりよく理解しようとしています。 3の顕著な例外ドッカーの歴史ベースイメージ追加:sha256hash

  1. ラインの全てがDockerfileでRUNコマンドである第三行以外/bin/sh -C#(nop)で始まると

    /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 "[email protected]" 
    /bin/sh -C#(nop) CMD ["/bin/bash"] 
    /bin/sh -C#(nop) ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in/
    

    :私はdocker history nginx:latestを実行すると、私はほぼDockerfileに一致する出力を得ます - 大したことなし

  2. コマンドは逆です(Dockerfileの最後のコマンドはdocker historyの最初のコマンドです) - 大したこともありません。
  3. この1つはキッカーだ - DockerfileからFROM debian:jessieラインはに翻訳されています

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

それはその最後の二つのコマンド(ADDCMD ["/bin/bash"]上に実現するために私に少し時間がかかりましたライン)はベース画像debian:jessieから引き継がれました。私はそれを考え出したら、私は自分自身に考えた、「自己、file:89ec...da957は、ファイルシステムとして含まrootfs.tar.xzのSHA256ハッシュでなければなりません。しかし、いや、rootfs.tar.xzのSHA256ハッシュが467328e24c316fd058f086eb8eb77706f3f448ad8886d202e7c9687d30692ecaです。

ここで私の質問はある:docker historyに記載されているハッシュから来たんそして、なぜそれがrootfs.tar.xzの実際のハッシュと異なる

私は運で、ドッカーのマニュアルの多くを徹底的に見直しました?以下を含む:

  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"] 

誰でもいくつかを提供することができれば私がまだ見つけていないリソースを指摘すれば、それは非常に高く評価されます。

答えて

1

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にあるすべてのファイルを追加します。

(注:「Docker missing layer IDs in output」には(nop)部分が記載されています)