docker historyコマンドの使い方(実例で解説)

Docker
Docker公式ロゴ3a
©2020 Docker Inc. All rights reserved

 本記事はDocker ver19.03.10の環境で確認しています。

 このコマンドは、指定したDockerイメージのイメージレイヤの履歴情報を参照することができます。

 Dockerイメージは、1つ以上のイメージレイヤから構成されてまして、その情報を参照することで、そのDockerイメージの各レイヤがどのように構築されているが分かります。

 尚、イメージレイヤに関しましては、別記事「Dockerイメージに関するもう少し詳しい説明」で解説しておりますので、宜しかったらご利用ください。

docker historyコマンドのフォーマットとオプション

フォーマット

docker history [オプション] [ Dockerイメージ名 | DockerイメージID ]

主なオプション一覧

オプション概説
-H, --human=true | falseサイズと日付の表示を人間に読みやすい
形式で出力するか否かの指定
デフォルトは--human=true
--no-trunc=true | false出力内容の切り捨てを行うか否かの指定
デフォルトはfalse(切り捨てを行う)
-q, --quietイメージレイヤのIDのみ出力する

コマンド例

$ docker history ubuntu

docker historyコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

実例では、Ubuntuの公式イメージにより起動したコンテナ(testvm)を使用します。

コンテナは「docker run -dit --init --name testvm ubuntu」で起動します。

※「--rm」オプションを付けておりませんので、ご利用後はコンテナ削除をお忘れなく。

基本事項の解説

 docker historyコマンドは、Dockerイメージの各レイヤの情報を出力することができます。

 Dockerイメージの各々のレイヤをどのようにして作ったのかが分かります。

 自作のDockerイメージの内容を確認したり、他人が作成したDockerイメージの作り方を参考にしたりすることもできるでしょう。

Dockerイメージのイメージレイヤのサマリー情報を出力する

 Ubuntuの公式Dockerイメージのレイヤ情報をのぞいてみましょう。

 Dockerホスト内に以下のDockerイメージがあります。

$ docker images ubuntu
REPOSITORY    TAG      IMAGE ID      CREATED       SIZE
ubuntu        latest   c73a085dc378  11 weeks ago  127 MB

 これはubuntuのDockerイメージです。

 以下のコマンドで、イメージレイヤのサマリー情報を確認してみます。(タグ名を省略した場合はデフォルトで「latest」が付与されます)

$ docker history ubuntu

 実行結果は以下のように出力されました。出力内容はubuntuのバージョンによって異なると思います。

IMAGE        CREATED     CREATED BY                                     SIZE        COMMENT
f975c5035748 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"]            0B
<missing>    3 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do…  7B
<missing>    3 weeks ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…  2.76kB
<missing>    3 weeks ago /bin/sh -c rm -rf /var/lib/apt/lists/*         0B
<missing>    3 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /…    745B
<missing>    3 weeks ago /bin/sh -c #(nop) ADD file:c753df38640ab6e24…  112MB

 docker historyの出力順序は、一番下が最も古いイメージレイヤで、上に行くほど新しいイメージレイヤになります。

 私が確認したubuntuのDockerイメージは、6層のイメージレイヤで構成されていることが分かります。

 また、各イメージレイヤが作られたのは、このコマンドを実行した日の3週間前であることも知ることができます。

 最も重要なのは、「CREATED BY」の部分です。各イメージレイヤが、どのようにして作成されたかが分かります。

 各行の「CREATED BY」の値は、その行のイメージレイヤが作成された際に実行されたコマンドです。

 例えば、下から3番目のイメージレイヤは、下から2番目のイメージレイヤに、下から3番目の行の「CREATED BY」の部分(/bin/sh -c rm -rf /var/lib/apt/lists/*)を実行することによって作成されたということになります。

 後半の部分がカットされている行(例えば下から5番目)もありますが、これに関しましては後述します。

 このように、docker historyコマンドを使うことによって、Dockerイメージがどのようにして作成されたかが確認できます。

イメージレイヤのサイズと作成日付の表示内容を変更する

 出力内容の2列目にありますCREATEDは、いつそのレイヤが作成されたかが表示されています。

 また、SIZEの列に表示されていますのは各レイヤの容量です。

 この2つの表示形式を変更してみます。

 デフォルトの表示内容は、サイズは量に応じて、B(バイト)、MB(メガバイト)のように出力され、日付はdocker historyコマンドを実行した日を起点として、各イメージレイヤがどのくらい前に作成されたかが出力されます。

 前項でubuntuイメージに対して実行したdocker historyコマンドに「--human=false」オプションを付けて実行してみました。

$ docker history --human=false ubuntu

 実行結果は以下のとおりです。

IMAGE        CREATED AT                CREATED BY                                    SIZE         COMMENT
f975c5035748 2018-03-07T07:17:26+09:00 /bin/sh -c #(nop) CMD ["/bin/bash"]           0
<missing>    2018-03-07T07:17:26+09:00 /bin/sh -c mkdir -p /run/systemd && echo 'do… 7
<missing>    2018-03-07T07:17:25+09:00 /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$… 2759
<missing>    2018-03-07T07:17:24+09:00 /bin/sh -c rm -rf /var/lib/apt/lists/*        0
<missing>    2018-03-07T07:17:24+09:00 /bin/sh -c set -xe && echo '#!/bin/sh' > /…   745
<missing>    2018-03-07T07:17:23+09:00 /bin/sh -c #(nop) ADD file:c753df38640ab6e24… 112439535

 日付部分には実際の日付が表示され、サイズの部分はバイト表示で出力されてます。

 このように、目的に応じて使い分けることができます。

内容を切り捨てないで出力する

 出力情報の中で一番確認したい項目の「CREATED BY」ですが、文字数が多いものは途中でカットされます。

 オプションを指定することでカットされないようにできます。

 再度docker historyコマンドをオプション無しで実行します。

$ docker history ubuntu

 以下のように出力されました。

IMAGE        CREATED     CREATED BY                                    SIZE      COMMENT
f975c5035748 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"]           0B
<missing>    3 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing>    3 weeks ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$… 2.76kB
<missing>    3 weeks ago /bin/sh -c rm -rf /var/lib/apt/lists/*        0B
<missing>    3 weeks ago /bin/sh -c set -xe && echo '#!/bin/sh' > /…   745B
<missing>    3 weeks ago /bin/sh -c #(nop) ADD file:c753df38640ab6e24… 112MB

 下から5行目の「CREATED BY」の値を見て下さい。

/bin/sh -c mkdir -p /run/systemd && echo 'do…

 最後の部分が「'do」になってますが、そのあとの部分がカットされてます。

 docker historyコマンドは、デフォルトで最大45文字まで出力します。(ソースコード確認済み)

 先ほどのdocker historyコマンドに「--no-trunc=true」というオプションを付けて実行してみましょう。

$ docker history --no-trunc=true ubuntu

 全部掲載すると量が多すぎますので、下から5行目の部分のみ掲載します。

<missing> 3 weeks ago /bin/sh -c mkdir -p /run/systemd && echo 'docker' > /run/systemd/container 7B

 先ほど出力がカットされていた部分が出力されてます。

 「--no-trunc=true」オプションを付けることで、各行の内容がカットされずに出力されます。

 デフォルトは、「--no-trunc=false」です。

おわりに

  以上でdocker historyコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです!

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(CE対応版)(オリジナルな実例付き)」をご参照ください。

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

コメント

タイトルとURLをコピーしました