更新: 2026年03月 · 9 分で読める · 4,626 文字
Dockerコンテナを確実に削除する方法と依存関係の処理
Dockerを運用していると、不要になったコンテナが蓄積し、ディスク容量を圧迫します。本記事では、単一コンテナから関連リソースまで、実務で必要な削除パターンをすべて解説します。停止中のコンテナ削除、実行中のコンテナ強制終了、関連イメージやボリュームの一括削除など、すぐに仕事で活用できる実践的なコマンドを紹介します。
Dockerコンテナ削除の基本コマンド
停止中のコンテナを削除する
最も基本的な削除方法は、停止状態のコンテナをdocker rmコマンドで削除することです。実行中のコンテナは削除できないため、まず停止する必要があります。
# コンテナを停止してから削除
docker stop my-container
docker rm my-container
# または、コンテナIDで指定
docker rm abc123def456
複数のコンテナを一度に削除する場合は、スペースで区切って指定します。
# 複数のコンテナを同時削除
docker rm container1 container2 container3
実行中のコンテナを強制削除する
実行中のコンテナをすぐに削除したい場合、-f(--force)フラグを使用します。先に停止する手順をスキップできますが、アプリケーションの適切なシャットダウンが行われないため、データ破損のリスクがあります。緊急時のみ使用してください。
# 実行中のコンテナを強制削除(先に停止は不要)
docker rm -f my-container
# 複数のコンテナを強制削除
docker rm -f container1 container2
条件を指定して複数コンテナを一括削除
停止中のすべてのコンテナを削除
開発環境では、テスト実行後に多数の停止済みコンテナが残ります。docker container pruneコマンドで一括削除が可能です。
# 停止中のすべてのコンテナを削除(確認プロンプト付き)
docker container prune
# 確認プロンプトをスキップ
docker container prune -f
このコマンドは非常に便利ですが、意図しないコンテナを削除する可能性があるため、本番環境では慎重に使用してください。
特定のラベルを持つコンテナを削除
コンテナの作成時にラベルを付与しておくことで、プロジェクトやステージ別に管理できます。
# ラベル条件を指定して削除
docker rm $(docker ps -aq --filter "label=environment=dev")
# 複数のラベル条件を指定
docker rm $(docker ps -aq --filter "label=project=myapp" --filter "label=status=deprecated")
終了ステータスが0でないコンテナを削除
エラーで終了したコンテナのみを削除したい場合は、ステータスフィルターを使用します。
# 異常終了したコンテナのみを削除
docker rm $(docker ps -aq --filter "exited=1")
関連リソースを含めた完全削除
コンテナ、イメージ、ボリュームを一括削除
コンテナを削除してもイメージやボリュームが残ると、ディスク容量が回復しません。関連するすべてのリソースを削除する方法を解説します。
# コンテナとそれに紐付くボリュームを削除
docker rm -v my-container
# 複数コンテナのボリュームも一括削除
docker rm -v container1 container2
-vフラグは、コンテナに紐付いた匿名ボリュームを削除します。名前付きボリュームは別途削除が必要です。
使用されていないイメージを削除
コンテナ削除後も、イメージが残ります。実行中のコンテナに使用されていないイメージを削除するにはdocker image pruneを使用します。
# 使用されていないイメージを削除
docker image prune
# すべての未使用イメージを削除(ダングリングイメージ含む)
docker image prune -a
# 確認プロンプトをスキップ
docker image prune -a -f
システムワイドクリーンアップ
Dockerシステム全体の不要なリソースを一度に削除するのがdocker system pruneです。コンテナ、イメージ、ネットワークをまとめて削除できます。
# 停止済みコンテナ、ダングリングイメージ、未使用ネットワークを削除
docker system prune
# ボリュームも含めて削除(注意:データ損失の可能性)
docker system prune --volumes
# 確認なしで実行
docker system prune -f --volumes
ハマりやすいポイントと解決策
「Error response from daemon: You cannot remove a running container」エラー
このエラーは、実行中のコンテナを-fフラグなしで削除しようとした場合に発生します。
# 【誤り】実行中のコンテナを削除しようとしている
docker rm my-container
# Error response from daemon: You cannot remove a running container
# 【正解】先に停止するか、-fフラグを使用
docker stop my-container && docker rm my-container
# または
docker rm -f my-container
名前付きボリュームが削除されない
コンテナ削除時に-vフラグを使用しても、名前付きボリュームは残ります。理由は、他のコンテナで再利用される可能性があるためです。
# 名前付きボリュームは別途削除が必要
docker volume rm my-volume
# 使用されていないボリュームをすべて削除
docker volume prune
イメージ削除時の「image is being used by running container」エラー
イメージを削除する際、そのイメージから起動されているコンテナが存在するとエラーが発生します。
# 【確認】イメージを使用しているコンテナを検索
docker ps -a --filter "ancestor=my-image:latest"
# 【削除】コンテナを削除後、イメージを削除
docker rm container-id
docker rmi my-image:latest
実務で便利な削除スクリプト
開発環境向け一括クリーンアップスクリプト
開発時に頻繁に実行する削除処理をスクリプト化すると、作業効率が向上します。
#!/bin/bash
# docker-cleanup.sh - 開発環境用クリーンアップスクリプト
echo "=== Docker クリーンアップを開始 ==="
# 停止済みコンテナを削除
echo "停止済みコンテナを削除中..."
docker container prune -f
# ダングリングイメージを削除
echo "ダングリングイメージを削除中..."
docker image prune -f
# 未使用ボリュームを削除
echo "未使用ボリュームを削除中..."
docker volume prune -f
echo "=== クリーンアップ完了 ==="
docker system df
このスクリプトを~/docker-cleanup.shに保存し、chmod +x ~/docker-cleanup.shで実行権限を付与すれば、./docker-cleanup.shで実行できます。
特定プロジェクトのコンテナのみ削除
複数プロジェクトを並行開発している場合、プロジェクト別のクリーンアップが有用です。
#!/bin/bash
# delete-project-containers.sh PROJECT_NAME
PROJECT=$1
if [ -z "$PROJECT" ]; then
echo "使用法: $0 PROJECT_NAME"
exit 1
fi
echo "プロジェクト '$PROJECT' のコンテナを削除中..."
# プロジェクトラベルを持つコンテナを検索・削除
docker rm -v $(docker ps -aq --filter "label=project=$PROJECT")
echo "削除完了"
実行例:./delete-project-containers.sh myapp
削除する前に確認すべきポイント
削除対象のコンテナを一覧確認
削除実行前に、対象のコンテナを確認することは重要です。
# 停止済みコンテナをすべて表示
docker ps -a --filter "status=exited"
# 特定ラベルのコンテナを表示
docker ps -a --filter "label=project=myapp"
# 詳細情報を表示(作成日時、サイズなど)
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Size}}"
削除前のデータバックアップ
重要なデータを含むコンテナを削除する場合は、事前にバックアップを取得してください。
# コンテナ内のファイルをホストにコピー
docker cp my-container:/app/data ./backup/
# ボリュームをバックアップ
docker run --rm -v my-volume:/data -v $(pwd):/backup \
alpine tar czf /backup/volume-backup.tar.gz -C /data .
Docker ComposeプロジェクトのコンテナをAll削除
Docker Composeで管理しているプロジェクトの場合、compose設定ファイルのディレクトリで実行します。
# docker-compose.ymlがあるディレクトリで実行
cd /path/to/docker-compose/project
# すべてのコンテナを停止・削除
docker-compose down
# ボリュームも含めて削除
docker-compose down -v
# イメージも削除
docker-compose down --rmi all
使うべき場面と使うべきでない場面
コンテナ削除が適切な場面:
- 開発環境でテスト実行後の一時的なコンテナ
- 不具合が発生したコンテナの再起動前
- 古いバージョンのイメージから生成されたコンテナ
- ディスク容量が不足している場合のクリーンアップ
コンテナ削除が適切でない場面:
- 本番環境で実行中のコンテナ(停止してから確認すること)
- 永続化すべきデータを保持しているコンテナ(バックアップ前)
- 他のコンテナやアプリケーションに依存されているコンテナ
よくある質問
おすすめDevOpsリソース
- Docker Documentation Official Docker and Docker Compose reference.
- Kubernetes Docs Official K8s documentation. Great for understanding concepts.
- GitHub Actions Docs Official guide for CI/CD workflows.