Dockerを使っていると、コンテナの起動に関する次の2つのコマンドをよく目にします。
docker container startdocker container restart
どちらのコマンドもコンテナの「起動」に関係するため名前が似ているので、「どっちを使えばいいのか?」「具体的にどう動作が違うのか?」と迷う人は多いと思います。
そこで、この記事ではdocker container startとdocker container restartの動きの違い・使い分けをわかりやすく解説します。
docker container startとrestartの違い
docker container startとdocker container restartの違いを一言でまとめるとこうなります。
| コマンド | 動作の内容 |
|---|---|
docker container start | 停止しているコンテナをそのまま起動する |
docker container restart | コンテナをいったん停止してから再起動する |
つまりdocker container restartは内部的に「docker container stop → docker container start」の二つの処理を続けて実行するイメージです。
docker container startの動作
docker container startは、次のように停止中のコンテナをそのまま起動するだけのシンプルなコマンドです。
# 停止中のコンテナに対してstartを実行した場合
[停止中] ──▶ start ──▶ [起動]docker container startは、あくまで停止していたコンテナ動かすコマンドなので、停止中のコンテナに対して実行します。
docker container restartの動作
docker container restartは、次のようにコンテナをいったん停止してから再起動するコマンドです。
# 起動中のコンテナに対してrestartを実行した場合
[起動中] ──▶ stop ──▶ start ──▶ [再起動]
# 停止中のコンテナに対してrestartを実行した場合
[停止中] ──▶ start ──▶ [起動]内部ではdocker container stopが実行され、アプリケーションは完全に終了し、そのあとにdocker container startが走るという順序です。つまりdocker container restartを実行すると、コンテナ内のアプリケーションはゼロから再スタートするため、設定変更を反映したい場面や、アプリがフリーズしてしまった場合に有効です。
なお、docker container restartはすでに停止しているコンテナに対しても使用できます。その場合は停止状態から通常の起動処理が行われますので、docker container startと実質同じです。
docker container startとrestartの使い分け
では、どのようなときにdocker container startとdocker container restartを使い分ければよいのでしょうか。
もし単純に「停止しているコンテナを再び動かしたいだけ」という状況であればdocker container startを使うのが適しています。たとえばPCを再起動した後や、Docker自体が停止した後など、コンテナが一斉に停止状態になってしまった場面ではdocker container startで十分です。また、docker container stopで停止させたあと、再度動かす場合も同様にdocker container startを使えば問題ありません。
一方でdocker container restartを使うべきなのは、明確に「再起動が必要なとき」です。具体的には、コンテナ内のアプリがフリーズして応答しなくなったとき、設定ファイルや環境変数を変更してその内容を反映したいとき、またはdocker container stopとdocker container startを手作業で2回実行するのが面倒なときなどです。docker container restartを使えばstopとstartの2段階の操作がまとめて実行されるため、コンテナを確実にリフレッシュしたいときに非常に便利です。
たとえばnginxコンテナを停止して再度起動する場合、通常なら次のように2行のコマンドが必要です。
docker container stop nginx
docker container start nginxしかし同じ処理をrestartを使えば、次の1行だけで完了します。
docker container restart nginx本記事のまとめ
この記事では『docker container startとdocker container restartの動きの違い・使い分け』について説明しました。
docker container startとdocker container restartは役割が明確に異なるため、状況に応じて正しく使い分けることが大切です。単純に「止まっていたものを動かしたいだけ」であればdocker container start、内部の状態を一度リセットして再起動したいときにはdocker container restartを選ぶと覚えておくと、Dockerコンテナ運用がよりスムーズになります。
お読みいただきありがとうございました。