停止済みコンテナを削除する docker container prune コマンドの使い方

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker container prune コマンドを使用して停止したコンテナを効果的に管理する方法を学びます。まず、実際のシナリオを想定して複数のコンテナを作成・停止します。その後、停止したコンテナを削除するさまざまな方法を探求します。具体的には、すべての停止コンテナを削除する方法、特定の時間より前に作成されたコンテナを削除する方法、ラベルに基づいて選択的にコンテナを削除する方法などを扱います。このハンズオン体験を通じて、Docker システムをクリーンかつ最適化された状態に保つスキルを習得できます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") subgraph Lab Skills docker/run -.-> lab-555117{{"停止済みコンテナを削除する docker container prune コマンドの使い方"}} docker/ps -.-> lab-555117{{"停止済みコンテナを削除する docker container prune コマンドの使い方"}} docker/stop -.-> lab-555117{{"停止済みコンテナを削除する docker container prune コマンドの使い方"}} docker/rm -.-> lab-555117{{"停止済みコンテナを削除する docker container prune コマンドの使い方"}} docker/pull -.-> lab-555117{{"停止済みコンテナを削除する docker container prune コマンドの使い方"}} docker/prune -.-> lab-555117{{"停止済みコンテナを削除する docker container prune コマンドの使い方"}} end

コンテナの作成と停止

このステップでは、Docker コンテナを作成・停止する方法を学びます。Docker コンテナは軽量でポータブルな自己完結型のユニットであり、アプリケーションを実行するために必要なすべてを含んでいます。

まず、コンテナ作成に使用する Docker イメージを取得します。ここでは最小限の Ubuntu OS であるubuntuイメージを使用します。

docker pull ubuntu

イメージがダウンロードされることを示す出力が表示されます。

Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

イメージを取得したので、これからコンテナを作成・実行します。docker runコマンドを使用します。-dフラグはコンテナをデタッチモード(バックグラウンド)で実行し、--nameフラグはコンテナに名前を割り当てます。

docker run -d --name my-ubuntu-container ubuntu sleep infinity

このコマンドはubuntuイメージからmy-ubuntu-containerという名前のコンテナを作成し、内部でsleep infinityコマンドを実行します。sleep infinityコマンドはコンテナを無期限に実行し続けます。

出力としてコンテナ ID(長い文字列)が表示されます。

<container_id>

コンテナが実行中か確認するには、docker psコマンドを使用します。

docker ps

このコマンドは実行中のコンテナを一覧表示します。my-ubuntu-containerが表示されるはずです。

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             my-ubuntu-container

次に、別のコンテナを作成しますが、今回は特定の名前を付けません。Docker が自動的に名前を生成します。

docker run -d ubuntu sleep infinity

再びコンテナ ID が出力されます。

<container_id>

docker psを再度実行して、両方の実行中コンテナを確認します。

docker ps

2 つのコンテナが表示されるはずです。

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X seconds ago   Up X seconds             <random_name>

次に、my-ubuntu-containerという名前のコンテナを停止します。docker stopコマンドに続けてコンテナ名または ID を指定します。

docker stop my-ubuntu-container

コンテナ名が出力され、停止したことが確認できます。

my-ubuntu-container

再度docker psを実行します。my-ubuntu-containerは表示されなくなります。docker psは実行中のコンテナのみ表示するためです。

docker ps

停止したコンテナも含めてすべてのコンテナを表示するには、docker ps -aコマンドを使用します。

docker ps -a

両方のコンテナが表示され、my-ubuntu-containerのステータスがExitedになっているはずです。

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X seconds ago              my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Up X minutes                          <random_name>

最後に、2 番目のコンテナをその ID を使用して停止します。ID はdocker ps -aの出力から確認できます。<container_id>を実際の 2 番目のコンテナの ID に置き換えてください。

docker stop <container_id>

コンテナ ID が出力されます。

<container_id>

最後にdocker ps -aを実行して、両方のコンテナが停止したことを確認します。

docker ps -a

両方のコンテナのステータスがExitedになっているはずです。

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X seconds ago              my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X seconds ago              <random_name>

停止済みコンテナの一括削除

前のステップでは 2 つのコンテナを作成し停止しました。停止したコンテナは依然としてディスクスペースとリソースを消費します。このステップでは、docker container pruneコマンドを使用して停止済みコンテナをすべて削除する方法を学びます。

まず、削除対象となるコンテナを確認するため、停止済みのものも含めすべてのコンテナを一覧表示します。

docker ps -a

前のステップで停止した 2 つのコンテナが表示されるはずです。

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS                      PORTS     NAMES
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X minutes ago              my-ubuntu-container
<container_id>   ubuntu         "sleep infinity"   X minutes ago   Exited (0) X minutes ago              <random_name>

次に、停止済みコンテナを一括削除します。docker container pruneコマンドはすべての停止済みコンテナを削除します。

docker container prune

Docker はコンテナ削除前に確認を求めます。yと入力し Enter キーを押して続行します。

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

削除されたコンテナと回収された総ディスク容量を示す出力が表示されます。

Deleted Containers:
<container_id>
<container_id>

Total reclaimed space: XMB

停止済みコンテナが削除されたことを確認するため、再度すべてのコンテナを一覧表示します。

docker ps -a

今度は何も表示されず、コンテナ(実行中も停止中も)が残っていないことがわかります。

CONTAINER ID   IMAGE          COMMAND            CREATED         STATUS         PORTS     NAMES

特定時刻以前に作成された停止済みコンテナの削除

