はじめに
この実験では、docker-compose.ymlファイルで定義された実行中のサービスを一時停止するためにdocker compose pauseコマンドを使用する方法を学びます。まず、Nginx イメージを使用した Web サービスを定義するシンプルなdocker-compose.ymlファイルを作成します。
docker-compose.ymlファイルの作成後、docker compose upを使用してサービスを起動する方法、docker compose pauseを使用して特定の実行中サービスを一時停止する方法、サービスが実際に一時停止されていることを確認する方法、そして最後にdocker compose unpauseを使用してサービスを再開する方法を学びます。この実践的な演習を通じて、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 my-docker-app
cd my-docker-app
my-docker-appディレクトリ内に、docker-compose.ymlという名前のファイルを作成します。このファイルはアプリケーションのサービスを定義します。nanoエディタを使用してこのファイルを作成・編集します。
nano docker-compose.yml
nanoエディタで、以下の内容を貼り付けます。このdocker-compose.ymlファイルは、nginx:latestイメージを使用するwebという単一のサービスを定義しています。
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
このファイルの内容を分解してみましょう:
version: '3.8'- Docker Compose ファイルフォーマットのバージョンを指定services:- アプリケーションを構成するサービスを定義web:- サービス名image: nginx:latest- このサービスで使用する Docker イメージを指定(最新版の Nginx イメージを使用)ports:- ホストとコンテナ間のポートマッピング。"80:80"はホストのポート 80 をコンテナのポート 80 にマッピング
内容を貼り付けた後、Ctrl + X、次にY、最後にEnterを押してファイルを保存します。
サービスを起動する前に、nginx:latestイメージがローカルに存在することを確認する必要があります。存在しない場合、Docker Compose はサービス起動時に自動的にイメージをプルしますが、docker pullコマンドで手動でプルすることもできます。
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
次に、以下のコマンドを実行してサービスを起動します。-dフラグはコンテナをデタッチドモードで実行し、バックグラウンドで動作させます。
docker-compose up -d
このコマンドはdocker-compose.ymlファイルを読み込み、サービス定義に基づいて必要なコンテナを作成し起動します。システムにnginx:latestイメージが存在しない場合、Docker Compose はコンテナ起動前に自動的にイメージをプルします。
ネットワーク、ボリューム(存在する場合)、サービスコンテナが作成・起動されることを示す出力が表示されます。例:
[+] Running 1/1
⠿ Container my-docker-app-web-1 Started
サービスが実行中か確認するには、docker-compose psコマンドを使用します。このコマンドは現在のディレクトリで Docker Compose が管理するコンテナを一覧表示します。
docker-compose ps
以下のような出力が表示され、webサービスコンテナの状態がrunningであることが確認できます:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my-docker-app-web-1 nginx:latest "/docker-entrypoint.…" web 2 minutes ago running 0.0.0.0:80->80/tcp, :::80->80/tcp
また、Nginx ウェブサーバーがアクセス可能か確認するには、curlコマンドでポート 80 のlocalhostにアクセスします。
curl localhost:80
デフォルトの Nginx ウェルカムページの HTML 出力が表示されれば、ウェブサーバーが正常に動作しアクセス可能であることを示しています。
実行中のサービスを一時停止
このステップでは、実行中のwebサービスコンテナを一時停止します。コンテナを一時停止すると、コンテナ内のすべてのプロセスが中断されます。これはコンテナを停止するのとは異なり、停止の場合はコンテナのプロセスが終了します。コンテナが一時停止されると、その状態は凍結され、CPU リソースの消費が最小限になります。
~/project/my-docker-appディレクトリにいることを確認してください。
cd ~/project/my-docker-app
webサービスを一時停止するには、docker-compose pauseコマンドの後にサービス名を指定します。
docker-compose pause web
サービスが一時停止中であることを示す出力が表示されます:
[+] Paused 1/1
⠿ Container my-docker-app-web-1 Paused
次に、docker-compose psを使用してサービスの状態を確認しましょう。
docker-compose ps
出力には、webサービスコンテナの状態がpausedと表示されるはずです:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my-docker-app-web-1 nginx:latest "/docker-entrypoint.…" web 5 minutes ago paused 0.0.0.0:80->80/tcp, :::80->80/tcp
コンテナが一時停止されている場合、リクエストに応答できません。curlを使用して Nginx ウェブサーバーに再度アクセスしてみましょう。
curl localhost:80
このコマンドはハングするかエラーを返す可能性があり、サービスが一時停止されているため応答していないことを示します。これにより、コンテナのプロセスが中断されていることが確認できます。
サービスの一時停止状態を確認
このステップでは、webサービスコンテナが一時停止状態にあることを明示的に確認します。前のステップでdocker-compose psを使用して状態を確認しましたが、Docker コマンドを直接使用して状態を確認することも良いプラクティスです。
まず、~/project/my-docker-appディレクトリにいることを確認してください。
cd ~/project/my-docker-app
docker psコマンドを使用して、実行中(一時停止を含む)のすべてのコンテナを一覧表示できます。出力をフィルタリングしてwebサービスコンテナを見つけ、その状態を確認します。
docker ps --filter "name=my-docker-app-web-1"
このコマンドの出力には、STATUS列にPausedと表示されたコンテナが表示されるはずです。
別の方法として、docker inspectコマンドを使用してコンテナの詳細情報(状態を含む)を取得できます。grepを使用して、出力内の「Paused」状態を特に確認します。
docker inspect my-docker-app-web-1 | grep Paused
このコマンドは"Paused": true,のような行を出力し、コンテナが実際に一時停止されていることを確認します。
前のステップで示したように、curl経由でサービスにアクセスしようとすると失敗するかハングし、コンテナがリクエストをアクティブに処理していないことをさらに示します。
curl localhost:80
このコマンドは Nginx のウェルカムページを返さないはずです。
サービスの一時停止を解除
このステップでは、前のステップで一時停止したwebサービスコンテナを再開します。コンテナの再開を行うと、一時停止時に中断されていたすべてのプロセスが再開されます。
~/project/my-docker-appディレクトリにいることを確認してください。
cd ~/project/my-docker-app
webサービスを再開するには、docker-compose unpauseコマンドの後にサービス名を指定します。
docker-compose unpause web
サービスが再開中であることを示す出力が表示されます:
[+] Unpaused 1/1
⠿ Container my-docker-app-web-1 Unpaused
次に、docker-compose psを使用してサービスの状態を再度確認しましょう。
docker-compose ps
出力には、webサービスコンテナの状態がrunningと表示されるはずです:
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
my-docker-app-web-1 nginx:latest "/docker-entrypoint.…" web 8 minutes ago running 0.0.0.0:80->80/tcp, :::80->80/tcp
コンテナが再開されたため、リクエストに応答できるようになります。curlを使用して Nginx ウェブサーバーにアクセスしてみましょう。
curl localhost:80
Nginx のデフォルトウェルカムページの HTML 出力が表示され、サービスが再開されアクセス可能になったことが確認できます。
最後に、この実験で作成したリソースをクリーンアップするには、docker-compose.ymlファイルで定義されたコンテナ、ネットワーク、ボリュームを停止して削除します。
docker-compose down
このコマンドは実行中のコンテナを停止し、コンテナ、ネットワーク、ボリュームを削除します。
まとめ
この実験では、docker-compose.ymlファイルで定義されたサービスの状態を管理するためにdocker compose pauseコマンドを使用する方法を学びました。まず Docker Compose をインストールし、Nginx イメージを使用した Web サービスを定義するシンプルなdocker-compose.ymlファイルを作成しました。
セットアップ後、docker compose up -dでサービスを起動し、docker compose pause webで実行中のサービスを一時停止させ、その状態を確認し、最後にdocker compose unpause webで再開しました。この実践的な演習を通じて、Docker Compose サービスを一時停止および再開するためのpauseとunpauseコマンドの実用的な活用方法を確認できました。



