Docker コンテナを再起動する

David Mbochi Njonge 2023年6月20日
  1. Docker Hub から Nginx イメージをプルする
  2. イメージからコンテナーを実行する
  3. 実行中のコンテナを再起動する
  4. 停止したコンテナを再起動する
  5. Docker コンテナがすぐに終了する
  6. まとめ
Docker コンテナを再起動する

以前バックグラウンドで実行されていたコンテナが停止した場合、docker はコンテナを再起動するために使用できるいくつかのコマンドを提供します。

このチュートリアルでは、バックグラウンドで実行されている Nginx サーバーで docker コンテナーを再起動する方法を学習します。 また、一部のコマンドがコンテナーの即時終了につながる方法についても学習します。

Docker Hub から Nginx イメージをプルする

まず、Docker Hub から Nginx イメージをプルして、そこからイメージを実行する必要があります。 ただし、Dockerfile を使用してカスタム イメージを作成できます。

コンピューターでターミナル ウィンドウを開き、以下のコマンドを使用してイメージをプルします。

~$ docker pull nginx:alpine

イメージからコンテナーを実行する

このセクションでは、バックグラウンドで Nginx サーバーを使用してコンテナーを実行します。 次のコマンドを使用して、web-app という名前のコンテナーを実行します。

~$ docker run --name web-app -d -p 8000:80 nginx:alpine

このコマンドでは、--name フラグを使用してコンテナーの名前を作成しました。 さらに、コンテナをバックグラウンドで実行できるフラグ -d も使用しました。

最後に、コンテナーのポートをホストに公開するための -p フラグを追加しました。 次のコマンドを使用して、コンテナーが稼働中であることを確認できます。

~$ docker ps

出力:

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                  NAMES
c18fa4102fb2   nginx:alpine   "/docker-entrypoint.…"   5 seconds ago   Up 3 seconds   0.0.0.0:8000->80/tcp   web-app

実行中のコンテナを再起動する

コンテナを再起動するために使用できるアプローチは 2つあります。 最初のアプローチは docker start コマンドを使用し、2 番目のアプローチは docker restart コマンドを使用します。

docker start コマンドは停止したコンテナを起動するために使用され、docker restart コマンドは実行中のコンテナを再起動するために使用されます。

コンテナーは既に実行されているため、次のコマンドを使用して web-app コンテナーを再起動します。

~$ docker restart web-app

以下のコマンドを使用して、コンテナーの再起動後にコンテナーが稼働中であることを確認します。

~$ docker ps

出力:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS        PORTS                  NAMES
c18fa4102fb2   nginx:alpine   "/docker-entrypoint.…"   20 minutes ago   Up 1 second   0.0.0.0:8000->80/tcp   web-app

停止したコンテナを再起動する

このアプローチは、前のアプローチと同じです。 実行中のコンテナを停止するには、docker stop コマンドを使用する必要があります。

コンテナが停止したら、docker start コマンドを使用して、停止したコンテナを再起動します。 次のコマンドを実行して、これが実際にどのように機能するかを確認します。

~$ docker stop web-app

出力:

web-app

docker ps -a コマンドを実行して実行中および停止中のすべてのコンテナーを一覧表示すると、web-app コンテナーのステータスが終了していることがわかります。これは、コンテナーが停止したことを意味します。

~$ docker ps -a

出力:

CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS                          PORTS      NAMES
c18fa4102fb2   nginx:alpine     "/docker-entrypoint.…"   32 minutes ago   Exited (0) About a minute ago              web-app

最後に、次のコマンドを使用してコンテナーを再起動します。

~$ docker start web-app && docker ps

出力:

web-app
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                  PORTS                  NAMES
c18fa4102fb2   nginx:alpine   "/docker-entrypoint.…"   37 minutes ago   Up Less than a second   0.0.0.0:8000->80/tcp   web-app

Docker コンテナがすぐに終了する

前のセクションのコンテナーは、コンテナーがバックグラウンドで実行されている Nginx プロセスを持っていたため、終了しませんでした。

プロセスの実行が終了すると、docker コンテナーがすぐに終了する場合があります。 これを説明するために、次のコマンドを実行して temp-web-app という名前の新しいコンテナーを作成します。

~$ docker run -w /com/web-app/ --name temp-web-app -p 8080:80  nginx:alpine pwd

出力:

/com/web-app

このコマンドは、作業ディレクトリ /com/web-app を出力した直後に終了することに注意してください。 これは、メイン プロセスが pwd コマンドを実行すると、コンテナーが終了するためです。

したがって、上記のようなコマンドは、サーバー、データベース、またはアプリケーション プロセスでコンテナーを実行するためではなく、テスト目的で使用する必要があります。 以下のコマンドを使用して、temp-web-app コンテナーのステータスを確認します。

CONTAINER ID   IMAGE            COMMAND                  CREATED             STATUS                      PORTS                  NAMES
fb051673c15f   nginx:alpine     "/docker-entrypoint.…"   14 minutes ago      Exited (0) 3 minutes ago                           temp-web-app

初期起動時にデフォルトのコマンドが設定されるため、コンテナを再起動しようとしても機能しません。 つまり、コンテナーのメイン プロセスが終了する pwd コマンドを実行した後、コンテナーは常に終了します。

まとめ

このチュートリアルでは、docker でコンテナを再起動する方法を学びました。 実行中および停止中のコンテナーを開始する方法について説明しました。

バックグラウンドでプロセスを実行せずにすぐに終了するコンテナを実行する目的を学びました。

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

関連記事 - Docker Container