【Docker】コンテナのライフサイクル管理(ps・stop・rm)

Docker

こんにちは、かつコーチです。
前回の記事でdocker runの使い方を学び、コンテナを起動できるようになりました。
ただ、起動するだけでは終わりません。
実務では、動いているコンテナを確認し、止め、不要になったら片付けるという「管理」が欠かせません。
今回は、コンテナの一生(ライフサイクル)を管理する、psstoprmの3つのコマンドを解説します。

コンテナのライフサイクルとは

作成→起動→停止→削除という一連の流れ

コンテナには、人間の一日の過ごし方に似た「ライフサイクル」があります。
朝起きて活動し、夜に休み、最終的には片付けをするように、コンテナも「作成される→起動する→停止する→削除される」という流れをたどります。
docker runは、このうち「作成」と「起動」を一気に行うコマンドでした。
今回扱うstopは「停止(就寝)」、rmは「削除(片付け)」にあたる操作です。
それぞれの状態を正しく把握することが、コンテナ管理の第一歩です。

なぜ管理コマンドを使い分ける必要があるのか

コンテナを起動しっぱなしにすると、パソコンのメモリやCPUを無駄に消費し続けます。
また、停止しただけで削除しないコンテナが溜まっていくと、docker ps -aの一覧が見づらくなり、名前の重複エラーにも悩まされやすくなります。
状態を正しく確認しながら、必要なタイミングで停止・削除を行う習慣が、快適なDocker利用の鍵になります。

状態確認・停止・削除の基本操作

docker psで稼働中コンテナを確認する

現在動いているコンテナは、docker psで確認します。

docker ps
CONTAINER ID   IMAGE   COMMAND                  STATUS         PORTS                  NAMES
a1b2c3d4e5f6   nginx   "/docker-entrypoint.…"   Up 5 minutes   0.0.0.0:8080->80/tcp   my-nginx

STATUS列にUpと表示されているコンテナが、現在稼働中のものです。
停止中のコンテナも含めて全件確認したい場合は、前回も紹介した-aオプションを付けます。

docker ps -a

docker start / docker stopで起動・停止を切り替える

不要になったコンテナは、削除する前にまず停止します。

docker stop my-nginx

コンテナ名またはコンテナIDを指定するだけで停止できます。
停止したコンテナは削除されたわけではなく、データも残っているため、再度起動することも可能です。

docker start my-nginx

docker startは、既に作成済みのコンテナを再起動するコマンドで、docker runとは異なり新しいコンテナを作りません。
この違いを理解しておくと、「もう一度docker runしたら同じ名前でエラーになった」という混乱を避けられます。

docker rmでコンテナを削除する

完全に不要になったコンテナは、docker rmで削除します。

docker rm my-nginx

削除すると、コンテナ内に保存していたデータも一緒に消えるため、実行前に本当に不要か確認する習慣をつけましょう。
データを消したくない場合の対処法は、ボリュームを扱う回で詳しく紹介します。

よくあるつまずきポイント

Before/After:稼働中コンテナを削除しようとしてエラーになる

稼働中のコンテナをそのまま削除しようとして、エラーにぶつかるのはよくあるパターンです。

❌Before:停止せずにdocker rmを実行する

docker rm my-nginx
Error response from daemon: cannot remove container "my-nginx":
container is running: stop the container before removing or force remove

私も検証環境の整理をしていたときに、動いたままのコンテナをまとめて削除しようとし、このエラーメッセージにいくつも遭遇しました。
Dockerは、安全のために稼働中のコンテナをそのままでは削除させない仕様になっています。

✅After:先に停止してから削除する、または-fで強制削除する

docker stop my-nginx
docker rm my-nginx

# もしくは1回で強制削除する
docker rm -f my-nginx

正攻法はstopしてからrmする2段階ですが、-f(force)オプションを付ければ、稼働中でも強制的に停止・削除を1コマンドで行えます。
急いでいるときは-fが便利ですが、実行中の処理を強制終了させるため、重要な処理をしているコンテナには使わないよう注意しています。

応用・一歩先の使い方

docker container pruneで停止中コンテナをまとめて掃除する

停止したコンテナが増えてくると、1つずつdocker rmするのは手間です。
そんなときは、docker container pruneコマンドが便利です。

docker container prune

実行すると、停止中の全コンテナを削除してよいか確認された後、まとめて削除してくれます。
定期的に実行してコンテナ環境を掃除しておくと、ディスク容量の圧迫や名前の重複エラーを未然に防げます。

まとめ

この記事のポイント

  • コンテナには「作成→起動→停止→削除」というライフサイクルがある
  • docker ps-aで全件)で状態を確認できる
  • docker stopで停止、docker startで再起動、docker rmで削除する
  • 稼働中のコンテナはそのままでは削除できず、先に停止するか-fで強制削除する
  • docker container pruneで停止中コンテナをまとめて掃除できる

次に読むべき記事

コンテナの元になるイメージ側の管理は「イメージ管理(images・pull・rmi)の基本」で解説します。
複数コンテナをまとめて管理したい方は、docker-composeを扱う回もぜひご覧ください。

タグ: Docker, 初心者向け, 基本操作

タイトルとURLをコピーしました