はじめに
この実験では、docker-compose.ymlファイルで定義されたサービスが使用する Docker イメージをリスト表示するdocker compose imagesコマンドの使用方法を学びます。まずシンプルなdocker-compose.ymlファイルを準備し、docker compose upコマンドでサービスを起動します。
その後、イメージをリスト表示するさまざまな方法を探求します。作成されたコンテナが使用するすべてのイメージをリスト表示する方法、quiet オプションを使用してイメージ ID のみを表示する方法、JSON 形式で表示して解析しやすくする方法などを学びます。この実践的な経験を通じて、Docker Compose プロジェクト内でイメージを管理する実用的なスキルを習得できます。
シンプルな docker-compose.yml ファイルを準備する
このステップでは、シンプルなdocker-compose.ymlファイルを準備します。開始前に、Docker Compose をインストールする必要があります。Docker Compose は、マルチコンテナの Docker アプリケーションを定義および実行するためのツールです。Compose では、YAML ファイルを使用してアプリケーションのサービスを設定します。その後、単一のコマンドで設定からすべてのサービスを作成および起動できます。
まず、Docker Compose をインストールしましょう。Docker Compose バイナリをダウンロードし、実行可能にします。
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
次に、Docker Compose のバージョンを確認してインストールを検証します。
docker-compose --version
Docker Compose version v2.20.2のような出力が表示されるはずです。
次に、プロジェクト用のディレクトリを作成し、その中に移動します。
mkdir ~/project/my-docker-app
cd ~/project/my-docker-app
ここで、nanoエディタを使用してdocker-compose.ymlファイルを作成します。このファイルは、nginxイメージを使用したシンプルな Web サービスを定義します。
nano docker-compose.yml
nanoエディタで、以下の内容を貼り付けます:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
このdocker-compose.ymlファイルを分解してみましょう:
version: '3.8'は Compose ファイルフォーマットのバージョンを指定しますservices:はアプリケーションのサービスを定義しますweb:はサービスの名前ですimage: nginx:latestはこのサービスで使用する Docker イメージを指定します。この場合、最新バージョンのnginxイメージを使用していますports:はホストとコンテナ間のポートをマッピングします。"80:80"はホストのポート 80 をコンテナのポート 80 にマッピングします
Ctrl + X、次にY、そしてEnterを押してファイルを保存します。
サービスを起動する前に、nginx:latestイメージをプルする必要があります。
docker pull nginx:latest
このコマンドは、Docker Hub からnginx:latestイメージをダウンロードします。
docker-compose.yml ファイルで定義されたサービスを起動
このステップでは、docker-compose.ymlファイルで定義されたサービスを起動します。サービスのビルド、作成、起動にはdocker-compose upコマンドを使用します。
docker-compose.ymlファイルを作成した~/project/my-docker-appディレクトリにいることを確認してください。
cd ~/project/my-docker-app
次に、以下のコマンドを実行してサービスをデタッチドモード(バックグラウンド)で起動します。
docker-compose up -d
-dフラグはコンテナをデタッチドモードで実行し、バックグラウンドで動作させてターミナルを占有しないようにします。
webサービスが作成・起動されていることを示す出力が表示されるはずです。
コンテナが実行中かどうかを確認するには、docker psコマンドを使用します。
docker ps
nginxイメージを使用したmy-docker-app-web-1(またはプロジェクトディレクトリ名に応じた類似名)という名前のコンテナが表示され、ステータスがUpになっているはずです。
また、curlを使用してポート 80 のlocalhostにアクセスすることで、Web サーバーがアクセス可能かどうかを確認できます。
curl http://localhost:80
ターミナルに Nginx のデフォルトウェルカムページの HTML 出力が表示されれば、Web サーバーが正常に動作してアクセス可能であることが確認できます。
作成済みコンテナで使用されているイメージを一覧表示
このステップでは、現在システム上にある Docker イメージ、特に先ほど作成したコンテナで使用されているイメージを一覧表示します。イメージの一覧表示にはdocker imagesコマンドを使用します。
以下のコマンドを実行して全てのイメージを一覧表示します。
docker images
REPOSITORY、TAG、IMAGE ID、CREATED、SIZEといった情報を含むテーブルが表示されます。ここにnginxイメージが表示されているはずです。
この出力は、システム上に pull またはビルドされたイメージを表示します。nginxイメージは前のステップで pull され、現在実行中のコンテナで使用されています。
quiet オプションを使用してイメージ ID のみを一覧表示
このステップでは、docker imagesコマンドに quiet オプションを指定してイメージ ID のみを一覧表示する方法を学びます。これはスクリプト作成などの目的でイメージ ID のリストを取得する際に便利です。
quiet オプションは-qフラグで指定します。
以下のコマンドを実行してイメージ ID のみを一覧表示します。
docker images -q
イメージ ID が 1 行ずつ表示されるはずです。この出力はdocker imagesの完全な出力よりも簡潔です。
このオプションは、古いイメージを削除する場合など、プログラムでイメージリストを処理したい場合に特に有用です。
JSON 形式でイメージを一覧表示
このステップでは、Docker イメージを JSON 形式で一覧表示する方法を学びます。jqなどのツールを使ってプログラムで出力を解析したい場合に便利です。
docker imagesコマンドに--formatオプションを指定して出力形式を設定できます。JSON 形式で出力するにはjsonキーワードを使用します。
以下のコマンドを実行して JSON 形式でイメージを一覧表示します。
docker images --format json
イメージ情報が構造化された JSON 形式で表示されます。各イメージは JSON 配列内の JSON オブジェクトとして表現されます。
この形式は、JSON データを処理できるスクリプトやアプリケーションに Docker イメージ情報を統合するのに最適です。
このステップを完了したら、必要に応じて実行中のコンテナを停止し、プロジェクトディレクトリを削除できます。
コンテナを停止するには、~/project/my-docker-appディレクトリに戻って次のコマンドを実行します:
cd ~/project/my-docker-app
docker-compose down
このコマンドはdocker-compose upで作成されたコンテナ、ネットワーク、ボリュームを停止して削除します。
プロジェクトディレクトリを削除するにはrmコマンドを使用します:
cd ~/project
rm -rf my-docker-app
まとめ
この実験では、docker-compose.ymlファイルで定義されたサービスが使用するイメージを一覧表示するdocker compose imagesコマンドの使用方法を学びました。まず、nginxイメージを使用した Web サービスを定義するシンプルなdocker-compose.ymlファイルを準備し、Docker Compose のインストールと必要なファイル構造の作成を行いました。
その後、docker-compose.ymlファイルで定義されたサービスを起動しました。最後に、作成されたコンテナが使用するイメージを一覧表示するさまざまな方法を確認しました。これには、すべてのイメージ詳細を表示する方法、quiet オプションを使用してイメージ ID のみを表示する方法、JSON 形式でイメージを表示する方法が含まれます。



