【初心者向け】Dockerコンテナを削除する方法まとめ|実行中・停止中・一括削除も丁寧に解説!

Docker

Dockerを使っていると、使わなくなったコンテナがどんどん増えていきます。

docker ps -a がごちゃごちゃして見づらい…」
「容量を圧迫している…」
そんなときは不要なコンテナを削除してスッキリさせましょう。

この記事では、Dockerコンテナを削除する方法を、状態別(停止中・実行中)や一括削除も含めてわかりやすく解説します。

スポンサーリンク

コンテナ削除の前に知っておくべき基本

Dockerコンテナは、その状態によって削除方法が異なります。

削除操作を行う前に、いくつかの基本的な概念を理解しておきましょう。

コンテナの状態について

状態表示削除可否備考
停止中Exited通常の削除可能標準的な削除対象
実行中Up通常は削除不可強制オプションが必要
一時停止中Paused通常は削除不可再開か強制削除が必要
起動失敗Created削除可能不完全な状態のコンテナ

コンテナとイメージの違い

初心者がよく混乱するのが、コンテナとイメージの違いです。

  • イメージ: アプリケーションとその依存関係を含む読み取り専用のテンプレート
  • コンテナ: イメージから作成された実行可能なインスタンス

イメージの削除には docker rmi を使いますが、この記事ではコンテナの削除 docker rm に焦点を当てています。

停止中のコンテナを削除する

停止中のコンテナは、最も基本的なケースです。

基本コマンド

docker rm コンテナ名またはID

docker rm my-nginx

このコマンドで、my-nginx という名前のコンテナが削除されます(停止している場合)。

IDを使った削除例

docker rm a1b2c3d4e5f6

コンテナIDは長いので、先頭数文字だけで指定することも可能です:

docker rm a1b2c3

複数のコンテナを同時に削除

スペースで区切って複数指定できます:

docker rm my-nginx my-mysql my-redis

または、IDを並べる:

docker rm a1b2c3 d4e5f6 g7h8i9

削除の確認

削除が成功すると、削除されたコンテナのIDまたは名前が表示されます:

my-nginx

削除に失敗した場合(例:実行中のコンテナ)はエラーメッセージが表示されます:

Error response from daemon: You cannot remove a running container. Stop the container before attempting removal or force remove

実行中のコンテナを強制削除する方法

基本的に、実行中のコンテナは保護のために直接削除できません。しかし、緊急時や開発環境では強制削除が必要なことがあります。

強制削除コマンド

docker rm -f コンテナ名またはID

-f または --force オプションを使うことで、実行中のコンテナを強制的に停止してから削除します。

docker rm -f my-app

これにより、my-app という名前のコンテナが実行中であっても強制的に停止され、削除されます。

注意点

強制削除は、コンテナが正常なシャットダウン処理を行う時間を与えません。そのため:

  • 書き込み中のデータが破損する可能性がある
  • アプリケーションの終了処理が実行されない
  • 依存関係のあるコンテナへの影響がある場合がある

可能であれば、まず docker stop で正常に停止してから削除する方が安全です:

docker stop my-app
docker rm my-app

すべてのコンテナを一括削除する方法

たくさんのコンテナを整理したい場合、一括削除が便利です。

停止中のコンテナだけを一括削除

docker container prune

実行すると確認メッセージが表示されます:

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N]

y と入力して Enter キーを押すと、停止中のコンテナがすべて削除されます。

実行中も含めてすべてのコンテナを削除する(危険)

docker rm -f $(docker ps -aq)

このコマンドは:

  1. docker ps -aq ですべてのコンテナIDを取得
  2. docker rm -f で、それらをすべて強制削除

警告: これは実行中のコンテナも含めてすべてを削除します。

本番環境では絶対に使用しないでください。

フィルタを使った選択的な一括削除

特定の条件に合うコンテナだけを削除したい場合:

# 3日以上前に終了したコンテナを削除
docker container prune --filter "until=72h"

# 特定のラベルが付いたコンテナだけを削除
docker rm $(docker ps -a --filter "label=environment=test" -q)

名前やIDを確認する便利なコマンド

削除前に、どのコンテナを削除するか確認することが重要です。

現在起動中のコンテナを確認

docker ps

すべてのコンテナ(停止中も含む)を確認

docker ps -a

削除対象を絞り込んで確認

# 名前で絞り込み
docker ps -a --filter "name=nginx"

# 特定のイメージから作られたコンテナを表示
docker ps -a --filter "ancestor=mysql:5.7"

# 終了ステータスが0以外(エラー終了)のコンテナを表示
docker ps -a --filter "exited=1"

表示を簡略化する

# IDと名前だけを表示
docker ps -a --format "{{.ID}}: {{.Names}}"

# 整形された表でステータスと名前を表示
docker ps -a --format "table {{.Names}}\t{{.Status}}"

コンテナ削除時の注意点

コンテナを削除する際は、以下の点に注意しましょう。

データの消失

重要: コンテナを削除すると、コンテナ内に保存されていたデータはすべて失われます。データを保持したい場合は、Dockerボリュームを使用するか、削除前にデータをバックアップしてください。

# ボリュームを使用するコンテナの例
docker run -v my_data:/app/data nginx

停止と削除の違い

コンテナの停止は一時的な処理の中断、削除は完全な破棄です:

  • 停止(docker stop):コンテナのプロセスを終了するが、構成や状態は保持される
  • 削除(docker rm):コンテナの構成、状態、内部データをすべて破棄する

関連リソースの削除

コンテナを削除しても、関連するボリュームやネットワークは自動的には削除されません。必要に応じて手動で削除します:

# 未使用ボリュームを削除
docker volume prune

# 未使用ネットワークを削除
docker network prune

docker-compose環境でのコンテナ削除

docker-compose を使っている場合は、独自のコマンドを使うのが安全です:

# docker-composeで管理されているコンテナを停止して削除
docker-compose down

# ボリュームも含めて完全に削除する場合
docker-compose down -v

まとめ

不要なコンテナを削除すれば、ストレージの節約や操作の整理にもつながります。

ポイント:

  • docker rm コンテナ名/ID で停止中のコンテナを削除
  • -f オプションで実行中のコンテナも強制削除可能
  • docker container prune で停止中のコンテナを一括削除
  • 削除前に docker ps -a で対象を確認するのが安全
  • コンテナ内のデータは削除すると失われるので注意

便利な使い方例:

# 開発作業終了時のクリーンアップ
docker stop $(docker ps -q)  # すべてのコンテナを停止
docker container prune  # 停止したコンテナを削除

# 特定のパターンにマッチするコンテナだけを削除
docker rm $(docker ps -a | grep "pattern" | awk '{print $1}')

# システムの全体クリーンアップ(開発環境向け)
docker system prune -a  # 未使用のコンテナ、イメージ、ネットワーク、ボリュームをすべて削除

コンテナの整理は、Docker運用をスムーズにする大切な作業です。定期的に実行して、クリーンな開発環境を維持しましょう!

コメント

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