溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker | Docker技術(shù)基礎(chǔ)梳理(三) - 容器生命周期管理

發(fā)布時(shí)間:2020-08-14 10:12:38 來源:ITPUB博客 閱讀:210 作者:咸魚普拉思 欄目:云計(jì)算

Docker | Docker技術(shù)基礎(chǔ)梳理(三) - 容器生命周期管理

什么是容器?

容器(Container):容器是一種輕量級(jí)、可移植、并將應(yīng)用程序進(jìn)行的打包的技術(shù),使應(yīng)用程序可以在幾乎任何地方以相同的方式運(yùn)行,Docker將鏡像文件運(yùn)行起來后,產(chǎn)生的對(duì)象就是容器。容器相當(dāng)于是鏡像運(yùn)行起來的一個(gè)實(shí)例且容器具備一定的生命周期。

Docker容器和虛擬機(jī)的區(qū)別

相同點(diǎn):

  • 容器和虛擬機(jī)一樣,都會(huì)對(duì)物理硬件資源進(jìn)行共享使用。

  • 容器和虛擬機(jī)的生命周期比較相似(創(chuàng)建、運(yùn)行、暫停、關(guān)閉等等)。

  • 容器中或虛擬機(jī)中都可以安裝各種應(yīng)用,如redis、mysql、nginx等。也就是說,在容器中的操作,如同在一個(gè)虛擬機(jī)(操作系統(tǒng))中操作一樣。

  • 同虛擬機(jī)一樣,容器創(chuàng)建后,會(huì)存儲(chǔ)在宿主機(jī)上:linux上位于/var/lib/docker/containers下

不同點(diǎn):

  • 虛擬機(jī)的創(chuàng)建、啟動(dòng)和關(guān)閉都是基于一個(gè)完整的操作系統(tǒng)。一個(gè)虛擬機(jī)就是一個(gè)完整的操作系統(tǒng)。而容器直接運(yùn)行在宿主機(jī)的內(nèi)核上,其本質(zhì)上以一系列進(jìn)程的結(jié)合。

  • 容器是輕量級(jí)的,虛擬機(jī)是重量級(jí)的。首先容器不需要額外的資源來管理(不需要Hypervisor、Guest OS),虛擬機(jī)額外更多的性能消耗;其次創(chuàng)建、啟動(dòng)或關(guān)閉容器,如同創(chuàng)建、啟動(dòng)或者關(guān)閉進(jìn)程那么輕松,而創(chuàng)建、啟動(dòng)、關(guān)閉一個(gè)操作系統(tǒng)就沒那么方便了。
    也因此,意味著在給定的硬件上能運(yùn)行更多數(shù)量的容器,甚至可以直接把Docker運(yùn)行在虛擬機(jī)上。

容器的生命周期管理

先來看一張容器生命周期示意圖:

Docker | Docker技術(shù)基礎(chǔ)梳理(三) - 容器生命周期管理

下面咸魚會(huì)對(duì)容器管理的部分命令簡(jiǎn)要學(xué)習(xí):

容器創(chuàng)建(docker create)

命令格式:
docker create [參數(shù)] 鏡像名稱[容器執(zhí)行命令][執(zhí)行命令時(shí)需要提供的參數(shù)]

常用參數(shù):

-t 分配一個(gè)虛擬終端
-i 提供一個(gè)模擬輸入,不提供則無法輸入默認(rèn)命令
--name 為創(chuàng)建好的容器提供一個(gè)容器名,不提供的話隨機(jī)分配一個(gè)

Docker | Docker技術(shù)基礎(chǔ)梳理(三) - 容器生命周期管理
容器啟動(dòng)(docker start)

啟動(dòng)一個(gè)或多個(gè)容器。

命令格式:docker start [參數(shù)] 容器[容器..]

常用參數(shù):

-a 將當(dāng)前的輸入/輸出連接到容器
-i 將當(dāng)前的輸入連接到容器上
容器創(chuàng)建并啟動(dòng)(docker run)

命令格式:
docker run [參數(shù)] 鏡像 [容器執(zhí)行命令] [執(zhí)行命令提供的參數(shù)]

常用參數(shù):

-t 分配一個(gè)虛擬終端
-i 保持輸入打開
-d 容器后臺(tái)運(yùn)行,并打印容器id
--rm 容器結(jié)束后自動(dòng)刪除容器

