本記事はDocker ver24.0.7の環境で確認しています。
このコマンドは、指定した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コマンドの主な使い方
以下で実例をまじえたコマンドの使い方を解説していきたいと思います。
基本事項の解説
docker historyコマンドは、Dockerイメージの各レイヤの情報を出力することができます。
Dockerイメージの各々のレイヤをどのようにして作ったのかが分かります。
自作のDockerイメージの内容を確認したり、他人が作成したDockerイメージの作り方を参考にしたりすることもできるでしょう。
Dockerイメージのイメージレイヤのサマリー情報を出力する
Ubuntuの公式Dockerイメージのレイヤ情報をのぞいてみましょう。
Dockerホスト内に以下のDockerイメージがあります。
$ docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 4e2eef94cd6b 11 weeks ago 73.9MB
これはubuntuのDockerイメージです。
以下のコマンドで、イメージレイヤのサマリー情報を確認してみます。(タグ名を省略した場合はデフォルトで「latest」が付与されます)
$ docker history ubuntu
実行結果は以下のように出力されました。出力内容はubuntuのバージョンによって異なると思います。
IMAGE CREATED CREATED BY SIZE COMMENT
4e2eef94cd6b 11 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 11 months ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 11 months ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811B
<missing> 11 months ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 1.01MB
<missing> 11 months ago /bin/sh -c #(nop) ADD file:9f937f4889e7bf646… 72.9MB
docker historyの出力順序は、一番下が最も古いイメージレイヤで、上に行くほど新しいイメージレイヤになります。
私が確認したubuntuのDockerイメージは、5層のイメージレイヤで構成されていることが分かります。
また、各イメージレイヤが作られたのは、このコマンドを実行した日の11カ月前であることも知ることができます。
最も重要なのは、「CREATED BY」の部分です。各イメージレイヤが、どのようにして作成されたかが分かります。
各行の「CREATED BY」の値は、その行のイメージレイヤが作成された際に実行されたコマンドです。
例えば、下から2番目のイメージレイヤは、一番下のイメージレイヤに、下から2番目の行の「CREATED BY」の部分(/bin/sh -c [ -z "$(apt-get indextargets)" ])を実行することによって作成されたということになります。
後半の部分がカットされている行(例えば下から3番目)もありますが、これに関しましては後述します。
このように、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
4e2eef94cd6b 2020-08-20T06:14:39+09:00 /bin/sh -c #(nop) CMD ["/bin/bash"] 0
<missing> 2020-08-20T06:14:38+09:00 /bin/sh -c mkdir -p /run/systemd && echo 'do… 7
<missing> 2020-08-20T06:14:37+09:00 /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811
<missing> 2020-08-20T06:14:35+09:00 /bin/sh -c [ -z "$(apt-get indextargets)" ] 1006735
<missing> 2020-08-20T06:14:34+09:00 /bin/sh -c #(nop) ADD file:9f937f4889e7bf646… 72853645
日付部分には実際の日付が表示され、サイズの部分はバイト表示で出力されてます。
このように、目的に応じて使い分けることができます。
内容を切り捨てないで出力する
出力情報の中で一番確認したい項目の「CREATED BY」ですが、文字数が多いものは途中でカットされます。
オプションを指定することでカットされないようにできます。
再度docker historyコマンドをオプション無しで実行します。
$ docker history ubuntu
以下のように出力されました。
IMAGE CREATED CREATED BY SIZE COMMENT
4e2eef94cd6b 11 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 11 months ago /bin/sh -c mkdir -p /run/systemd && echo 'do… 7B
<missing> 11 months ago /bin/sh -c set -xe && echo '#!/bin/sh' > /… 811B
<missing> 11 months ago /bin/sh -c [ -z "$(apt-get indextargets)" ] 1.01MB
<missing> 11 months ago /bin/sh -c #(nop) ADD file:9f937f4889e7bf646… 72.9MB
下から4行目の「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> 11 months ago /bin/sh -c mkdir -p /run/systemd && echo 'docker' > /run/systemd/container 7B
先ほど出力がカットされていた部分が出力されてます。
「--no-trunc=true」オプションを付けることで、各行の内容がカットされずに出力されます。
デフォルトは、「--no-trunc=false」です。
おわりに
以上でdocker historyコマンドの紹介を終わります。
ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです!
他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。
ご訪問ありがとうございました!
コメント