docker compose pause コマンドでサービスを一時停止する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、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 サービスのライフサイクル管理に関する実用的な経験を得ることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555084{{"docker compose pause コマンドでサービスを一時停止する方法"}} docker/ps -.-> lab-555084{{"docker compose pause コマンドでサービスを一時停止する方法"}} docker/inspect -.-> lab-555084{{"docker compose pause コマンドでサービスを一時停止する方法"}} docker/pull -.-> lab-555084{{"docker compose pause コマンドでサービスを一時停止する方法"}} end

シンプルな 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 サービスを一時停止および再開するためのpauseunpauseコマンドの実用的な活用方法を確認できました。