Docker核心技術(shù)容器詳解

      網(wǎng)友投稿 799 2022-05-30

      一、容器簡介

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

      二、容器與虛擬機(jī)

      Docker容器與虛擬機(jī)相同點(diǎn)

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

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

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

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

      Docker容器與虛擬機(jī)不同點(diǎn)

      注意:容器并不是虛擬機(jī),但它們有很多相似的地方

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

      容器是輕量級的,虛擬機(jī)是重量級的。首先容器不需要額外的資源來管理(不需要Hypervisor、Guest OS),虛擬機(jī)額外更多的性能消耗;其次創(chuàng)建、啟動或關(guān)閉容器,如同創(chuàng)建、啟動或者關(guān)閉進(jìn)程那么輕松,而創(chuàng)建、啟動、關(guān)閉一個(gè)操作系統(tǒng)就沒那么方便了。

      也因此,意味著在給定的硬件上能運(yùn)行更多數(shù)量的容器,甚至可以直接把Docker運(yùn)行在虛擬機(jī)上。

      三、容器的生命周期

      虛擬機(jī)的生命周期

      容器的生命周期

      四、容器的生命周期管理

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

      作用: ?? ?利用鏡像創(chuàng)建出一個(gè)Created 狀態(tài)的待啟動容器

      命令格式: ?? ?docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

      命令參數(shù)(OPTIONS):-t, --tty ? ? ? ? ? ?? ??? ?分配一個(gè)偽TTY,也就是分配虛擬終端

      -i, --interactive ? ??? ?即使沒有連接,也要保持STDIN打開

      --name ? ? ? ? ??? ??? ?為容器起名,如果沒有指定將會隨機(jī)產(chǎn)生一個(gè)名稱

      命令參數(shù)(COMMAND\ARG): ?? ?COMMAND 表示容器啟動后,需要在容器中執(zhí)行的命令,如ps、ls 等命令 ?? ?ARG 表示執(zhí)行 COMMAND 時(shí)需要提供的一些參數(shù),如ps 命令的 aux、ls命令的-a等等

      命令演示:

      容器啟動 – docker start

      作用: ?? ?將一個(gè)或多個(gè)處于創(chuàng)建狀態(tài)或關(guān)閉狀態(tài)的容器啟動起來

      命令格式: ?? ?docker start [OPTIONS] CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS): ?? ?-a, --attach?? ??? ?將當(dāng)前shell的 STDOUT/STDERR 連接到容器上

      -i, --interactive?? ??? ?將當(dāng)前shell的 STDIN連接到容器上

      命令演示:

      docker run 與 docker create + docker start

      docker run 相當(dāng)于 docker create + docker start –a ? ? ? 前臺模式

      docker run -d 相當(dāng)于 docker create + docker start ? ? ? 后臺模式

      容器暫停 – docker pause

      作用: ?? ?暫停一個(gè)或多個(gè)處于運(yùn)行狀態(tài)的容器

      命令格式: ?? ?docker pause CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS): ?? ?無

      命令演示:

      容器取消暫停 – docker unpause

      作用: ?? ?取消一個(gè)或多個(gè)處于暫停狀態(tài)的容器,恢復(fù)運(yùn)行

      命令格式: ?? ?docker unpause CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS): ?? ?無

      命令演示:

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

      作用: ?? ?關(guān)閉一個(gè)或多個(gè)處于暫停狀態(tài)或者運(yùn)行狀態(tài)的容器

      命令格式: ?? ?docker stop [OPTIONS] CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS): ?? ?-t, --time int ? ?? ??? ?關(guān)閉前,等待的時(shí)間,單位秒(默認(rèn) 10s)

      命令演示:

      容器終止 – docker kill

      作用: ?? ?強(qiáng)制并立即關(guān)閉一個(gè)或多個(gè)處于暫停狀態(tài)或者運(yùn)行狀態(tài)的容器

      命令格式: ?? ?docker kill [OPTIONS] CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS): ?? ?-s, --signal string ? ?? ?指定發(fā)送給容器的關(guān)閉信號 (默認(rèn)“KILL”信號)

      命令演示:

      docker stop和docker kill的區(qū)別

      前提知識點(diǎn):

      Linux其中兩種終止進(jìn)程的信號是:SIGTERM和SIGKILL

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

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

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

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

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

      此外還有些異常原因也會導(dǎo)致容器被關(guān)閉,比如docker daemon重啟、容器內(nèi)部進(jìn)程運(yùn)行發(fā)生錯(cuò)誤等等“異常原因”。

      容器重啟 – docker restart

      作用: ?? ?重啟一個(gè)或多個(gè)處于運(yùn)行狀態(tài)、暫停狀態(tài)、關(guān)閉狀態(tài)或者新建狀態(tài)的容器 ?? ?該命令相當(dāng)于stop和start命令的結(jié)合

      命令格式: ?? ?docker restart [OPTIONS] CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS): ?? ? -t, --time int ? ?? ??? ?重啟前,等待的時(shí)間,單位秒(默認(rèn) 10s) ?? ??? ??? ??? ?實(shí)則是關(guān)閉前等待的時(shí)間

      容器刪除 – docker container rm

      作用: ?? ?刪除一個(gè)或多個(gè)容器

      Docker核心技術(shù)之容器詳解

      命令格式: ?? ?docker container rm [OPTIONS] CONTAINER [CONTAINER...] ? ? ? 或者 docker rm [OPTIONS] CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS): ?? ? -f, --force ? ? ?? ??? ?強(qiáng)行刪除容器(會使用 SIGKILL信號)

      -v, --volumes ? ?? ??? ?同時(shí)刪除綁定在容器上的數(shù)據(jù)卷

      命令演示:

      五、容器信息查看

      容器詳細(xì)信息 – docker container inspect

      作用: ?? ?查看本地一個(gè)或多個(gè)容器的詳細(xì)信息

      命令格式: ?? ?docker container inspect [OPTIONS] CONTAINER [CONTAINER...] ? ? ? 或者 docker inspect [OPTIONS] CONTAINER [CONTAINER...]

      命令參數(shù)(OPTIONS):?? ? ?? ?-f, --format string?? ?利用特定Go語言的format格式輸出結(jié)果

      -s, --size?? ??? ?顯示總大小

      命令演示:

      容器日志信息 – docker logs

      作用: ?? ?查看容器的日志信息

      命令格式: ?? ?docker logs [OPTIONS] CONTAINER

      命令參數(shù)(OPTIONS):?? ? ?? ? ? ?--details?? ??? ?顯示日志的額外信息

      -f, --follow ? ? ? ? ?? ??? ?動態(tài)跟蹤顯示日志信息

      --since string ??? ?只顯示某事時(shí)間節(jié)點(diǎn)之后的

      --tail string ? ??? ??? ?顯示倒數(shù)的行數(shù)(默認(rèn)全部)

      -t, --timestamps ? ? ?? ?顯示timestamps時(shí)間

      --until string ? ?? ?只顯示某事時(shí)間節(jié)點(diǎn)之前的

      注意: ?? ?容器日志中記錄的是容器主進(jìn)程的輸出STDOUT\STDERR

      容器重命名 – docker rename

      作用: ?? ?修改容器的名稱

      命令格式: ?? ?docker rename CONTAINER NEW_NAME

      命令參數(shù)(OPTIONS):?? ? ?? ?無

      六、容器運(yùn)行時(shí)操作

      容器連接 – docker attach

      作用: ?? ?將當(dāng)前終端的STDIN、STDOUT、STDERR綁定到正在運(yùn)行的容器的主進(jìn)程上實(shí)現(xiàn)連接

      命令格式: ?? ?docker attach [OPTIONS] CONTAINER

      命令參數(shù)(OPTIONS):?? ? ?? ?--no-stdin ? ? ? ? ? ? ?? ?不綁定STDIN

      容器中執(zhí)行新命令 – docker exec

      作用: ?? ?在容器中運(yùn)行一個(gè)命令

      命令格式: ?? ?docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

      命令參數(shù)(OPTIONS):?? ? ?? ?-d, --detach ? ? ? ? ? ? ? ?? ?后臺運(yùn)行命令

      -i, --interactive?? ??? ?即使沒連接容器,也將當(dāng)前的STDIN綁定上

      -t, --tty ? ? ? ? ? ? ? ? ??? ?分配一個(gè)虛擬終端

      -w, --workdir string ? ? ? ?? ?指定在容器中的工作目錄

      -e, --env list ? ? ? ? ? ? ?? ?設(shè)置容器中運(yùn)行時(shí)的環(huán)境變量

      七、容器總結(jié)

      容器的詳解到這結(jié)束,后面還有更深入的文章講解!

      Docker Linux 容器

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:游戲開發(fā)中的進(jìn)階向量數(shù)學(xué)
      下一篇:JWT單點(diǎn)登錄(源碼學(xué)習(xí))
      相關(guān)文章
      亚洲熟女综合一区二区三区| 亚洲人成色777777精品| 国产亚洲综合一区二区三区| 亚洲中文字幕久久无码| 亚洲av日韩av无码av| 亚洲精品免费在线观看| 亚洲av永久无码精品秋霞电影影院| 久久久久亚洲AV无码专区网站| 国产中文在线亚洲精品官网| 亚洲一区二区三区无码影院| 亚洲中文字幕成人在线| 亚洲一区二区女搞男| 亚洲精品无码国产| 国产午夜亚洲精品国产成人小说| 亚洲日韩国产一区二区三区| 国产综合精品久久亚洲| 亚洲免费人成在线视频观看| 亚洲国产AV无码专区亚洲AV| 日本亚洲视频在线 | 在线观看亚洲免费视频| 精品国产日韩亚洲一区在线| 国产亚洲一卡2卡3卡4卡新区 | 成人午夜亚洲精品无码网站| 亚洲精品成人网站在线观看| 国产亚洲一区二区精品| 亚洲第一福利网站| 亚洲第一香蕉视频| jlzzjlzz亚洲jzjzjz| 亚洲人成电影网站色www| 久久久久久亚洲精品无码| 亚洲国产一区明星换脸| 国产亚洲精品无码拍拍拍色欲| 日韩亚洲人成在线综合日本| 亚洲激情视频在线观看| 亚洲精品无码久久毛片波多野吉衣| 国产成人精品日本亚洲11| 亚洲色大成网站www永久网站| 亚洲国产区男人本色| 亚洲精品WWW久久久久久| 亚洲中文字幕第一页在线 | 最新亚洲春色Av无码专区 |