1. 概要

前回の記事では、Dockerイメージを削除する方法を学びました。 ただし、 Dockerイメージは、そのイメージを使用しているDockerコンテナーがない場合にのみ削除できます。したがって、Dockerイメージを削除するには、そのイメージで実行されているすべてのDockerコンテナーを削除する必要があります。

このチュートリアルでは、さまざまなアプローチを使用してDockerコンテナーを削除する方法を学習します。

2. Dockerコンテナを削除する理由

Dockerコンテナーが実行を完了すると、exited状態になります。 このようなコンテナはCPUやメモリを消費しませんが、マシンのディスクスペースを使用します。 また、停止したコンテナは、使用しない限り自動的に削除されません。 –rm Dockerコンテナの実行中にフラグを立てます。

したがって、ますます多くのコンテナが 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コマンドを使用して削除しました。

Dockerコンテナの名前とIDは、任意のDockerコマンドと同じ意味で使用できます。 DockerコンテナIDを使用したことに注意してください mycontainer1 mycontainer3 およびのコンテナ名 mycontainer2。 

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コンテナーを強制的に削除する方法を確認しました。