您好,登錄后才能下訂單哦!
容器(Container):容器是一種輕量級、可移植、并將應用程序進行的打包的技術,使應用程序可以在幾乎任何地方以相同的方式運行,Docker將鏡像文件運行起來后,產生的對象就是容器。容器相當于是鏡像運行起來的一個實例且容器具備一定的生命周期。
相同點:
容器和虛擬機一樣,都會對物理硬件資源進行共享使用。
容器和虛擬機的生命周期比較相似(創建、運行、暫停、關閉等等)。
容器中或虛擬機中都可以安裝各種應用,如redis、mysql、nginx等。也就是說,在容器中的操作,如同在一個虛擬機(操作系統)中操作一樣。
同虛擬機一樣,容器創建后,會存儲在宿主機上:linux上位于/var/lib/docker/containers下
不同點:
虛擬機的創建、啟動和關閉都是基于一個完整的操作系統。一個虛擬機就是一個完整的操作系統。而容器直接運行在宿主機的內核上,其本質上以一系列進程的結合。
容器是輕量級的,虛擬機是重量級的。首先容器不需要額外的資源來管理(不需要Hypervisor、Guest OS),虛擬機額外更多的性能消耗;其次創建、啟動或關閉容器,如同創建、啟動或者關閉進程那么輕松,而創建、啟動、關閉一個操作系統就沒那么方便了。
也因此,意味著在給定的硬件上能運行更多數量的容器,甚至可以直接把Docker運行在虛擬機上。
先來看一張容器生命周期示意圖:
下面咸魚會對容器管理的部分命令簡要學習:
命令格式:docker create [參數] 鏡像名稱[容器執行命令][執行命令時需要提供的參數]
常用參數:
-t 分配一個虛擬終端
-i 提供一個模擬輸入,不提供則無法輸入默認命令
--name 為創建好的容器提供一個容器名,不提供的話隨機分配一個
啟動一個或多個容器。
命令格式:docker start [參數] 容器[容器..]
常用參數:
-a 將當前的輸入/輸出連接到容器
-i 將當前的輸入連接到容器上
命令格式:docker run [參數] 鏡像 [容器執行命令] [執行命令提供的參數]
常用參數:
-t 分配一個虛擬終端
-i 保持輸入打開
-d 容器后臺運行,并打印容器id
--rm 容器結束后自動刪除容器
注意:因為我們學習docker主要還是為我們之后基于docker的Python開發服務的,所以關于docker run 以及 docker create/start 的一些參數的具體的區別就不在文章里贅述,有疑問的朋友可以參考官方文檔,當然也歡迎和咸魚在留言區討論,大家在這里簡單記兩個公式就好:
docker run = doker create + docker start -a
docker run -d = docker create + docker start
這里咸魚推薦大家使用docker run -dti
來啟動所需容器。
docker pause 暫停一個或多個容器
docker unpause 啟動一個或多個暫停中的容器
命令格式:docker pause/unpause 容器[容器..]
關閉一個或多個容器。
docker stop 關閉一個或多個容器
命令格式:docker stop 容器[容器..]
常用參數:
-t 關閉前的等待時間,默認是10秒
強制并立即關閉一個或多個處于暫停或運行狀態的容器。
命令格式:docker kill [參數] 容器[容器..]
常用參數:-s 指定發給容器的關閉信號,默認為“kill”
重啟一個或多個處于運行狀態、暫停狀態、關閉狀態或創建狀態的容器。
命令格式:docker restart [參數] 容器[容器..]
常用參數:
-t 關閉前的等待時間,默認是10秒,實則是關閉前的等待時間
命令格式:docker container rm [參數] 容器[容器..]
常用參數:
-f 強制刪除
-v 刪除容器的同時刪除容器的數據卷
在上面關于docker容器生命周期管理中stop 和 kill 都是關閉容器,但是其中的kill是怎么實現強制殺死運行中的容器的呢?
這里需要說明下關linux下關于終止進程的信號:SIGTERM 和 SIGKILL
SIGKILL信號:無條件終止進程信號。進程接收到該信號會立即終止,不進行清理和暫存工作。該信號不能被忽略、處理和阻塞,它向系統管理員提供了可以殺死任何進程的方法。
SIGTERM信號:程序終結信號,可以由kill命令產生。與SIGKILL不同的是,SIGTERM信號可以被阻塞和終止,以便程序在退出前可以保存工作或清理臨時文件等。
docker stop 會先發出SIGTERM信號給進程,告訴進程即將會被關閉。在-t指定的等待時間過了之后,將會立即發出SIGKILL信號,直接關閉容器。
docker kill 直接發出SIGKILL信號關閉容器。但也可以通過-s參數修改發出的信號。
docker restart 中同樣可以設置 -t 等待時間,當等待時間過后會立刻發送SIGKILL信號,直接關閉容器。
因此會發現在docker stop的等待過程中,如果終止docker stop的執行,容器最終沒有被關閉。而docker kill幾乎是立刻發生,無法撤銷。
關于docker容器的生命周期管理,咸魚踩坑之后認為需要加深理解的部分是關于docker run/start/create 以及 docker kill/stop/restart這兩大部分。
關于docker kill 和 docker stop 區別希望大家能著重看下上面docker kill/stop區別部分,至于docker run/start/create最好能夠動手敲一下感受下不同參數創建的后容器區別。
以上就是咸魚關于容器生命周期管理部分的踩坑總結。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。