前幾天都在講容器的建立與啟動,今天我們來說說,容器該如何停止、刪除,以及刪除容器時要注意些什麼事情。
簡單,當我們想讓正在運作中的容器,停止運作,只要使用 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 ls
與 docker 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/