はじめに
この実験では、docker inspect コマンドを使用して Docker イメージの概要をすばやく把握する方法を学びます。特定のイメージに関する詳細情報を取得する方法、最新にビルドされたイメージを特定して調査する方法、および書式設定オプションを使用して調査出力から関連データを抽出する方法を探ります。この実験では、サンプルイメージと簡単な Dockerfile を使用した実践的な例を通じて手順を案内します。
特定のイメージの概要をすばやく把握する
このステップでは、docker inspect コマンドを使用して特定の Docker イメージの概要をすばやく把握する方法を学びます。このコマンドは、イメージ、コンテナ、ボリューム、ネットワークなどの Docker オブジェクトに関する詳細情報を提供します。
まず、調査するサンプルイメージを取得しましょう。テストに使用される非常に小さなイメージである hello-world イメージを使用します。
docker pull hello-world
イメージが取得され、ダウンロードされていることを示す出力が表示されるはずです。
イメージを取得したので、docker inspect を使用してその情報を取得できます。
docker inspect hello-world
このコマンドは、hello-world イメージに関するさまざまな詳細情報(ID、作成日、アーキテクチャ、オペレーティングシステム、構成など)を含む大きな JSON オブジェクトを出力します。
概要をすばやく把握するために、この JSON 出力内の特定のフィールドに関心があるかもしれません。docker inspect で -f または --format フラグを使用して、出力を整形する Go テンプレートを指定できます。たとえば、イメージ ID と作成日を表示するには、次のコマンドを使用できます。
docker inspect -f '{{.Id}} {{.Created}}' hello-world
このコマンドは、イメージ ID の後に作成タイムスタンプを出力します。{{.Id}} と {{.Created}} は、docker inspect の JSON 出力内の Id フィールドと Created フィールドを参照するプレースホルダーです。
docker inspect hello-world コマンドの完全な JSON 出力内の他のフィールドを調べ、フォーマット文字列で使用して、必要な特定の情報を取得できます。
直近にビルドされたイメージの概要をすばやく把握する
このステップでは、最新にビルドされた Docker イメージを特定し、その概要をすばやく把握する方法を学びます。これは、イメージを積極的に開発してビルドしているときに、最新バージョンをすばやく調査したい場合に便利です。
まず、イメージをビルドするための簡単な Dockerfile を作成しましょう。~/project ディレクトリに、以下の内容の Dockerfile という名前のファイルを作成します。
FROM alpine:latest
RUN echo "Hello, Docker!" > /app/message.txt
CMD cat /app/message.txt
この Dockerfile は alpine ベースイメージを使用し、内容が "Hello, Docker!" の message.txt という名前のファイルを追加し、コンテナが実行されるときにこのファイルの内容を印刷するコマンドを設定します。
次に、docker build コマンドを使用して Docker イメージをビルドします。my-recent-image というタグを付けます。
docker build -t my-recent-image .
コマンドの最後の . は、Dockerfile が現在のディレクトリ (~/project) にあることを示します。ビルドプロセスを示す出力が表示されます。
ビルドが完了したら、docker images を使用してイメージを一覧表示できます。
docker images
前のステップの hello-world イメージや alpine ベースイメージとともに、my-recent-image が一覧に表示されるはずです。最新にビルドされたイメージは通常、一覧の先頭に表示されるか、最も新しい作成時間を持っています。
最新にビルドされたイメージの概要をすばやく把握するには、docker images を head や awk などのコマンドラインツールと組み合わせて、一覧表示された最初のイメージ(通常は最新のイメージ)のイメージ ID を抽出します。そして、その ID を使用して docker inspect を実行します。
docker inspect $(docker images -q | head -n 1)
このコマンドを分解してみましょう。
docker images -q:これはイメージ ID のみを一覧表示します。head -n 1:これは出力の最初の行を取得します。これが最新のイメージの ID です。$(...):これはコマンド置換で、括弧内のコマンドを実行し、その出力を外側のコマンドに置き換えます。docker inspect ...:これはコマンド置換で取得した ID のイメージを調査します。
これにより、最新にビルドされたイメージの詳細な JSON 情報が出力されます。前のステップと同様に、docker inspect で -f フラグを使用して、必要に応じて出力を整形することができます。
たとえば、最新のイメージの ID と作成日を表示するには、次のコマンドを使用します。
docker inspect -f '{{.Id}} {{.Created}}' $(docker images -q | head -n 1)
これにより、新しくビルドしたイメージに関する重要な情報をすばやく取得できます。
SPDX ファイルから概要をすばやく把握する
このステップでは、SPDX (Software Package Data Exchange) ファイルを生成して調査することで、Docker イメージ内のソフトウェアコンポーネントの概要をすばやく把握する方法を学びます。SPDX は、コンポーネント、ライセンス、著作権などのソフトウェアビルオブマテリアル (SBOM) 情報を伝達するためのオープン標準です。
Docker イメージの SPDX ファイルを生成するには、イメージのレイヤーを分析して必要な情報を抽出できるツールが必要です。そのようなツールの 1 つが syft で、これはコンテナイメージやファイルシステムから SBOM を生成するコマンドラインツールです。
syft は事前にインストールされていないため、ダウンロードしてインストールします。Linux 用の最新リリースをダウンロードします。
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sudo bash -s -- -b /usr/local/bin
このコマンドは、syft のインストールスクリプトをダウンロードし、sudo で実行してバイナリを /usr/local/bin にインストールします。パスワードの入力を求められる場合がありますが、labex ユーザーはパスワードなしで sudo を使用できます。
インストール後、syft のバージョンを確認することで、インストールが成功したことを検証できます。
syft version
syft のバージョン情報が表示されるはずです。
では、前のステップでビルドした my-recent-image の SPDX ファイルを生成しましょう。結果を ~/project ディレクトリ内の my-recent-image.spdx.json という名前のファイルに出力します。
syft my-recent-image -o spdx-json > ~/project/my-recent-image.spdx.json
このコマンドは、syft に my-recent-image を分析させ、結果を SPDX JSON 形式で出力し、指定されたファイルに出力をリダイレクトします。このプロセスは、イメージのサイズに応じて少し時間がかかる場合があります。
コマンドが完了すると、イメージ内で見つかったソフトウェアパッケージの詳細なインベントリを含む SPDX JSON ファイルができます。このファイルの内容は、nano などのテキストエディタを使用して表示できます。
nano ~/project/my-recent-image.spdx.json
ファイル内には、イメージ自体に関する情報と、検出されたパッケージのリストがあり、それらの名前、バージョン、ライセンスが含まれています。これにより、コンテナを実行したり、個々のレイヤーを手動で調査したりすることなく、イメージに含まれるソフトウェアコンポーネントの概要をすばやく把握できます。
ファイルをスクロールして、さまざまなセクションとそれらに含まれる情報を確認できます。検出されたソフトウェアコンポーネントがリストされている packages 配列を探してください。
Ctrl + X を押して nano を終了します。
まとめ
この実験では、docker inspect コマンドを使用して Docker イメージの概要をすばやく把握する方法を学びました。hello-world イメージを取得し、docker inspect を使用して JSON 形式で詳細情報を表示することで、特定のイメージを調査する練習を行いました。また、docker inspect で -f フラグと Go テンプレートを使用して、イメージ ID や作成日などの特定のフィールドを抽出して整形する方法を学び、カスタマイズされた概要をすばやく取得できるようになりました。
さらに、開発サイクル中に特に有用な、最新にビルドされた Docker イメージを特定して調査する方法を探りました。これには、イメージを一覧表示し、必要に応じてフィルタリングまたはソートして最新のイメージを見つけ、調査する方法を理解することが含まれていました。



