docker historyコマンドの使い方(実例付)CE対応


 docker historyコマンドの使い方の紹介ページです。Docker CE ver17.12.1に対応しております。

 このコマンドは、指定したDockerイメージのイメージレイヤのサマリー情報を参照することが出来ます。

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

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

 それでは以下で詳細に解説いたします。

 

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

フォーマット

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

 

主なオプション一覧

-H, --human=true | false
サイズと日付の表示を人間に読みやすい形式で出力するか否かの指定(デフォルトは-H付き(--human=true))

--no-trunc=true | false
出力内容の切り捨てを行うか否かの指定(デフォルトはfalse(切り捨てを行う))

-q, --quiet
イメージレイヤのIDのみ出力する

■ 本記事の目次に戻る ■

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

 

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イメージがどのようにして作成されたかが確認できます。

■ 本記事の目次に戻る ■

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

 デフォルトの表示内容は、サイズは量に応じて、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

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

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

■ 本記事の目次に戻る ■

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

 再度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…

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

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

 dockerfile内の「RUN」命令では、1つのイメージレイヤで多くの更新を行うために、結構長いコマンドを記述したりします(※)ので、45文字より多くなることが多いと思います。

(※ dockerfileに記載した各コマンド(RUNやADDなど)の単位にイメージレイヤが作成されるため、短いコマンドでRUN命令などを数多く記載した場合、大量のイメージレイヤが作成されて、イメージレイヤの処理のためのオーバーヘッドが増え、処理効率が下がる場合があります)

 では、先ほどの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のコマンドの一覧(ver1.12対応版)(オリジナルな実例付き)」をご参照ください。

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


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です