HOWTO · Docker

Docker Compose での停止、ダウン、アップ、および開始の違い

この記事では、docker compose の stop、down、up、および start コマンドの違いについて説明します。

このページの内容

Docker Compose には類似したコマンドが複数ありますが、まったく異なる方法で機能します。 いくつかの例は、コマンド docker compose stop と docker compose down およびコマンド docker compose start と docker compose up です。

この記事では、それぞれの違いについて説明します。

docker compose stop と docker compose down の違い

docker compose stop の使用

docker compose stop コマンドを実行する主な機能は、実行中のコンテナーのサービスを停止することです。 このコマンドはコンテナーを停止しますが、必ずしもコンテナーを削除するとは限りません。

たとえば、以下のコマンドは、コンテナー名または ID を指定しない場合、すべてのコンテナーを停止します。

docker compose stop

出力:

Going to stop file, web, test
Stopping file ... done
Stopping web ... done
Stopping test ... done

コンテナー名または ID を指定して、停止するコンテナーを指定できます。

docker compose stop file

出力:

Going to stop file
Stopping file ... done

また、docker compose stop の実行時にシャットダウン タイムアウトを指定することもできます。 Docker は通常、コンテナーを停止する前に 10 秒間待機します。

たとえば、コンテナーが停止するときにもう少し時間がかかることがわかっている場合は、以下に示すように、このタイムアウト値を増やしたい場合があります。

docker compose stop file -t 60

docker compose down の使用

一方、docker compose down コマンドは、プロセスに追加のステップを提供します。 上記のコマンドは、コンテナーと内部で実行されているサービスを停止して削除します。 削除には、コンテナーとネットワークの両方が含まれます。

docker compose down は、docker stop <container name or id> と docker <prune or rm> の両方で順次実行されると同様に機能します。 docker compose down コマンドは、2つのコマンドを組み合わせたショートカットのようなものだと言えます。

したがって、以下の 2つのコマンドを実行する代わりに:

docker compose stop file && docker compose rm -f

代わりに docker compose down を使用できます。

docker compose down file

-v または --volumes フラグを docker compose down コマンドに追加することで、ワンランク上のものにすることができます。 このコマンドは、実行時にコンテナー、そのネットワーク、および接続されているボリュームを停止して削除します。

上記のフラグの追加により、3つのコマンドを 1つのコマンドにまとめました。

docker compose down file -v

docker compose down コマンドは、コンテナーだけでなくイメージにも使用できます。 たとえば、docker compose down --rmi <all or local> コマンドを実行してイメージを削除できます。

このコマンドは、ネイティブ Docker で使用する場合の docker rmi コマンドに似ています。

docker compose start と docker compose up の違い

docker compose start の使用

前のセクションと同じように、コマンド docker compose start と docker compose up は似ているように聞こえますが、機能が異なります。 たとえば、docker compose start コマンドは、以前に停止した特定のコンテナーを再起動します。

docker compose start file

さらに、上記のコマンドは、既に作成されているコンテナーに対してのみ機能します。

では、作成されていないコンテナを直接起動するにはどうすればよいでしょうか? 以下のコマンドを使用できます。

docker compose up の使用

docker compose up コマンドは、docker-compose.yml ファイルに基づいて新しいコンテナーを開始します。 docker create と docker start を順番に実行するのと似ています。

YAML ファイルを使用しているため、1つのコマンドで複数のコンテナーを作成して起動できます。

docker compose up

出力:

Creating file
Creating web
Creating test

docker compose up を使用すると、ソース YAML ファイルに変更があった場合、その YAML ファイルに基づくコンテナーが停止され、再作成されます。

これを避けるために、以下に示すように、docker compose up 中に –-no-recreate オプションを使用できます。 要約すると、コンテナーが既に存在する場合、コマンドはコンテナーを再作成しません。

docker-compose up -d --no-recreate

さらに、docker compose stop と同様に、タイムアウト値を指定できます。

docker-compose up -d -t 30

これは、バニラ Docker 環境で新しいコンテナーを実行および開始するときのコマンド docker run の主要な対応物であるとも言えます。