Dockerコンテナの削除
1. 概要
前回の記事では、Dockerイメージを削除する方法を学びました。 ただし、 Dockerイメージは、そのイメージを使用しているDockerコンテナーがない場合にのみ削除できます。したがって、Dockerイメージを削除するには、そのイメージで実行されているすべてのDockerコンテナーを削除する必要があります。
このチュートリアルでは、さまざまなアプローチを使用してDockerコンテナーを削除する方法を学習します。
2. Dockerコンテナを削除する理由
Dockerコンテナーが実行を完了すると、exited状態になります。
したがって、ますます多くのコンテナが exited 状態に移行するにつれて、それらによって消費される全体的なディスクスペースが増加します。 その結果、新しいコンテナーを起動できないか、Dockerデーモンが応答を停止する可能性があります。
このようなシナリオを回避するには、 –rm フラグを使用してDockerコンテナーを実行するか、Dockerコンテナーを手動で定期的に削除することをお勧めします。
Dockerコンテナを削除する方法を学びましょう。
3. 単一のDockerコンテナを削除する
まず、CentOSDockerコンテナを非対話型モードで起動します。 そうすることで、コンテナを実行した直後にコンテナが停止します。
$ docker run --name mycontainer centos:7
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
418c28b4b04e centos:7 "/bin/bash" 6 seconds ago Exited (0) 5 seconds ago mycontainer
次に、 docker rm コマンドを使用して、Dockerコンテナmycontainerを削除しましょう。
$ docker rm mycontainer
mycontainer
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Dockerコンテナ名の代わりにDockerコンテナIDを使用して、 dockerrmコマンドを使用してDockerコンテナを削除することもできます。
$ docker rm 418c28b4b04e
4. 複数のDockerコンテナを削除する
dockerrmコマンドを使用して複数のDockerコンテナを削除することもできます。 docker rm コマンドは、スペースで区切られたDockerコンテナーの名前またはIDのリストを受け入れ、それらをすべて削除します。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23c70ec6e724 centos:7 "/bin/bash" 6 seconds ago Exited (0) 5 seconds ago mycontainer3
fd0886458666 centos:7 "/bin/bash" 10 seconds ago Exited (0) 9 seconds ago mycontainer2
c223ec695e2d centos:7 "/bin/bash" 14 seconds ago Exited (0) 12 seconds ago mycontainer1
$ docker rm c223ec695e2d mycontainer2 23c70ec6e724
c223ec695e2d
mycontainer2
23c70ec6e724
上記の例では、 exited 状態の3つのDockerコンテナーがあり、 dockerrmコマンドを使用して削除しました。
5. すべてのDockerコンテナを削除します
停止したDockerコンテナーがマシン上に多すぎるシナリオを考えてみましょう。ここで、それらをすべて削除したいと思います。 もちろん、上記のアプローチを使用して、すべてのコンテナーIDを dockerrmコマンドに渡すことができます。 しかし、すべてのDockerコンテナーを削除するための、より最適化された単純なコマンドを調べてみましょう。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b5c45fa5764f centos:7 "/bin/bash" 4 seconds ago Exited (0) 3 seconds ago mycontainer1
ed806b1743cd centos:7 "/bin/bash" 9 seconds ago Exited (0) 7 seconds ago mycontainer2
2e00a052eb12 centos:7 "/bin/bash" 13 seconds ago Exited (0) 12 seconds ago mycontainer3
$ docker rm $(docker ps -qa)
b5c45fa5764f
ed806b1743cd
2e00a052eb12
コマンドdockerps -qa は、マシン上に存在するすべてのコンテナーの数値IDを返します。 次に、これらすべてのIDが docker rm コマンドに渡され、Dockerコンテナーが繰り返し削除されます。
docker container prune コマンドを使用して、停止しているすべてのコンテナーを削除することもできます。
$ docker container prune -f
ここでは、 -f フラグを使用して、確認のプロンプトを回避します。
6. 実行中のDockerコンテナを強制的に削除する
上記の例で説明したすべてのコマンドは、Dockerコンテナが停止している場合にのみ機能します。 最初に停止せずに実行中のコンテナを削除しようとすると、次のようなエラーメッセージが表示されます。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f84692b27b0a centos:7 "/bin/bash" 59 seconds ago Up 58 seconds mycontainer
$ docker rm mycontainer
Error response from daemon:
You cannot remove a running container f84692b27b0a18266f34b35c90dad655faa10bb0d9c85d73b22079dde506b8b5.
Stop the container before attempting removal or force remove
実行中のDockerコンテナを削除する1つの方法は、最初に docker stop コマンドを使用してそのコンテナを停止し、次に dockerrmコマンドを使用して削除することです。
もう1つの方法は、 -f オプションを使用して、このようなコンテナーを強制的に削除することです。
$ docker rm -f mycontainer
mycontainer
-f オプションを使用して、単一のDockerコンテナー、複数のDockerコンテナー、またはすべてのDockerコンテナーを削除できます。
7. 結論
このチュートリアルでは、Dockerコンテナーを削除する必要がある理由を理解しました。 まず、Linuxマシンからコンテナーを削除する方法を学びました。 さらに、 dockerrmおよびdockerprune コマンドを使用して、Dockerコンテナーを一括削除しました。
最後に、running状態のDockerコンテナーを強制的に削除する方法を確認しました。