Docker | Docker技術基礎梳理(三) - 容器生命週期管理
什麼是容器?
容器(Container):容器是一種輕量級、可移植、並將應用程式進行的打包的技術,使應用程式可以在幾乎任何地方以相同的方式執行,Docker將映象檔案執行起來後,產生的物件就是容器。容器相當於是映象執行起來的一個例項且容器具備一定的生命週期。
Docker容器和虛擬機器的區別
相同點:
容器和虛擬機器一樣,都會對物理硬體資源進行共享使用。
容器和虛擬機器的生命週期比較相似(建立、執行、暫停、關閉等等)。
容器中或虛擬機器中都可以安裝各種應用,如redis、mysql、nginx等。也就是說,在容器中的操作,如同在一個虛擬機器(作業系統)中操作一樣。
同虛擬機器一樣,容器建立後,會儲存在宿主機上:linux上位於/var/lib/docker/containers下
不同點:
虛擬機器的建立、啟動和關閉都是基於一個完整的作業系統。一個虛擬機器就是一個完整的作業系統。而容器直接執行在宿主機的核心上,其本質上以一系列程式的結合。
容器是輕量級的,虛擬機器是重量級的。首先容器不需要額外的資源來管理(不需要Hypervisor、Guest OS),虛擬機器額外更多的效能消耗;其次建立、啟動或關閉容器,如同建立、啟動或者關閉程式那麼輕鬆,而建立、啟動、關閉一個作業系統就沒那麼方便了。
也因此,意味著在給定的硬體上能執行更多數量的容器,甚至可以直接把Docker執行在虛擬機器上。
容器的生命週期管理
先來看一張容器生命週期示意圖:
下面鹹魚會對容器管理的部分命令簡要學習:
容器建立(docker create)
命令格式:docker create [引數] 映象名稱[容器執行命令][執行命令時需要提供的引數]
常用引數:
-t 分配一個虛擬終端
-i 提供一個模擬輸入,不提供則無法輸入預設命令
--name 為建立好的容器提供一個容器名,不提供的話隨機分配一個
容器啟動(docker start)
啟動一個或多個容器。
命令格式:docker start [引數] 容器[容器..]
常用引數:
-a 將當前的輸入/輸出連線到容器
-i 將當前的輸入連線到容器上
容器建立並啟動(docker run)
命令格式: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/unpause)
docker pause 暫停一個或多個容器
docker unpause 啟動一個或多個暫停中的容器
命令格式:docker pause/unpause 容器[容器..]
容器關閉(docker stop)
關閉一個或多個容器。
docker stop 關閉一個或多個容器
命令格式:docker stop 容器[容器..]
常用引數:
-t 關閉前的等待時間,預設是10秒
容器終止(docker kill)
強制並立即關閉一個或多個處於暫停或執行狀態的容器。
命令格式:docker kill [引數] 容器[容器..]
常用引數:-s 指定發給容器的關閉訊號,預設為“kill”
容器重啟(docker restart)
重啟一個或多個處於執行狀態、暫停狀態、關閉狀態或建立狀態的容器。
命令格式:docker restart [引數] 容器[容器..]
常用引數:
-t 關閉前的等待時間,預設是10秒,實則是關閉前的等待時間
容器刪除(docker container rm / docker rm )
命令格式:docker container rm [引數] 容器[容器..]
常用引數:
-f 強制刪除
-v 刪除容器的同時刪除容器的資料卷
docker kill 和 docker stop 區別
在上面關於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最好能夠動手敲一下感受下不同引數建立的後容器區別。
以上就是鹹魚關於容器生命週期管理部分的踩坑總結。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556785/viewspace-2564296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker | Docker技術基礎梳理(五) - Docker網路管理Docker
- Docker | Docker技術基礎梳理(二) - 映象管理Docker
- Docker | Docker技術基礎梳理(一)Docker
- Docker | Docker技術基礎梳理(四) - 深入理解映象與容器Docker
- 容器技術之Docker基礎入門Docker
- Docker容器學習梳理 - 基礎知識(2)Docker
- Docker容器學習梳理–基礎知識(2)Docker
- Docker容器學習梳理 - 基礎知識(1)Docker
- docker - 生命週期和狀態Docker
- docker容器技術基礎之linux cgroup、namespaceDockerLinuxnamespace
- 容器技術|Docker三劍客之docker-swarmDockerSwarm
- Docker容器學習梳理 - 基礎環境安裝Docker
- 容器技術|Docker三劍客之docker-composeDocker
- vue 生命週期梳理Vue
- 【Docker】第三篇 Docker容器管理Docker
- Docker容器技術與Docker介紹Docker
- React 基礎_生命週期React
- Docker--容器技術Docker
- docker容器技術原理Docker
- 產品生命週期管理PLM技術研究
- docker容器技術基礎之聯合檔案系統OverlayFSDocker
- 容器技術之Docker映象Docker
- Docker 技術基礎之 CGroupsDocker
- docker筆記23-pod的生命週期Docker筆記
- Docker技術( 容器虛擬化技術 )Docker
- 每天5分鐘玩轉Docker容器技術(三)Docker
- Unity基礎-指令碼生命週期Unity指令碼
- Servlet基礎教程之生命週期Servlet
- [Java基礎]物件的生命週期Java物件
- Docker_04 容器-基礎操作Docker
- 容器技術之Docker網路Docker
- 容器技術之Docker-swarmDockerSwarm
- 容器技術和Docker介紹Docker
- 【Docker】Docker基礎-埠對映與容器互聯Docker
- Docker容器與虛擬化技術:OpenEuler 部署 docker容器應用Docker
- 容器技術之Docker資料卷Docker
- 容器技術之Docker資源限制Docker
- 技術選型之Docker容器引擎Docker