聊一聊容器暫停退出

程式設計玩家發表於2022-05-26

背景介紹 

最近在寫 docker 相關教程,過程中發現容器暫停退出竟然有 docker kill、docker stop 和 docker pause 三種方式,今天就來看下三者間的區別。

 

輔助指令

  • docker top - 檢視容器程式

  • docker event - 檢視容器相關事件

  • docker stats - 檢視容器資源使用率

 

準備工作

1. 啟動容器

docker run --name nginx-kill -d nginx
docker run --name nginx-stop -d nginx
docker run --name nginx-pause -d nginx

 

2. 檢視容器程式

docker top nginx-kill
docker top nginx-stop
docker top nginx-pause

 

3. 檢視資源使用

docker stats nginx-kill nginx-stop nginx-pause

 

4. 開啟事件監聽

docker events

 

開始分析

1. docker kill

docker kill nginx-kill
docker top nginx-kill
docker stats nginx-kill
docker ps -a

docker top 指令報錯,CPU 和記憶體使用率為 0,容器狀態為 Exited,退出碼為 137。

 

相關事件:kill -> die

 

2. docker stop

docker stop nginx-stop
docker top nginx-stop
docker stats nginx-stop
docker ps -a

docker top 指令報錯,CPU 和記憶體使用率為 0,容器狀態為 Exited,退出碼為 0。

 

相關事件:kill -> die -> stop

 

3. docker pause

docker pause nginx-pause
docker top nginx-pause
docker stats nginx-pause
docker ps -a

docker top 指令正常,CPU 使用率為 0,記憶體使用率大於0,容器狀態為 Pause。

 

相關事件:pause

 

結果分析

指令 docker kill docker stop docker pause
docker ps -a

容器暴力退出
未儲存的資訊會丟失
退出碼 137

容器正常退出
無訊息丟失
退出碼 0

容器暫停
docker top 報錯 報錯 正常顯示程式
docker stats

CPU 使用率 = 0
記憶體使用率 = 0

CPU 使用率 = 0
記憶體使用率 = 0

CPU 使用率 = 0
記憶體使用率 > 0

docker events

kill - signal=9
die

kill - signal=3
die
stop

pause
how to restart

docker start
docker restart

docker start
docker restart

docker unpause

 

參考總結

以上就是本文希望分享的內容,如果大家有什麼問題,歡迎在文章或者公眾號 - 跬步之巔留言交流。

相關文章