iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

淺嚐 Docker:新手莫慌、漫乘鯨魚系列 第 12

Day 12: 容器的停止與刪除

  • 分享至 

  • xImage
  •  

前言

前幾天都在講容器的建立與啟動,今天我們來說說,容器該如何停止、刪除,以及刪除容器時要注意些什麼事情。

讓容器停止運作

簡單,當我們想讓正在運作中的容器,停止運作,只要使用 stop 指令即可:

先找出運作中的容器:

> docker container ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
ef2929e5ceb0   httpd     "httpd-foreground"   8 seconds ago   Up 6 seconds   80/tcp    iThome

停止容器:

停止容器:
> docker container stop iThome
iThome

再次查看運作中的容器:

> docker container ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

沒有東西?沒錯!還記得 docker container lsdocker container ps 都是查詢「運作中」的容器嗎。我們剛剛停止了容器,所以必須加上 -a 才找得到剛剛停下來的容器。

> docker container ps -a
CONTAINER ID   IMAGE      COMMAND                   CREATED         STATUS                       PORTS                  NAMES
ef2929e5ceb0   httpd      "httpd-foreground"        4 minutes ago   Exited (0) 30 seconds ago                           iThome

我們可以看到,停止下來的容器狀態是 Exited 退出。

跟容器說再見

如果我們想要刪除容器的話,要先讓容器停止運作後,才能夠刪除 rm

我們可以先啟動剛剛的容器, iThome ,然後嘗試刪除:

>docker container start iThome
iThome

>docker container rm iThome
Error response from daemon: You cannot remove a running container ef2929e5ceb076f0c836df3c3bbb814450377392430529997e29505813fc6a93. 
Stop the container before attempting removal or force remove

跑出來的訊息很直接的告訴我們,想要刪除容器就要先停止容器,不然就是要強制刪除。

先停止容器再刪除

所以如果我們想刪除,基本上就是要先停止,然後再刪除:

> docker container stop iThome
iThome

> docker container rm iThome
iThome

> docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

透過 docker container ls -a 可以發現,容器已經不見了。

強制刪除運作中容器

至於剛剛說的強制刪除,就是使用 -f 指令參數:

假設現在有一個運作中的容器 iThome

> docker container rm -f iThome
iThome

那如果想一次刪除多個容器

只需要在 rm 後面加上想要刪除的容器們即可:

> docker container rm relaxed_curran postgres_with_e
relaxed_curran
postgres_with_e

這樣好麻煩?沒問題,用 prune 就可以刪除所有停止中的容器們了。

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

docker 向我們確認是不是真的要執行?輸入 y 就可以執行了。

如果加上 -f--force 就能跳過詢問的步驟直接執行刪除:

CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS                      PORTS     NAMES
a8cef9d77a9b   httpd     "httpd-foreground"   6 seconds ago   Created                               pedantic_meitner
264645d5d5cd   httpd     "httpd-foreground"   8 seconds ago   Created                               pensive_edison
6ac5d76c0fc1   httpd     "httpd-foreground"   4 minutes ago   Exited (0) 14 seconds ago             iThome

> docker container prune --force
Deleted Containers:
a8cef9d77a9b67825e109ac18cc1ba6e1122bc83f438b54fdcad9a395eb28a7f
264645d5d5cd49d42646767b1500d50e990e2e27895bce49e7f3162a5291430a
6ac5d76c0fc12e9f60e2f6c224f4fe565951e41375e85087a4aec4c1e71ca0b6

Total reclaimed space: 0B

容器的資料呢?

應用程式在運作的過程中,基本上會產生資料,就我們所知,資料會儲存在資料庫中。

那容器呢?容器裡的應用程式也會產生資料,但資料會放在哪?放在容器裡嗎?聽起來好像很合理。但是容器一旦被刪除,資料是不是也被刪除了?那這樣用容器部署專案妥當嗎?聽起來好抖….

總結

今天介紹了容器基本上,刪除之前必須先停止,但也能透過 -f--force 強制刪除運作中的容器。明天我們來介紹容器資料的儲放,在明天的文章中,會為大家解惑最後一個標題裡所提及的所有問題。

這一系列的鐵人賽文章,都同步更新在我的部落格: https://wl02599509.github.io/


上一篇
Day 11: 容器的環境變數
下一篇
Day 13: 容器的生命週期
系列文
淺嚐 Docker:新手莫慌、漫乘鯨魚30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言