天天看點

Docker核心技術之容器詳解

一、容器簡介

容器(Container):容器是一種輕量級、可移植、并将應用程式進行的打包的技術,使應用程式可以在幾乎任何地方以相同的方式運作 Docker将鏡像檔案運作起來後,産生的對象就是容器。容器相當于是鏡像運作起來的一個執行個體。 容器具備一定的生命周期。 另外,可以借助docker ps指令檢視運作的容器,如同在linux上利用ps指令檢視運作着的程序那樣。

二、容器與虛拟機

Docker容器與虛拟機相同點

容器和虛拟機一樣,都會對實體硬體資源進行共享使用。

容器和虛拟機的生命周期比較相似(建立、運作、暫停、關閉等等)。

容器中或虛拟機中都可以安裝各種應用,如redis、mysql、nginx等。也就是說,在容器中的操作,如同在一個虛拟機(作業系統)中操作一樣。

同虛拟機一樣,容器建立後,會存儲在主控端上:linux上位于/var/lib/docker/containers下

Docker容器與虛拟機不同點

注意:容器并不是虛拟機,但它們有很多相似的地方

虛拟機的建立、啟動和關閉都是基于一個完整的作業系統。一個虛拟機就是一個完整的作業系統。而容器直接運作在主控端的核心上,其本質上以一系列程序的結合。

容器是輕量級的,虛拟機是重量級的。首先容器不需要額外的資源來管理(不需要Hypervisor、Guest OS),虛拟機額外更多的性能消耗;其次建立、啟動或關閉容器,如同建立、啟動或者關閉程序那麼輕松,而建立、啟動、關閉一個作業系統就沒那麼友善了。

也是以,意味着在給定的硬體上能運作更多數量的容器,甚至可以直接把Docker運作在虛拟機上。

Docker核心技術之容器詳解
Docker核心技術之容器詳解

三、容器的生命周期

虛拟機的生命周期

Docker核心技術之容器詳解

容器的生命周期

Docker核心技術之容器詳解

四、容器的生命周期管理

容器建立 – docker create

作用:     利用鏡像建立出一個Created 狀态的待啟動容器

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

指令參數(OPTIONS):-t, --tty                   配置設定一個僞TTY,也就是配置設定虛拟終端         

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

                                     --name                  為容器起名,如果沒有指定将會随機産生一個名稱

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

指令示範:

Docker核心技術之容器詳解

容器啟動 – docker start

作用:     将一個或多個處于建立狀态或關閉狀态的容器啟動起來

指令格式:     docker start [OPTIONS] CONTAINER [CONTAINER...]

指令參數(OPTIONS):     -a, --attach        将目前shell的 STDOUT/STDERR 連接配接到容器上     

                                          -i, --interactive        将目前shell的 STDIN連接配接到容器上

指令示範:

Docker核心技術之容器詳解
Docker核心技術之容器詳解

docker run 與 docker create + docker start

docker run 相當于 docker create + docker start –a       前台模式

docker run -d 相當于 docker create + docker start       背景模式

容器暫停 – docker pause

作用:     暫停一個或多個處于運作狀态的容器

指令格式:     docker pause CONTAINER [CONTAINER...]

指令參數(OPTIONS):     無

指令示範:

Docker核心技術之容器詳解

容器取消暫停 – docker unpause

作用:     取消一個或多個處于暫停狀态的容器,恢複運作

指令格式:     docker unpause CONTAINER [CONTAINER...]

指令參數(OPTIONS):     無

指令示範:

Docker核心技術之容器詳解

容器關閉 – docker stop

作用:     關閉一個或多個處于暫停狀态或者運作狀态的容器

指令格式:     docker stop [OPTIONS] CONTAINER [CONTAINER...]

指令參數(OPTIONS):     -t, --time int           關閉前,等待的時間,機關秒(預設 10s)

指令示範:

Docker核心技術之容器詳解

容器終止 – docker kill

作用:     強制并立即關閉一個或多個處于暫停狀态或者運作狀态的容器

指令格式:     docker kill [OPTIONS] CONTAINER [CONTAINER...]

指令參數(OPTIONS):     -s, --signal string       指定發送給容器的關閉信号 (預設“KILL”信号)

指令示範:

Docker核心技術之容器詳解

docker stop和docker kill的差別

前提知識點:

Linux其中兩種終止程序的信号是:SIGTERM和SIGKILL

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

SIGTERM信号:程式終結信号,可以由kill指令産生。與SIGKILL不同的是,SIGTERM信号可以被阻塞和終止,以便程式在退出前可以儲存工作或清理臨時檔案等。

docker stop 會先發出SIGTERM信号給程序,告訴程序即将會被關閉。在-t指定的等待時間過了之後,将會立即發出SIGKILL信号,直接關閉容器。

docker kill 直接發出SIGKILL信号關閉容器。但也可以通過-s參數修改發出的信号。

是以會發現在docker stop的等過過程中,如果終止docker stop的執行,容器最終沒有被關閉。而docker kill幾乎是立刻發生,無法撤銷。

此外還有些異常原因也會導緻容器被關閉,比如docker daemon重新開機、容器内部程序運作發生錯誤等等“異常原因”。

容器重新開機 – docker restart

作用:     重新開機一個或多個處于運作狀态、暫停狀态、關閉狀态或者建立狀态的容器     該指令相當于stop和start指令的結合

指令格式:     docker restart [OPTIONS] CONTAINER [CONTAINER...]

指令參數(OPTIONS):      -t, --time int           重新開機前,等待的時間,機關秒(預設 10s)                 實則是關閉前等待的時間

容器删除 – docker container rm

作用:     删除一個或多個容器

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

指令參數(OPTIONS):      -f, --force             強行删除容器(會使用 SIGKILL信号)     

                                           -v, --volumes           同時删除綁定在容器上的資料卷    

指令示範:

Docker核心技術之容器詳解

五、容器資訊檢視

容器詳細資訊 – docker container inspect

作用:     檢視本地一個或多個容器的詳細資訊

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

指令參數(OPTIONS):         -f, --format string    利用特定Go語言的format格式輸出結果     

                                              -s, --size        顯示總大小

指令示範:

Docker核心技術之容器詳解

容器日志資訊 – docker logs

作用:     檢視容器的日志資訊

指令格式:     docker logs [OPTIONS] CONTAINER

指令參數(OPTIONS):             --details        顯示日志的額外資訊     

                                                  -f, --follow                 動态跟蹤顯示日志資訊         

                                                  --since string      隻顯示某事時間節點之後的              

                                                  --tail string            顯示倒數的行數(預設全部)     

                                                  -t, --timestamps         顯示timestamps時間         

                                                  --until string       隻顯示某事時間節點之前的

注意:     容器日志中記錄的是容器主程序的輸出STDOUT\STDERR

容器重命名 – docker rename

作用:     修改容器的名稱

指令格式:     docker rename CONTAINER NEW_NAME

指令參數(OPTIONS):         無

六、容器運作時操作

容器連接配接 – docker attach

作用:     将目前終端的STDIN、STDOUT、STDERR綁定到正在運作的容器的主程序上實作連接配接

指令格式:     docker attach [OPTIONS] CONTAINER

指令參數(OPTIONS):         --no-stdin                 不綁定STDIN

容器中執行新指令 – docker exec

作用:     在容器中運作一個指令

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

指令參數(OPTIONS):         -d, --detach                   背景運作指令     

                                              -i, --interactive        即使沒連接配接容器,也将目前的STDIN綁定上     

                                              -t, --tty                      配置設定一個虛拟終端     

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

                                              -e, --env list                 設定容器中運作時的環境變量

七、容器總結