はじめに
この実験では、Docker コンテナ内で実行中のプロセスを表示するdocker compose topコマンドの使用方法を学びます。まず、サービスを定義するシンプルなdocker-compose.ymlファイルを準備し、Docker Compose を使用してサービスを起動します。最後に、docker compose topコマンドを一般的な方法と特定のサービス名を指定して使用し、コンテナ内で実行中のプロセスを確認します。
シンプルな docker-compose.yml ファイルを準備する
このステップでは、シンプルなdocker-compose.ymlファイルを準備します。始める前に、Docker Compose について理解しましょう。Docker Compose は、マルチコンテナ Docker アプリケーションを定義・実行するためのツールです。Compose では YAML ファイルを使用してアプリケーションのサービスを設定し、単一のコマンドで設定からすべてのサービスを作成・起動できます。
LabEx 環境には 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 がインストールされたので、~/projectディレクトリにシンプルなdocker-compose.ymlファイルを作成します。このファイルはubuntuイメージを使用し、sleep infinityコマンドを実行してコンテナを稼働状態に保つ単一サービスを定義します。
nanoエディタを使用してファイルを作成・編集します。
nano ~/project/docker-compose.yml
nanoエディタで以下の内容を貼り付けます:
version: "3.8"
services:
ubuntu_service:
image: ubuntu
command: sleep infinity
このdocker-compose.ymlファイルの内容を解説します:
version: '3.8'- Compose ファイルフォーマットのバージョンを指定services:- アプリケーションのサービスを定義ubuntu_service:- サービス名(任意の名前を選択可能)image: ubuntu- 使用する Docker イメージ(公式ubuntuイメージを使用)command: sleep infinity- コンテナ起動時に実行するコマンド(コンテナを永続的に稼働)
内容を貼り付けた後、Ctrl + X、Yで確認、Enterでデフォルトファイル名docker-compose.ymlとして保存します。
ubuntuイメージが利用可能か確認するため、docker pullコマンドで手動で取得します。これは Docker Compose でサービスを開始する前にイメージを準備する良い方法です。
docker pull ubuntu
ubuntuイメージが取得される様子が表示されます。
docker-compose.yml ファイルで定義したサービスを起動
このステップでは、前のステップで作成したdocker-compose.ymlファイルに定義されたサービスを起動します。これにはdocker compose upコマンドを使用します。
まず、docker-compose.ymlファイルを保存したディレクトリ(~/project)に移動します。
cd ~/project
次に、docker compose upコマンドを実行します。-dフラグを付けるとコンテナがデタッチドモード(バックグラウンド)で実行され、ターミナルがブロックされません。
docker compose up -d
サービスが作成・起動される様子が表示されます。Docker Compose はネットワーク、ボリューム(このシンプルな例では定義していません)、そしてubuntu_service用のコンテナを作成します。
コンテナが実行中か確認するには、docker psコマンドを使用します。
docker ps
ubuntuイメージとsleep infinityコマンドが指定されたコンテナが表示され、ステータスはUpになっているはずです。コンテナ名にはディレクトリ名(この場合はproject)とサービス名(ubuntu_service)がプレフィックスとして付与されます。
docker compose top で稼働中のプロセスを表示
このステップでは、docker compose topコマンドを使用して、Docker Compose で管理されているコンテナ内で実行中のプロセスを表示します。このコマンドは Linux のtopコマンドに似ていますが、コンテナ内で実行中のプロセスを表示します。
まず、docker-compose.ymlファイルがある~/projectディレクトリにいることを確認してください。
cd ~/project
次に、docker compose topコマンドを実行します。
docker compose top
以下のような出力が表示されます:
ID NAME PID COMMAND ELAPSED
<container_id> project-ubuntu_service-1 <pid> sleep infinity <time>
この出力は、docker-compose.ymlファイルで管理されている各コンテナ内で実行中のプロセスを示しています。今回のケースでは、1 つのサービス(ubuntu_service)しかなく、実行中のプロセスはdocker-compose.ymlファイルで指定したsleep infinityコマンドのみです。
出力には以下の情報が含まれます:
ID: コンテナ IDNAME: コンテナ名(通常<ディレクトリ名>-<サービス名>-<インスタンス番号>の形式)PID: コンテナ内で実行中のコマンドのプロセス IDCOMMAND: コンテナ内で実行中のコマンドELAPSED: コマンド開始からの経過時間
このコマンドは、コンテナ内で何が実行されているかを確認したり、問題をトラブルシューティングしたりするのに便利です。
docker compose top で特定サービスのプロセスを表示
このステップでは、docker compose topコマンドを使用して、docker-compose.ymlファイルで定義された特定のサービスのプロセスを表示する方法を学びます。複数のサービスが実行されている場合に、特定のサービスのプロセスのみを確認したい場合に便利です。
まず、~/projectディレクトリにいることを確認してください。
cd ~/project
特定のサービスのプロセスを表示するには、docker compose topコマンドにサービス名を追加します。今回のdocker-compose.ymlファイルでは、サービス名はubuntu_serviceです。
docker compose top ubuntu_service
前のステップと同様の出力が表示されますが、今回はubuntu_serviceコンテナのプロセスのみが表示されます:
ID NAME PID COMMAND ELAPSED
<container_id> project-ubuntu_service-1 <pid> sleep infinity <time>
docker-compose.ymlファイルに他のサービスが定義されており、それらが実行されている場合、サービス名を指定せずにdocker compose topを実行すると、すべてのサービスのプロセスが表示されます。ubuntu_serviceを指定することで、その特定のサービスのコンテナ内のプロセスのみを表示するように出力をフィルタリングしています。
このターゲットを絞ったアプローチは、マルチコンテナアプリケーションの個々のコンポーネントをデバッグしたり監視したりするのに役立ちます。
まとめ
この実験では、Docker Compose で管理される Docker コンテナ内で実行中のプロセスを表示するdocker compose topコマンドの使用方法を学びました。まず、Docker Compose をインストールし、ubuntuイメージを使用してsleep infinityコマンドでコンテナを実行し続けるサービスを定義したシンプルなdocker-compose.ymlファイルを準備しました。
準備が完了した後、docker-compose.ymlファイルで定義されたサービスを起動しました。最後に、docker compose topコマンドの使用方法を探求し、最初にすべてのサービスで実行中のプロセスを表示し、次にサービス名を指定して単一サービスのプロセスのみを表示しました。この実践的な経験を通じて、Docker Compose で管理されるコンテナ内で実行中のプロセスを検査する方法を実証しました。



