はじめに
この実験 (lab) では、docker images コマンドを効果的に使用して、システム上の Docker イメージをリスト表示およびフィルタリングする方法を学びます。まず、すべてのトップレベルのイメージをリスト表示し、次に特定の名前とタグでイメージをリスト表示する方法を調べます。
さらに、イメージをダングリング (dangling) ステータスに基づいてフィルタリングしたり、ラベルを適用してフィルタリングしたりする方法を詳しく調べます。最後に、カスタムテンプレートを使用して docker images コマンドの出力形式をカスタマイズし、よりカスタマイズされた情報表示を実現する方法を学びます。
すべてのトップレベルイメージをリスト表示する
このステップでは、システム上のすべてのトップレベル Docker イメージをリスト表示する方法を学びます。トップレベルイメージとは、明示的にプル (pull) またはビルド (build) したイメージのことです。これらは、ビルドプロセス中に作成される中間イメージではありません。
すべてのトップレベルイメージをリスト表示するには、docker images コマンドを使用します。このコマンドは、各イメージに関する情報を含むテーブルを表示します。これには、リポジトリ (repository)、タグ (tag)、イメージ ID (image ID)、作成時間、およびサイズが含まれます。
イメージをリスト表示してみましょう。これは新しい環境であるため、最初はイメージが少ない可能性があります。後のステップでイメージをプルします。
ターミナルを ~/project ディレクトリで開き、次のコマンドを実行します。
docker images
次のような出力が表示されます (正確な出力は、存在するイメージによって異なる場合があります)。
REPOSITORY TAG IMAGE ID CREATED SIZE
この出力は、現在システム上にトップレベルイメージが存在しないことを示しています。
名前とタグでイメージをリスト表示する
このステップでは、特定の Docker イメージを名前とタグでリスト表示する方法を学びます。これは、多数のイメージがあり、特定のイメージを見つけたい場合に役立ちます。
docker images コマンドを使用すると、リポジトリ名 (repository name) と、オプションでタグ (tag) を指定して、出力をフィルタリングできます。形式は docker images [REPOSITORY[:TAG]] です。
まず、リスト表示するものを準備するために、イメージをプルしましょう。テストに使用される非常に小さなイメージである hello-world イメージをプルします。
次のコマンドを実行して、hello-world イメージをプルします。
docker pull hello-world
イメージがプルされ、ダウンロードされていることを示す出力が表示されます。
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
hello-world イメージができたので、名前を使用してこのイメージのみをリスト表示してみましょう。
次のコマンドを実行します。
docker images hello-world
出力には、hello-world イメージのみが表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest <image_id> <created_time> <size>
タグを指定することもできます。latest タグをプルしたので、latest タグを持つ hello-world イメージをリスト表示してみましょう。
次のコマンドを実行します。
docker images hello-world:latest
出力は前のコマンドと同じになります。これは、タグが指定されていない場合、latest がデフォルトのタグであるためです。
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest <image_id> <created_time> <size>
存在しないイメージをリスト表示しようとすると、空の出力が表示されます。例:
docker images non-existent-image
出力:
REPOSITORY TAG IMAGE ID CREATED SIZE
これにより、イメージを名前とタグでフィルタリングできることが確認できます。
dangling(ぶら下がり)ステータスでイメージをフィルタリングする
このステップでは、Docker イメージを「ダングリング (dangling)」ステータスに基づいてフィルタリングする方法を学びます。ダングリングイメージとは、タグ付けされたイメージとの関係がないレイヤーのことです。これらは、イメージの新しいバージョンを構築した結果、古いレイヤーにタグが付いていない場合に発生することがよくあります。これらのダングリングイメージはディスク容量を消費するため、クリーンアップできます。
イメージをダングリングステータスでフィルタリングするには、--filter フラグを dangling キーとともに使用します。値は、ダングリングイメージのみを表示する場合は true、ダングリングでないイメージのみを表示する場合は false になります。
まず、ダングリングイメージを作成しましょう。これを行うには、既存のイメージを置き換える新しいイメージを構築します。これには、簡単な Dockerfile を使用します。
~/project ディレクトリに Dockerfile という名前のファイルを作成し、次の内容を記述します。
FROM alpine
CMD ["echo", "Hello, world!"]
この Dockerfile は非常にシンプルです。alpine イメージをベースとして使用し、コンテナがそこから実行されると "Hello, world!" と出力するだけです。
次に、この Dockerfile からイメージを構築し、タグを付けましょう。
次のコマンドを実行して、イメージを構築し、my-image:latest としてタグ付けします。
docker build -t my-image:latest .
ビルドプロセスを示す出力が表示されます。
[+] Building
...
Successfully built <image_id>
Successfully tagged my-image:latest
次に、Dockerfile を少し変更し、同じタグで再度構築します。これにより、my-image:latest タグを持つ新しいイメージが作成され、このタグを持っていた以前のイメージはダングリングになります。
~/project ディレクトリの Dockerfile を編集して、コマンドを変更します。
FROM alpine
CMD ["echo", "Hello again!"]
次に、同じタグでイメージを再度構築します。
docker build -t my-image:latest .
前のビルドと同様の出力が表示されますが、新しいイメージ ID が生成されます。my-image:latest タグを持つ以前のイメージは、現在ダングリングしています。
すべてのイメージをリスト表示して、ダングリングイメージを確認しましょう。
次のコマンドを実行します。
docker images
REPOSITORY および TAG 列に <none> が表示されているイメージが表示される場合があります。これはダングリングイメージです。
REPOSITORY TAG IMAGE ID CREATED SIZE
my-image latest <new_image_id> <created_time> <size>
<none> <none> <old_image_id> <created_time> <size>
hello-world latest <image_id> <created_time> <size>
次に、--filter dangling=true フラグを使用して、ダングリングイメージのみを表示するようにフィルタリングします。
次のコマンドを実行します。
docker images --filter dangling=true
ダングリングイメージのみが表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> <old_image_id> <created_time> <size>
ダングリングでないイメージのみを表示するには、--filter dangling=false を使用します。
次のコマンドを実行します。
docker images --filter dangling=false
これにより、ダングリングでないすべてのイメージがリスト表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
my-image latest <new_image_id> <created_time> <size>
hello-world latest <image_id> <created_time> <size>
これは、イメージをダングリングステータスに基づいてフィルタリングする方法を示しています。
ラベルでイメージをフィルタリングする
このステップでは、ラベルに基づいて Docker イメージをフィルタリングする方法を学びます。ラベルは、イメージを含む Docker オブジェクトにアタッチできるキーと値のペアです。これらは、イメージを整理および識別するのに役立ちます。
ラベルでイメージをフィルタリングするには、--filter フラグを label キーとともに使用します。値は、単一のラベル (label=<key>=<value>) にすることも、ラベルキーのみ (label=<key>) にして、その値に関係なく、そのラベルを持つイメージを検索することもできます。
まず、ラベルを含む新しい Dockerfile を作成しましょう。
~/project ディレクトリに Dockerfile.labeled という名前のファイルを作成し、次の内容を記述します。
FROM alpine
LABEL maintainer="LabEx User"
LABEL version="1.0"
CMD ["echo", "Image with labels!"]
この Dockerfile は前のものと似ていますが、2 つの LABEL 命令が含まれています。
次に、この Dockerfile からイメージを構築し、タグを付けましょう。
次のコマンドを実行して、イメージを構築し、labeled-image:latest としてタグ付けします。
docker build -t labeled-image:latest -f Dockerfile.labeled .
ビルドプロセスとイメージのタグ付けが成功したことを示す出力が表示されます。
次に、すべてのイメージをリスト表示して、新しく作成されたイメージを確認しましょう。
次のコマンドを実行します。
docker images
他のイメージとともに、labeled-image がリストに表示されるはずです。
REPOSITORY TAG IMAGE ID CREATED SIZE
labeled-image latest <image_id> <created_time> <size>
my-image latest <new_image_id> <created_time> <size>
<none> <none> <old_image_id> <created_time> <size>
hello-world latest <image_id> <created_time> <size>
次に、maintainer ラベルでイメージをフィルタリングします。maintainer ラベルの値が "LabEx User" であるイメージをフィルタリングします。
次のコマンドを実行します。
docker images --filter label=maintainer=LabEx User
labeled-image のみが表示されるはずです。
REPOSITORY TAG IMAGE ID CREATED SIZE
labeled-image latest <image_id> <created_time> <size>
値に関係なく、ラベルキーのみでフィルタリングすることもできます。version ラベルを持つイメージをフィルタリングしてみましょう。
次のコマンドを実行します。
docker images --filter label=version
再び labeled-image のみが表示されるはずです。
REPOSITORY TAG IMAGE ID CREATED SIZE
labeled-image latest <image_id> <created_time> <size>
これは、ラベルを使用してイメージをフィルタリングする方法を示しています。
カスタムテンプレートを使用して出力をフォーマットする
このステップでは、カスタムテンプレートを使用して docker images コマンドの出力をフォーマットする方法を学びます。これは、イメージに関する特定の情報を機械可読形式またはカスタムの人間可読形式で抽出する場合に役立ちます。
docker images コマンドは --format フラグをサポートしており、これを使用すると、Go テンプレートを指定して出力を制御できます。テンプレート内でさまざまなプレースホルダーを使用して、イメージのさまざまな属性にアクセスできます。
イメージ ID とリポジトリ名のみをコロンで区切って表示するように出力をフォーマットしてみましょう。
次のコマンドを実行します。
docker images --format "{{.ID}}: {{.Repository}}"
各イメージのイメージ ID とリポジトリをリストする、次のような出力が表示されるはずです。
<image_id>: hello-world
<new_image_id>: my-image
<old_image_id>: <none>
<image_id>: labeled-image
ダングリングイメージのリポジトリには、依然として <none> が表示されることに注意してください。
タグやサイズなどの他の属性を含めることもできます。リポジトリ、タグ、サイズをタブで区切って表示するように出力をフォーマットしてみましょう。
次のコマンドを実行します。
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
フォーマット文字列の先頭に table を使用すると、ヘッダー付きのテーブルのような出力が作成されます。
次のような出力が表示されるはずです。
REPOSITORY TAG SIZE
hello-world latest <size>
my-image latest <size>
<none> <none> <size>
labeled-image latest <size>
使用可能なプレースホルダーのリストは、docker images コマンドの Docker ドキュメントにあります。一般的なものには、次のものがあります。
.ID: イメージ ID (Image ID).Repository: イメージリポジトリ名 (Image repository name).Tag: イメージタグ (Image tag).Created: イメージが作成された時刻 (Time when the image was created).Size: イメージサイズ (Image size).Containers: イメージを使用しているコンテナの数 (Number of containers using the image)
さまざまなテンプレートを試して、出力をカスタマイズする方法を確認してください。たとえば、イメージ ID と作成時刻をリストするには、次のようにします。
docker images --format "{{.ID}} created at {{.Created}}"
このステップで、Docker イメージのリスト表示とフィルタリングに関する実験(Lab)は終了です。すべてのイメージをリスト表示する方法、名前、タグ、ダングリングステータス、ラベルでフィルタリングする方法、およびカスタムテンプレートを使用して出力をフォーマットする方法を学びました。
まとめ
この実験(Lab)では、docker images コマンドを使用して Docker イメージをリスト表示およびフィルタリングする方法を学びました。まず、システム上のすべてのトップレベルイメージをリスト表示することから始めました。次に、hello-world イメージをプルした後、名前とタグで特定のイメージをリスト表示する練習をしました。
また、ダングリングステータスと特定のラベルに基づいてイメージをフィルタリングする方法も学習しました。最後に、カスタムテンプレートを使用して docker images コマンドの出力形式をカスタマイズする方法を学び、必要な情報のみを表示できるようになりました。



