はじめに
この実験では、docker stack ps コマンドを効果的に使用して、Docker スタック内のタスクを一覧表示および管理する方法を学びます。まず、マルチコンテナアプリケーションを定義して実行するための強力なツールである Docker Compose を使用してサンプルスタックをデプロイします。
スタックのデプロイ後、docker stack ps の様々な機能を探索します。これには、スタック内のすべてのタスクを一覧表示すること、タスク名に基づいてタスクをフィルタリングすること、出力を整形して関心のある特定のフィールドを表示すること、最後に、簡潔な表示のためにタスク ID のみを表示することが含まれます。この実践的な経験を通じて、Docker スタックタスクの状態を監視し理解するスキルを身につけることができます。
サンプルスタックをデプロイする
このステップでは、Docker Compose を使用してサンプルスタックをデプロイする方法を学びます。Docker Compose は、マルチコンテナの Docker アプリケーションを定義して実行するためのツールです。Compose を使用すると、YAML ファイルを使ってアプリケーションのサービスを構成できます。そして、1 つのコマンドで構成からすべてのサービスを作成して起動できます。
LabEx 環境には Docker Compose が事前にインストールされていないため、まずはインストールする必要があります。インストールされている Docker バージョンと互換性のある Docker Compose バージョン 1.29.2 をインストールします。
まず、Docker Compose のバイナリをダウンロードします。
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
このコマンドは、公式の GitHub リポジトリから Docker Compose のバイナリをダウンロードし、/usr/local/bin/docker-compose に保存します。$(uname -s) と $(uname -m) の部分は、オペレーティングシステムとアーキテクチャを自動的に検出します。
次に、バイナリに実行権限を付与します。
sudo chmod +x /usr/local/bin/docker-compose
このコマンドは、ダウンロードしたファイルを実行可能にします。
これで、Docker Compose のバージョンを確認することでインストールを検証します。
docker-compose --version
docker-compose version 1.29.2, build 5becea4c のような出力が表示されるはずです。
Docker Compose がインストールされたので、スタックを定義するためのシンプルな Docker Compose ファイルを作成しましょう。~/project ディレクトリに docker-compose.yml という名前のファイルを作成します。
nano エディタを使ってファイルを作成して編集します。
nano ~/project/docker-compose.yml
次の内容を docker-compose.yml ファイルに貼り付けます。
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
app:
image: alpine:latest
command: echo "Hello from Alpine"
この docker-compose.yml ファイルは 2 つのサービスを定義しています。
web:nginx:latestイメージを使用し、ホストのポート 80 をコンテナ内のポート 80 にマッピングします。app:alpine:latestイメージを使用し、単純なechoコマンドを実行します。
Ctrl + S を押してファイルを保存し、Ctrl + X を押してエディタを終了します。
スタックをデプロイする前に、必要なイメージを取得しましょう。Docker Compose はデプロイ時に自動的にイメージを取得できますが、事前に明示的に取得すると役立つことがあります。
nginx:latest イメージを取得します。
docker pull nginx:latest
alpine:latest イメージを取得します。
docker pull alpine:latest
これで、docker-compose up コマンドを使用してスタックをデプロイします。-d フラグを使用すると、コンテナがデタッチドモード(バックグラウンド)で実行されます。
docker-compose.yml ファイルを作成した ~/project ディレクトリに移動します。
cd ~/project
そして、コマンドを実行します。
docker-compose up -d
このコマンドは docker-compose.yml ファイルを読み取り、定義されたサービスを作成して起動します。web と app サービスの作成と起動を示す出力が表示されるはずです。
サービスが実行されていることを確認するには、実行中のコンテナを一覧表示できます。
docker ps
web サービス(nginx ベース)用のコンテナと app サービス(alpine ベース)用のコンテナの 2 つのコンテナが実行されているのが表示されるはずです。
スタック内のすべてのタスクをリストする
このステップでは、前のステップでデプロイしたスタックに関連付けられたすべてのタスク(コンテナ)を一覧表示する方法を学びます。Docker Swarm や Kubernetes では、「タスク」という用語はサービスの実行中のインスタンスを指すためによく使われます。ここでは Docker Compose を使用しており、技術的には Swarm と同じように「タスク」の概念を使用していませんが、デプロイしたスタックを構成するコンテナを一覧表示することはできます。
docker-compose ps コマンドは、現在のプロジェクト(docker-compose.yml ファイルが含まれるディレクトリ)に対して Docker Compose が管理するコンテナを一覧表示するために使用されます。
docker-compose.yml ファイルがある ~/project ディレクトリにいることを確認します。
cd ~/project
これで、docker-compose ps コマンドを実行します。
docker-compose ps
このコマンドは、docker-compose.yml ファイルで定義されたコンテナの一覧と、それらの現在の状態、コマンド、およびポートを表示します。
次のような出力が表示されるはずです(コンテナ名と ID は異なる場合があります)。
Name Command State Ports
--------------------------------------------------------------------------------
project_app_1 /bin/sh -c echo "Hello fr ... Exit 0
project_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
この出力は、docker-compose.yml で定義された 2 つのサービス app と web を示しています。State 列は、コンテナが実行中(Up)か終了している(Exit 0)かを示しています。Ports 列は、web サービスのポートマッピングを示しています。
app コンテナは、そのコマンド echo "Hello from Alpine" の実行が終了したため終了しました。web コンテナは、Nginx サーバーが継続的に実行されるように設計されているため、まだ実行中です。
このコマンドは、スタック内のどのサービスが実行中であり、それらの基本的な状態をすぐに確認するのに便利です。
タスクを名前でフィルタリングする
このステップでは、Docker Compose が管理するコンテナの一覧をサービス名に基づいてフィルタリングする方法を学びます。多数のサービスを持つ大規模なスタックがあり、特定のサービスの状態のみを確認したい場合に便利です。
docker-compose ps コマンドを使用すると、引数としてサービス名を指定して出力をフィルタリングできます。
~/project ディレクトリにいることを確認します。
cd ~/project
web サービスのコンテナのみを一覧表示するには、次のコマンドを実行します。
docker-compose ps web
このコマンドは、docker-compose.yml で定義された web サービスに関連付けられたコンテナの情報のみを表示します。
次のような出力が表示されるはずです。
Name Command State Ports
--------------------------------------------------------------------------------
project_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
同様に、app サービスのコンテナのみを一覧表示するには、次のコマンドを実行します。
docker-compose ps app
これにより、app コンテナの情報が表示されます。
Name Command State Ports
--------------------------------------------------------------------------------
project_app_1 /bin/sh -c echo "Hello fr ... Exit 0
サービス名でフィルタリングすることは、Docker Compose スタック内の個々のコンポーネントを管理および監視するための簡単で効果的な方法です。
出力をフォーマットして特定のフィールドを表示する
このステップでは、docker-compose ps コマンドの出力をフォーマットして、特定のフィールドのみを表示する方法を学びます。これは、スクリプト作成やさらなる処理のために、サービスの名前や状態などの特定の情報を抽出する必要がある場合に便利です。
docker-compose ps コマンドは --format フラグをサポートしており、これを使用すると Go テンプレートを使って出力形式を指定できます。
~/project ディレクトリにいることを確認します。
cd ~/project
サービス名とコンテナの状態のみを表示するには、次のコマンドを使用できます。
docker-compose ps --format "table {{.Service}}\t{{.State}}"
--format フラグを分解して説明しましょう。
"table": これは、出力をヘッダ付きの表形式にすることを指定します。{{.Service}}: これは、サービス名を表す Go テンプレートのプレースホルダーです。\t: これはタブ文字で、ここでは列を区切るために使用されます。{{.State}}: これは、コンテナの状態を表す Go テンプレートのプレースホルダーです。
出力は次のようになります。
SERVICE STATE
app Exit 0
web Up
フォーマット文字列に他のフィールドも含めることができます。たとえば、サービス名、イメージ、および状態を表示するには、次のコマンドを使用します。
docker-compose ps --format "table {{.Service}}\t{{.Image}}\t{{.State}}"
出力は次のようになります。
SERVICE IMAGE STATE
app alpine:latest Exit 0
web nginx:latest Up
--format フラグを使用することで、Docker Compose サービスに関する情報を表示および処理する方法に柔軟性を持たせることができます。
タスク ID のみを表示する
このステップでは、Docker Compose スタック内のサービスのコンテナ ID のみを表示する方法を学びます。これは、自動化やスクリプトの目的でコンテナ ID を他のコマンドに渡す必要がある場合に特に便利です。
再度、docker-compose ps コマンドで --format フラグを使用しますが、今回はコンテナ ID フィールドのみを指定します。
~/project ディレクトリにいることを確認します。
cd ~/project
コンテナ ID のみを表示するには、次のコマンドを使用します。
docker-compose ps -q
-q フラグは --quiet の省略形で、コンテナ ID のみを出力します。
あるいは、--format フラグを使用して同じ結果を得ることもできます。
docker-compose ps --format "{{.ID}}"
このコマンドは Go テンプレート {{.ID}} を使用して、各サービスのコンテナ ID のみを抽出します。
どちらのコマンドの出力も、1 行に 1 つのコンテナ ID が列挙されたリストになります。
<container_id_for_app>
<container_id_for_web>
(実際の ID はあなたの環境では異なります)
ID のみを表示することは、たとえばコンテナを停止または削除するなど、プログラムでコンテナとやり取りする必要がある場合の一般的な要件です。
最後に、デプロイされたスタックを停止してクリーンアップしましょう。これにより、docker-compose up で作成されたコンテナとネットワークが停止され、削除されます。
~/project ディレクトリにいることを確認します。
cd ~/project
次のコマンドを実行します。
docker-compose down
このコマンドは、web および app サービスのコンテナを停止して削除します。コンテナとネットワークが削除されていることを示す出力が表示されるはずです。
docker-compose down を実行した後、docker ps を使用してコンテナが実行されていないことを確認できます。
docker ps
このコマンドでは、実行中のコンテナが表示されないはずです。
まとめ
この実験では、Docker Compose を使用してサンプルのスタックをデプロイする方法を学びました。これには、Docker Compose のインストール、サービスを定義する docker-compose.yml ファイルの作成、そしてスタックのデプロイが含まれていました。
デプロイ後、docker stack ps コマンドを使用してデプロイされたスタック内のすべてのタスクをリストする方法を学びます。また、これらのタスクを名前でフィルタリングし、出力をフォーマットして特定のフィールドを表示し、タスク ID のみを表示する方法を探索します。これにより、スタックタスクの監視と管理における docker stack ps コマンドの柔軟性を実証します。