前のステップでは、すべての停止済みコンテナを削除する方法を学びました。場合によっては、特定の時刻以前に作成された停止済みコンテナのみを削除したいことがあります。これは新しいコンテナを保持しながら古いコンテナをクリーンアップするのに便利です。このステップでは、docker container pruneコマンドに--filterフラグとuntilフィルタを組み合わせて、特定時刻以前に作成された停止済みコンテナを削除する方法を学びます。

まず、削除対象となるいくつかのコンテナを作成して停止します。

docker run -d --name container-old-1 ubuntu sleep infinity
docker run -d --name container-old-2 ubuntu sleep infinity

数秒待ってから、別のコンテナを作成します。これが「新しい」コンテナになります。

sleep 5
docker run -d --name container-new-1 ubuntu sleep infinity

次に、すべてのコンテナを停止します。

docker stop container-old-1 container-old-2 container-new-1

すべてのコンテナを一覧表示して、ステータスと作成時刻を確認します。

docker ps -a --format "{{.Names}}\t{{.Status}}\t{{.CreatedAt}}"

作成時刻が異なる以下のような出力が表示されます:

container-old-1	Exited (0) X seconds ago	YYYY-MM-DD HH:MM:SS +0000 UTC
container-old-2	Exited (0) X seconds ago	YYYY-MM-DD HH:MM:SS +0000 UTC
container-new-1	Exited (0) X seconds ago	YYYY-MM-DD HH:MM:SS +0000 UTC

ここで、特定時刻以前に作成された停止済みコンテナを削除します。docker container pruneコマンドにuntilフィルタを使用します。untilフィルタはタイムスタンプまたは期間を指定できます。この例では期間を使用し、10 秒以上前に作成されたコンテナを削除します。

docker container prune --filter "until=10s"

Docker は確認を求めます。yと入力し Enter キーを押します。

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

古いコンテナが削除されたことを示す出力が表示されます。新しいコンテナは削除対象としてリストされていないはずです。

Deleted Containers:
<container_id_old_1>
<container_id_old_2>

Total reclaimed space: XMB

古いコンテナのみが削除されたことを確認するため、再度すべてのコンテナを一覧表示します。

docker ps -a --format "{{.Names}}\t{{.Status}}"

container-new-1のみがExitedステータスで表示されるはずです。

container-new-1	Exited (0) X seconds ago

特定ラベルが付いた停止済みコンテナの削除

これまでのステップでは、すべての停止済みコンテナと作成時刻に基づく停止済みコンテナの削除方法を学びました。このステップでは、ラベルを使用して削除対象のコンテナをフィルタリングする便利な方法を探ります。ラベルは Docker オブジェクト(コンテナを含む)に付与できるキーと値のペアで、整理や管理に役立ちます。

まず、異なるラベルが付いたいくつかのコンテナを作成します。

docker run -d --name container-label-app --label app=frontend ubuntu sleep infinity
docker run -d --name container-label-env --label env=development ubuntu sleep infinity
docker run -d --name container-no-label ubuntu sleep infinity

次に、すべてのコンテナを停止します。

docker stop container-label-app container-label-env container-no-label

すべてのコンテナとそのラベルを一覧表示し、適用したラベルを確認します。

docker ps -a --format "{{.Names}}\t{{.Labels}}"

以下のような出力が表示されます:

container-label-app	app=frontend
container-label-env	env=development
container-no-label

ここで、app=frontendラベルが付いた停止済みコンテナのみを削除します。--filterフラグとlabelフィルタを使用します。

docker container prune --filter "label=app=frontend"

Docker は確認を求めます。yと入力し Enter キーを押します。

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

app=frontendラベルが付いたコンテナが削除されたことを示す出力が表示されます。

Deleted Containers:
<container_id_app_frontend>

Total reclaimed space: XMB

app=frontendラベルが付いたコンテナのみが削除されたことを確認するため、再度すべてのコンテナを一覧表示します。

docker ps -a --format "{{.Names}}\t{{.Labels}}"

env=developmentラベルが付いたコンテナとラベルのないコンテナのみが表示されるはずです。

container-label-env	env=development
container-no-label

特定のラベルが付いていないコンテナを削除するには、ラベルフィルタに!プレフィックスを使用します。env=developmentラベルが付いていないコンテナを削除してみましょう。

docker container prune --filter "label!=env=development"

yと入力し Enter キーを押して削除を確認します。

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

env=developmentラベルが付いていないコンテナが削除されたことを示す出力が表示されます。

Deleted Containers:
<container_id_no_label>

Total reclaimed space: XMB

最後にすべてのコンテナを一覧表示し、env=developmentラベルが付いたコンテナのみが残っていることを確認します。

docker ps -a --format "{{.Names}}\t{{.Labels}}"

container-label-envのみが表示されるはずです。

container-label-env	env=development

まとめ

この実験では、docker runおよびdocker stopコマンドを使用して Docker コンテナを作成・停止する方法と、docker psで実行中のコンテナを一覧表示する方法を学びました。さらに、docker container pruneコマンドを使用して停止済みコンテナを効率的に削除する方法を探求しました。具体的には、以下の操作を実践しました:

  • すべての停止済みコンテナを削除
  • --filter untilオプションを使用して特定時刻以前に作成された停止済みコンテナを削除
  • --filter labelオプションを使用してラベルに基づき停止済みコンテナを選択的に削除

これらのステップを通じて、Docker 環境における停止済みコンテナの管理とクリーンアップの実用的な方法を実証しました。