docker service rollback コマンドを使ってサービスの更新を元に戻す方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、Docker Swarm 環境においてサービスの更新を効果的に管理する方法を学びます。まず、コンテナ化されたアプリケーションのデプロイとスケーリングの基礎となる Docker Swarm サービスを作成します。

サービスを作成した後、サービスの設定を更新し、一般的なデプロイメントシナリオをシミュレートします。この実験の核心は、docker service rollback コマンドを使用してサービスを前の安定したバージョンに戻す方法を示すことです。最後に、ロールバック後のサービスの設定を確認し、復元が成功したことを確認します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ls -.-> lab-555230{{"docker service rollback コマンドを使ってサービスの更新を元に戻す方法"}} docker/ps -.-> lab-555230{{"docker service rollback コマンドを使ってサービスの更新を元に戻す方法"}} docker/inspect -.-> lab-555230{{"docker service rollback コマンドを使ってサービスの更新を元に戻す方法"}} docker/create -.-> lab-555230{{"docker service rollback コマンドを使ってサービスの更新を元に戻す方法"}} docker/pull -.-> lab-555230{{"docker service rollback コマンドを使ってサービスの更新を元に戻す方法"}} end

Docker Swarm サービスの作成

このステップでは、Docker Swarm サービスを作成する方法を学びます。Docker Swarm サービスは、Swarm クラスタ上で実行されるタスクのセットです。各タスクはコンテナのインスタンスです。サービスは Docker Swarm の中心的な概念であり、コンテナイメージのレプリカをいくつ実行するか、およびそれらをどのように更新するかを定義できます。

サービスを作成する前に、Docker Swarm を初期化する必要があります。単一の仮想マシン (VM) 上で実行しているため、シングルノードの Swarm を初期化します。

まず、Swarm を初期化しましょう。

docker swarm init --advertise-addr 127.0.0.1

Swarm が初期化され、現在のノードがマネージャになったことを示す出力が表示されるはずです。

次に、nginx イメージを使用してサービスを作成しましょう。サービスの名前を my-nginx とし、nginx コンテナのレプリカを 3 つ実行するように指定します。

まず、nginx イメージをプルして、ローカルで利用可能なことを確認します。

docker pull nginx:latest

次に、サービスを作成します。

docker service create --name my-nginx --replicas 3 nginx:latest

このコマンドは、nginx:latest イメージを使用して 3 つのレプリカを持つ my-nginx という名前の新しいサービスを作成します。Docker Swarm は、これらのレプリカを Swarm 内のノードに自動的に分散させます (この場合は、単一のノードのみ)。

サービスが作成され、レプリカが実行されていることを確認するには、サービスを一覧表示できます。

docker service ls

my-nginx が 3/3 のレプリカが実行されている状態で表示されるはずです。

また、サービスに関連付けられたタスクを調査することもできます。

docker service ps my-nginx

このコマンドは、my-nginx サービスを構成する個々のタスク (コンテナ)、それらの現在の状態、および実行されているノードを表示します。3 つのタスクが Running 状態で表示されるはずです。

サービスを新しい設定に更新する

このステップでは、my-nginx サービスを更新して、nginx イメージの別のバージョンを使用するようにします。これは、Docker Swarm でサービスのローリングアップデートを実行する方法を示すものです。

まず、nginx:1.21 イメージをプルしましょう。これは、サービスを更新する対象となる Nginx の特定のバージョンです。

docker pull nginx:1.21

次に、my-nginx サービスを更新して、nginx:1.21 イメージを使用するようにします。また、レプリカの数を 5 に変更します。

docker service update --image nginx:1.21 --replicas 5 my-nginx

このコマンドは、Docker Swarm に my-nginx サービスを更新するよう指示します。--image nginx:1.21 フラグは使用する新しいイメージを指定し、--replicas 5 フラグはレプリカの希望する数を 5 に変更します。Docker Swarm はローリングアップデートを実行し、古いコンテナを指定されたイメージを実行する新しいコンテナに置き換え、レプリカの数を調整します。

サービスタスクを一覧表示することで、更新の進行状況を監視できます。

docker service ps my-nginx

nginx:1.21 イメージで新しいタスクが作成され、古いタスクがシャットダウンされるのが見られるでしょう。最終的に、すべてが nginx:1.21 イメージを使用する 5 つのタスクが Running 状態で表示されるはずです。

また、サービスの詳細を確認して更新を確認することもできます。

docker service inspect my-nginx --pretty

出力の ImageReplicas フィールドを確認し、それぞれ nginx:1.21 と 5 に更新されていることを確認してください。

サービスを前のバージョンにロールバックする

このステップでは、my-nginx サービスを前の設定にロールバックします。Docker Swarm は以前のサービス設定を追跡しており、更新に問題が生じた場合には、既知の正常な状態に簡単に戻すことができます。

サービスをロールバックするには、--rollback フラグを使用して docker service update コマンドを実行します。

docker service update --rollback my-nginx

このコマンドは、Docker Swarm に my-nginx サービスを最後の更新前の設定にロールバックするよう指示します。この場合、これは nginx:latest イメージと元のレプリカ数(3 つ)に戻すことを意味します。

サービスタスクを一覧表示することで、ロールバックのプロセスを監視できます。

docker service ps my-nginx

nginx:1.21 イメージを実行しているタスクがシャットダウンされ、nginx:latest イメージを実行する新しいタスクが作成されるのが見られるでしょう。タスクの数も前のレプリカ数に戻ります。

ロールバックが完了すると、nginx:latest イメージを実行しているタスクが表示され、レプリカの数が 3 に戻っているはずです。

また、サービスの詳細を調べてロールバックを確認することもできます。

docker service inspect my-nginx --pretty

出力の ImageReplicas フィールドを確認してください。これらは、最後の更新前の設定を反映しているはずです。

ロールバック後のサービス設定を検証する

このステップでは、my-nginx サービスが前の設定に正常にロールバックされたことを明示的に検証します。これには、サービスで使用されているイメージとレプリカの数の両方を確認する作業が含まれます。

まず、現在の状態を確認するためにサービスを一覧表示しましょう。

docker service ls

my-nginx が一覧に表示され、REPLICAS 列には 3/3 と表示されるはずです。これは、希望するレプリカ数が 3 で、現在 3 つが実行中であることを示しています。

次に、イメージとレプリカ数を確認するためにサービスの詳細を調べましょう。

docker service inspect my-nginx --pretty

出力で Image フィールドを探してください。これは現在 nginx:latest であるはずです。また、Replicas フィールドを探し、それが 3 であることを確認してください。

最後に、実行中のコンテナが正しいイメージを使用していることを確認するために、サービスに関連付けられたタスクを確認しましょう。

docker service ps my-nginx

3 つのタスクが一覧表示され、各タスクの IMAGE 列は nginx:latest であるはずです。すべてのタスクの CURRENT STATERunning であるはずです。

これらのチェックを行うことで、ロールバックが成功し、サービスが希望する前の状態で実行されていることを確信できます。

まとめ

この実験では、Docker Swarm サービスの管理方法、特にサービスの作成と更新について学びました。まず、シングルノードの Docker Swarm を初期化し、nginx:latest イメージを使用して 3 つのレプリカを持つ my-nginx という名前のサービスを作成しました。docker service lsdocker service ps を使用して、サービスの作成と実行中のタスクを確認しました。

サービスを作成した後、サービス設定の更新方法を調べました。これには、サービスで使用するイメージを変更する作業が含まれており、Swarm 環境でのサービス更新の一般的なシナリオを示しています。