web-dev-qa-db-ja.com

各Dockerイメージのレイヤーとレイヤーサイズを見つける

研究目的のために、私は公開Dockerレジストリ( https://registry.hub.docker.com/ )をクロールし、1)平均画像にいくつのレイヤーがあり、2)分布のアイデアを得るために、これらのレイヤーのサイズ。

ただし、APIとパブリックライブラリ、およびgithubの詳細を調べましたが、次の方法は見つかりません。

  • すべてのパブリックリポジトリ/イメージを取得します(それらが数千であっても、繰り返し処理するために開始リストが必要です)
  • 画像のすべてのレイヤーを見つける
  • レイヤーのサイズを見つけます(画像ではなく、個々のレイヤーのサイズです)。

この情報を取得する方法を見つけるのを手伝ってくれる人はいますか?

ありがとうございました!

編集:誰でもDockerレジストリで「*」を検索すると、「*」に言及するものだけでなく、すべてのリポジトリが返されることを確認できますか? https://registry.hub.docker.com/search?q=*

69
user134589

フォルダー/ var/lib/docker/aufs/layersで画像のレイヤーを見つけることができます。 aufsとしてstorage-driverを設定した場合に提供します(デフォルトオプション)

例:

 docker ps -a
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
 0ca502fa6aae        ubuntu              "/bin/bash"         44 minutes ago      Exited (0) 44 seconds ago                       DockerTest

次に、「Ubuntu」というイメージで作成されたコンテナのレイヤーを表示します。/var/lib/docker/aufs/layersディレクトリに移動し、catがコンテナIDで始まるcat(ここでは0ca502fa6aae *)

 root@viswesn-vm2:/var/lib/docker/aufs/layers# cat    0ca502fa6aaefc89f690736609b54b2f0fdebfe8452902ca383020e3b0d266f9-init 
 d2a0ecffe6fa4ef3de9646a75cc629bbd9da7eead7f767cb810f9808d6b3ecb6
 29460ac934423a55802fcad24856827050697b4a9f33550bd93c82762fb6db8f
 b670fb0c7ecd3d2c401fbfd1fa4d7a872fbada0a4b8c2516d0be18911c6b25d6
 83e4dde6b9cfddf46b75a07ec8d65ad87a748b98cf27de7d5b3298c1f3455ae4

これにより、同じ結果が表示されます

root@viswesn-vm2:/var/lib/docker/aufs/layers# docker history ubuntu
IMAGE               CREATED             CREATED BY                                         SIZE                COMMENT
d2a0ecffe6fa        13 days ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                 
29460ac93442        13 days ago         /bin/sh -c sed -i 's/^#\s*\   (deb.*universe\)$/   1.895 kB            
b670fb0c7ecd        13 days ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB            
83e4dde6b9cf        13 days ago         /bin/sh -c #(nop) ADD file:c8f078961a543cdefa   188.2 MB 

完全なレイヤーIDを表示するには; historyコマンドの一部として--no-truncオプションを使用して実行します。

docker history --no-trunc ubuntu
64
Viswesn

Dockerイメージのレイヤーを表示 に関する良い記事を次に示します。

最初に画像IDを見つけることができます:

$ docker images -a

次に、そのレイヤーとサイズを見つけます。

$ docker history --no-trunc <Image ID>

注:Dockerバージョン1.13.1を使用しています

$ docker -v
Docker version 1.13.1, build 092cba3
24
Yuci

私の意見では、docker history <image>で十分です。これは、各レイヤーのサイズを返します。

$ docker history jenkinsci-jnlp-slave:2019-1-9c
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
93f48953d298        42 minutes ago      /bin/sh -c #(nop)  USER jenkins                 0B
6305b07d4650        42 minutes ago      /bin/sh -c chown jenkins:jenkins -R /home/je…   1.45GB

私を驚かせたのは、所有者を変更するだけで巨大な塊が作成されたことです。

10
030

ここには非常に良い答えがあります: https://stackoverflow.com/a/32455275/165865

以下の画像を実行してください:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nate/dockviz images -t
10
sunnycmf

これにより、Dockerイメージが検査され、レイヤーが印刷されます。

$ docker image inspect nginx -f '{{.RootFS.Layers}}'
[sha256:d626a8ad97a1f9c1f2c4db3814751ada64f60aed927764a3f994fcd88363b659 sha256:82b81d779f8352b20e52295afc6d0eab7e61c0ec7af96d85b8cda7800285d97d sha256:7ab428981537aa7d0c79bc1acbf208c71e57d9678f7deca4267cc03fba26b9c8]
6
lvthillo

dive golangで書かれたチェックアウト。

素晴らしいツール。

ソースコードを調整して、表示されるすべての情報をjsonファイルにエクスポートすることができます。

3
Levon
  1. https://hub.docker.com/search?q=* はDockerハブ全体のすべての画像を表示します。ワイルドカードを受け入れないため、検索コマンドで取得することはできません。

  2. V1.10の時点では、イメージを引き出して次のコマンドを使用することで、イメージ内のすべてのレイヤーを見つけることができます。

    docker pull ubuntu
    ID=$(Sudo docker inspect -f {{.Id}} ubuntu)
    jq .rootfs.diff_ids /var/lib/docker/image/aufs/imagedb/content/$(echo $ID|tr ':' '/')
    

3)サイズは/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/sizeにありますが、LAYERID!=は前のコマンドで見つかったdiff_idsです。このためには、/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diffを見て、前のコマンド出力と比較して、正しいdiff_idとサイズを適切に一致させる必要があります。

2
Piet

もう1つのツール: https://github.com/CenturyLinkLabs/dockerfile-from-image

ImageLayers.ioを使用したGUI

1
resultsway