刪除 Docker 容器

1. 概述

在上一篇文章中,我們學習瞭如何刪除 Docker 鏡像。但是,只有當沒有 Docker 容器正在使用該映像時,才能刪除 Docker 映像。因此,要刪除 Docker 映像,必須刪除使用該映像運行的所有 Docker 容器。

在本教程中,我們將學習使用不同的方法刪除 Docker 容器。

2. 為什麼要刪除 Docker 容器?

當 Docker 容器完成其執行時,它會達到exited狀態。這樣的容器不消耗任何 CPU 或內存,但它們仍然使用機器的磁盤空間。此外,除非我們在運行 Docker 容器時–rm標誌,否則不會自動刪除停止的容器。

因此,隨著越來越多的容器進入exited狀態,它們消耗的整體磁盤空間會增加。因此,我們可能無法啟動新容器,或者 Docker 守護進程會停止響應。

為避免此類情況,建議使用–rm標誌運行 Docker 容器或定期手動刪除 Docker 容器。

現在讓我們學習如何刪除 Docker 容器。

3. 刪除單個 Docker 容器

首先,我們將在非交互模式下啟動一個 CentOS Docker 容器。通過這樣做,容器將在我們運行容器後立即停止:

$ 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

現在讓我們使用mycontainer docker rm命令刪除 Docker 容器 mycontainer :

$ docker rm mycontainer
 mycontainer
 $ docker ps -a
 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

我們還可以使用 Docker 容器 id 而不是 Docker 容器名稱來使用docker rm命令刪除 Docker 容器:

$ docker rm 418c28b4b04e

4. 刪除多個 Docker 容器

我們還可以使用docker rm命令刪除多個 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

在上面的示例中,我們使用docker rm命令exited

我們可以將 Docker 容器名稱和 id 與任何 Docker 命令互換使用。請注意,我們對 mycontainer1 和mycontainer3使用了 Docker 容器 ID,對mycontainer1了容器名稱mycontainer2.

5. 刪除所有 Docker 容器

考慮一個場景,機器上存在太多停止的 Docker 容器,現在我們希望將它們全部刪除。當然,我們可以使用上面的方法,將所有的容器 id 傳遞給docker rm命令。但是讓我們研究一個更優化和更簡單的命令來刪除所有 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

命令docker ps -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 容器的一種方法是首先使用docker stop命令停止該容器,然後使用docker rm命令將其刪除。

另一種方法是使用-f選項強行刪除此類容器:

$ docker rm -f mycontainer
 mycontainer

我們可以使用-f選項刪除單個 Docker 容器、多個 Docker 容器或所有 Docker 容器。

7. 結論

在本教程中,我們了解了為什麼需要刪除 Docker 容器。首先,我們學會了從 Linux 機器上刪除一個容器。 docker rmdocker prune命令批量刪除了 Docker 容器。

最後,我們研究瞭如何強制刪除處於running狀態的 Docker 容器。