注意:因?yàn)槲覀儗W(xué)習(xí)docker主要還是為我們之后基于docker的Python開發(fā)服務(wù)的,所以關(guān)于docker run 以及 docker create/start 的一些參數(shù)的具體的區(qū)別就不在文章里贅述,有疑問的朋友可以參考官方文檔,當(dāng)然也歡迎和咸魚在留言區(qū)討論,大家在這里簡(jiǎn)單記兩個(gè)公式就好:

docker run = doker create + docker start -a
docker run -d = docker create + docker start

這里咸魚推薦大家使用docker run -dti來啟動(dòng)所需容器。

容器暫停(docker pause/unpause)

docker pause 暫停一個(gè)或多個(gè)容器

docker unpause 啟動(dòng)一個(gè)或多個(gè)暫停中的容器

命令格式:
docker pause/unpause 容器[容器..]

容器關(guān)閉(docker stop)

關(guān)閉一個(gè)或多個(gè)容器。

docker stop 關(guān)閉一個(gè)或多個(gè)容器

命令格式:
docker stop 容器[容器..]
常用參數(shù):

-t 關(guān)閉前的等待時(shí)間,默認(rèn)是10
容器終止(docker kill)

強(qiáng)制并立即關(guān)閉一個(gè)或多個(gè)處于暫?;蜻\(yùn)行狀態(tài)的容器。

命令格式:docker kill [參數(shù)] 容器[容器..]

常用參數(shù):
-s 指定發(fā)給容器的關(guān)閉信號(hào),默認(rèn)為“kill”

容器重啟(docker restart)

重啟一個(gè)或多個(gè)處于運(yùn)行狀態(tài)、暫停狀態(tài)、關(guān)閉狀態(tài)或創(chuàng)建狀態(tài)的容器。

命令格式:
docker restart [參數(shù)] 容器[容器..]

常用參數(shù):

-t 關(guān)閉前的等待時(shí)間,默認(rèn)是10秒,實(shí)則是關(guān)閉前的等待時(shí)間
容器刪除(docker container rm / docker rm )

命令格式:docker container rm [參數(shù)] 容器[容器..]

常用參數(shù):

-f 強(qiáng)制刪除
-v 刪除容器的同時(shí)刪除容器的數(shù)據(jù)卷
docker kill 和 docker stop 區(qū)別

在上面關(guān)于docker容器生命周期管理中stop 和 kill 都是關(guān)閉容器,但是其中的kill是怎么實(shí)現(xiàn)強(qiáng)制殺死運(yùn)行中的容器的呢?

這里需要說明下關(guān)linux下關(guān)于終止進(jìn)程的信號(hào):SIGTERM 和 SIGKILL

SIGKILL信號(hào):無條件終止進(jìn)程信號(hào)。進(jìn)程接收到該信號(hào)會(huì)立即終止,不進(jìn)行清理和暫存工作。該信號(hào)不能被忽略、處理和阻塞,它向系統(tǒng)管理員提供了可以殺死任何進(jìn)程的方法。

SIGTERM信號(hào):程序終結(jié)信號(hào),可以由kill命令產(chǎn)生。與SIGKILL不同的是,SIGTERM信號(hào)可以被阻塞和終止,以便程序在退出前可以保存工作或清理臨時(shí)文件等。

docker stop 會(huì)先發(fā)出SIGTERM信號(hào)給進(jìn)程,告訴進(jìn)程即將會(huì)被關(guān)閉。在-t指定的等待時(shí)間過了之后,將會(huì)立即發(fā)出SIGKILL信號(hào),直接關(guān)閉容器。

docker kill 直接發(fā)出SIGKILL信號(hào)關(guān)閉容器。但也可以通過-s參數(shù)修改發(fā)出的信號(hào)。

docker restart 中同樣可以設(shè)置 -t 等待時(shí)間,當(dāng)?shù)却龝r(shí)間過后會(huì)立刻發(fā)送SIGKILL信號(hào),直接關(guān)閉容器。

因此會(huì)發(fā)現(xiàn)在docker stop的等待過程中,如果終止docker stop的執(zhí)行,容器最終沒有被關(guān)閉。而docker kill幾乎是立刻發(fā)生,無法撤銷。

總結(jié)

關(guān)于docker容器的生命周期管理,咸魚踩坑之后認(rèn)為需要加深理解的部分是關(guān)于docker run/start/create 以及 docker kill/stop/restart這兩大部分。

關(guān)于docker kill 和 docker stop 區(qū)別希望大家能著重看下上面docker kill/stop區(qū)別部分,至于docker run/start/create最好能夠動(dòng)手敲一下感受下不同參數(shù)創(chuàng)建的后容器區(qū)別。

以上就是咸魚關(guān)于容器生命周期管理部分的踩坑總結(jié)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI