はじめに
この実験では、Docker Swarm 環境にデプロイされた Docker スタックを削除するために docker stack rm コマンドを効果的に使用する方法を学びます。まず、シングルノードの Docker Swarm を準備し、初期化してその状態を確認します。
環境設定の後、Docker Compose ファイルを使用してサンプルスタックをデプロイし、デプロイプロセスを理解します。この実験の核心はスタックの削除にあります。まず、デプロイされた単一のスタックを削除する練習を行い、次に複数のスタックをデプロイして、docker stack rm コマンドを使用して複数のスタックを同時に削除する方法を学びます。この実践的な経験を通じて、Docker Swarm のデプロイを管理およびクリーンアップするスキルを身につけることができます。
Docker Swarm 環境を準備する
このステップでは、Docker Swarm を初期化することで、Docker スタックをデプロイするための環境を準備します。Docker Swarm は、Docker のネイティブなクラスタリングおよびオーケストレーションソリューションです。これを使用すると、Docker ノードのスワームを作成および管理することができます。
まず、Docker が実行中でアクセス可能かどうかを確認しましょう。これは、簡単な Docker コマンドを実行することで行えます。
docker version
Docker クライアントとサーバーのバージョンを示す出力が表示されるはずです。これにより、Docker がインストールされて実行中であることが確認できます。
次に、Docker Swarm を初期化する必要があります。これはシングルノード環境なので、現在のマシン上でスワームを初期化します。
docker swarm init
このコマンドはスワームを初期化し、現在のノードをマネージャーノードにします。出力には、他のノードをスワームに参加させる方法に関する情報が表示されますが、この実験では単一のノードのみを使用します。
スワームが正常に初期化されたことを確認するには、スワームの状態を確認できます。
docker info | grep Swarm
出力には Swarm: active と表示され、このノードでスワームがアクティブであることを示します。
最後に、現在のノードがスワームの一部であり、マネージャーであることを確認しましょう。
docker node ls
スワーム内のノードのリストが表示され、現在のノードがリストされ、その状態が Ready および Leader と表示されるはずです。
サンプルスタックをデプロイする
このステップでは、Docker Swarm 上にサンプルアプリケーションをスタックとしてデプロイする方法を学びます。スタックとは、依存関係を共有し、まとめて管理できる関連サービスのグループです。ここでは、Nginx Web サーバーを使用した簡単な例を扱います。
スタックをデプロイする前に、スタック内のサービスを定義する Docker Compose ファイルを作成する必要があります。Docker Compose は、マルチコンテナの Docker アプリケーションを定義して実行するためのツールです。Docker Compose は事前にインストールされていない場合がありますが、docker stack deploy コマンドは Compose ファイルを読み取ることができます。
まず、スタック定義用のディレクトリを作成しましょう。ホームディレクトリに移動し、my-nginx-stack という名前の新しいディレクトリを作成します。
cd ~/project
mkdir my-nginx-stack
cd my-nginx-stack
次に、nano エディタを使用して my-nginx-stack ディレクトリ内に docker-compose.yml という名前のファイルを作成します。
nano docker-compose.yml
以下の内容を docker-compose.yml ファイルに貼り付けます。
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
deploy:
replicas: 1
restart_policy:
condition: on-failure
この docker-compose.yml ファイルは、nginx:latest イメージを使用する web という名前の単一のサービスを定義しています。ホストのポート 80 をコンテナ内のポート 80 にマッピングし、このサービスには 1 つのレプリカが必要であることを指定しています。restart_policy は、サービスが失敗した場合に再起動されることを保証します。
Ctrl + X を押し、次に Y を押し、最後に Enter を押してファイルを保存します。
デプロイする前に、nginx:latest イメージをローカルに取得して利用可能な状態にしましょう。
docker pull nginx:latest
次に、docker stack deploy コマンドを使用してスタックをデプロイします。スタックの名前は nginx_stack とします。
docker stack deploy -c docker-compose.yml nginx_stack
このコマンドは docker-compose.yml ファイルを読み取り、その中で定義されたサービスを nginx_stack の一部として作成します。
スタックがデプロイされ、サービスが実行中であることを確認するには、スタック内のサービスを一覧表示できます。
docker stack services nginx_stack
nginx_stack_web サービスが 1/1 のレプリカで実行中であることを示す出力が表示されるはずです。
また、実行中のコンテナを確認して、Nginx コンテナを確認することもできます。
docker ps
nginx:latest イメージを実行しているコンテナが表示され、nginx_stack_web サービスに関連付けられているはずです。
最後に、Web ブラウザを開き、LabEx VM の IP アドレスにアクセスすることで、Nginx Web サーバーにアクセスできます。デフォルトの Nginx ウェルカムページが表示されるはずです。
単一のスタックを削除する
このステップでは、Docker Swarm からデプロイされたスタックを削除する方法を学びます。スタックを削除すると、そのスタックに関連付けられたすべてのサービスとコンテナが停止され、削除されます。
前のステップで、nginx_stack という名前のスタックをデプロイしました。このスタックを削除するには、docker stack rm コマンドに続けてスタック名を指定します。
docker stack rm nginx_stack
このコマンドは削除プロセスを開始します。Docker Swarm はサービスとそれに関連付けられたコンテナを停止し、削除します。
スタックとそのサービスが削除されていることを示す出力が表示されるはずです。
スタックが削除されたことを確認するには、再度デプロイされたスタックを一覧表示できます。
docker stack ls
nginx_stack はデプロイされたスタックのリストにもう表示されないはずです。
また、実行中のサービスを確認して、nginx_stack_web サービスがもう実行されていないことを確認することもできます。
docker stack services nginx_stack
このコマンドはエラーを返すか、何も出力されないはずです。これは、スタックとそのサービスが削除されたことを示しています。
最後に、実行中のコンテナを確認して、スタックに関連付けられた Nginx コンテナが削除されたことを確認できます。
docker ps
nginx_stack_web サービス用の nginx:latest イメージを実行しているコンテナはもうリストに表示されないはずです。
複数のサンプルスタックをデプロイする
このステップでは、Docker Swarm 上に複数のスタックをデプロイする方法を学びます。これにより、同じ Swarm 内で異なるアプリケーションやサービスを独立して管理できることを示します。
Nginx を使用するスタックと、Apache HTTP Server を使用するスタックの 2 つの簡単なスタックをデプロイします。
まず、Apache スタック定義用のディレクトリを作成しましょう。~/project ディレクトリに戻り、my-apache-stack という名前の新しいディレクトリを作成します。
cd ~/project
mkdir my-apache-stack
cd my-apache-stack
次に、nano エディタを使用して my-apache-stack ディレクトリ内に docker-compose.yml という名前のファイルを作成します。
nano docker-compose.yml
以下の内容を docker-compose.yml ファイルに貼り付けます。
version: "3.8"
services:
web:
image: httpd:latest
ports:
- "81:80"
deploy:
replicas: 1
restart_policy:
condition: on-failure
この docker-compose.yml ファイルは、httpd:latest イメージを使用する web という名前のサービスを定義しています。後でデプロイする Nginx スタックとのポート競合を避けるために、ホストのポート 81 をコンテナ内のポート 80 にマッピングしています。また、1 つのレプリカと再起動ポリシーも指定しています。
Ctrl + X を押し、次に Y を押し、最後に Enter を押してファイルを保存します。
デプロイする前に、httpd:latest イメージを取得しましょう。
docker pull httpd:latest
次に、docker stack deploy コマンドを使用して Apache スタックをデプロイします。このスタックの名前は apache_stack とします。
docker stack deploy -c docker-compose.yml apache_stack
このコマンドにより、Apache スタックがデプロイされます。
次に、Nginx スタックを再度デプロイするために my-nginx-stack ディレクトリに戻りましょう。
cd ~/project/my-nginx-stack
docker stack deploy コマンドを使用して Nginx スタックをデプロイします。このスタックの名前は nginx_stack とします。
docker stack deploy -c docker-compose.yml nginx_stack
ここで、両方のスタックがデプロイされたことを確認しましょう。デプロイされたスタックを一覧表示します。
docker stack ls
apache_stack と nginx_stack の両方がリストに表示されるはずです。
また、各スタックのサービスを個別に確認することもできます。
docker stack services apache_stack
docker stack services nginx_stack
apache_stack_web サービスと nginx_stack_web サービスが、どちらも 1/1 のレプリカで実行されているのが表示されるはずです。
Web ブラウザを開き、LabEx VM の IP アドレスのポート 81 にアクセスすることで、Apache Web サーバーにアクセスできます。デフォルトの Apache ウェルカムページが表示されるはずです。Nginx Web サーバーは引き続きポート 80 でアクセス可能です。
複数のスタックを削除する
この最後のステップでは、Docker Swarm から複数のデプロイされたスタックを削除する方法を学びます。これは単一のスタックを削除する場合と似ていますが、削除したい各スタックに対してこのプロセスを繰り返します。
前のステップで、apache_stack と nginx_stack の 2 つのスタックをデプロイしました。ここでは両方のスタックを削除します。
まず、apache_stack を削除しましょう。docker stack rm コマンドに続けてスタック名を指定します。
docker stack rm apache_stack
apache_stack とそのサービスが削除されていることを示す出力が表示されるはずです。
次に、nginx_stack を削除しましょう。同様に docker stack rm コマンドに続けてスタック名を指定します。
docker stack rm nginx_stack
nginx_stack とそのサービスが削除されていることを示す出力が表示されるはずです。
両方のスタックが削除されたことを確認するには、再度デプロイされたスタックを一覧表示します。
docker stack ls
デプロイされたスタックのリストには、apache_stack も nginx_stack も表示されないはずです。
また、実行中のコンテナを確認して、両方のスタックに関連付けられたコンテナが削除されたことを確認することもできます。
docker ps
これらのスタックの一部であった httpd:latest または nginx:latest イメージを実行しているコンテナは表示されないはずです。
これで、Docker スタックのデプロイと削除に関する実験は終了です。あなたは Docker Swarm を正常に初期化し、単一および複数のスタックをデプロイし、削除することができました。
まとめ
この実験では、シングルノードの Swarm を初期化してその状態を確認することで、Docker Swarm 環境を準備する方法を学びました。次に、Docker Compose ファイルを使用してサンプルアプリケーションをスタックとしてデプロイする練習を行いました。最後に、docker stack rm コマンドを使って Docker Swarm から単一および複数のデプロイされたスタックを削除する方法を習得し、デプロイ後のリソースのクリーンアッププロセスを実演しました。



