DockerComposeを使用して単一のコンテナーを再起動します
1. 概要
このチュートリアルでは、 DockerComposeを使用して単一のDockerコンテナを再起動する方法を学習します。
2. Docker Compose restartコマンド
Docker Composeは、複数のコンテナーを単一のサービスとして管理するためのツールです。 ただし、Docker Compose CLIには、単一のコンテナーに適用できるコマンドが含まれています。 たとえば、 restartコマンドを使用すると、実行中の他のサービスに影響を与えることなく、再起動するサービスの名前を指定できます。
docker-compose restart service-name
restart コマンドの実行に入る前に、作業環境をセットアップしましょう。
3. 設定
Docker Composeコマンドを実行するには、Dockerコンテナーが必要です。 以前のBaeldungプロジェクトspring-cloud-docker を使用します。これは、Docker化されたSpring Bootアプリケーションです。 このプロジェクトには2つのDockerコンテナーがあり、他のサービスに影響を与えることなく1つのサービスを再起動できることを証明するのに役立ちます。
まず、プロジェクトのルートから次のコマンドを実行して、両方のコンテナーを実行できることを確認する必要があります。
docker-compose up --detach --build
これで、 docker-compose ps を実行することで、両方のサービスが実行されていることを確認できるはずです。
$ docker ps
Name Command State Ports
--------------------------------------------------------------------------------
message-server java -jar /message-server.jar Up 0.0.0.0:18888->8888/tcp
product-server java -jar /product-server.jar Up 0.0.0.0:19999->9999/tcp
さらに、ブラウザで localhost:18888またはlocalhost:19999 に移動し、アプリケーションサービスによって表示されるメッセージが表示されることを確認できます。
4. 単一のコンテナの再起動
これまで、Docker Composeによって2つのコンテナが実行され、単一のサービスとして管理されてきました。 次に、 restart コマンドを使用して、2つのコンテナーのうち1つだけを停止および開始する方法を見てみましょう。
4.1. 再構築せずに再起動
両方のコンテナが実行されている状態で、再起動するサービスの1つを選択します。 この場合、message-serverコンテナを使用します。
docker-compose restart message-server
ターミナルでコマンドを実行すると、次のメッセージが表示されるはずです。
Restarting message-server ... done
端末が別のコマンドの入力を求めたら、Dockerコマンド ps を実行して実行中のすべてのプロセスの状態を確認することにより、message-serverが正常に再起動されたことを確認できます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6541d1c4ddf product-server:latest "java -jar /product-…" 10 minutes ago Up 42 seconds 0.0.0.0:19999->9999/tcp product-server
1d07d2a7ed7d message-server:latest "java -jar /message-…" 10 minutes ago Up 15 seconds 0.0.0.0:18888->8888/tcp message-server
最後に、 STATUS 列を確認することで、コマンドがメッセージサーバーコンテナーを正常に再起動したことを確認できます。 メッセージサーバーサービスが、docker-を実行してから稼働していたproduct-serverサービスよりも短い期間稼働していることがわかります。前のセクションでコマンドを作成します。
4.2. 再構築と再起動
コンテナを最新のコードで更新する必要がある場合は、コードの変更を取得するためにサービスを最初にビルドする必要があるため、restartコマンドを実行するだけでは不十分です。
両方のコンテナが実行されている状態で、最初にコードを変更して、再起動する前にサービスを最新のコードで更新することを確認しましょう。 DockerProductController クラスで、returnステートメントを次のように変更してみましょう。
public String getMessage() {
return "This is a brand new product";
}
それでは、Mavenパッケージをビルドしましょう。
mvn clean package
これで、product-serverコンテナを再起動する準備が整いました。 これは、サービスの開始方法と同様に実現できますが、今回は、再起動するコンテナーの名前を指定することで実現できます。
コマンドを実行して、コンテナを再構築して再起動しましょう。
docker-compose up --detach --build product-server
これで、 docker ps を実行し、出力を確認することで、 product-servercontainerが最新のコードで再起動したことを確認できます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78a4364e75e6 product-server:latest "java -jar /product-…" 6 seconds ago Up 5 seconds 0.0.0.0:19999->9999/tcp product-server
b559f742973b message-server:latest "java -jar /message-…" 22 minutes ago Up 22 minutes 0.0.0.0:18888->8888/tcp message-server
ご覧のとおり、product-serverはCREATED値とSTATUS値の両方を変更しました。これは、サービスが最初に再構築され、その後に影響を与えることなく再起動されたことを示しています。 メッセージサーバー。
さらに、ブラウザで localhost:19999 に移動し、出力が最新であることを確認することで、コードが更新されたことをさらに確認できます。
5. 結論
この記事では、DockerComposeを使用して単一のコンテナーを再起動する方法を学習しました。 これを実現するための2つの方法について説明しました。
まず、 restart コマンドを使用して、サービスの名前を付けて再起動しました。 次に、コードを変更して、最新のコードを再構築し、他のコンテナーに影響を与えることなく1つのコンテナーを再起動できることを示しました。