一、容器簡介
容器(Container):容器是一種輕量級、可移植、并将應用程式進行的打包的技術,使應用程式可以在幾乎任何地方以相同的方式運作 Docker将鏡像檔案運作起來後,産生的對象就是容器。容器相當于是鏡像運作起來的一個執行個體。 容器具備一定的生命周期。 另外,可以借助docker ps指令檢視運作的容器,如同在linux上利用ps指令檢視運作着的程序那樣。
二、容器與虛拟機
Docker容器與虛拟機相同點
容器和虛拟機一樣,都會對實體硬體資源進行共享使用。
容器和虛拟機的生命周期比較相似(建立、運作、暫停、關閉等等)。
容器中或虛拟機中都可以安裝各種應用,如redis、mysql、nginx等。也就是說,在容器中的操作,如同在一個虛拟機(作業系統)中操作一樣。
同虛拟機一樣,容器建立後,會存儲在主控端上:linux上位于/var/lib/docker/containers下
Docker容器與虛拟機不同點
注意:容器并不是虛拟機,但它們有很多相似的地方
虛拟機的建立、啟動和關閉都是基于一個完整的作業系統。一個虛拟機就是一個完整的作業系統。而容器直接運作在主控端的核心上,其本質上以一系列程序的結合。
容器是輕量級的,虛拟機是重量級的。首先容器不需要額外的資源來管理(不需要Hypervisor、Guest OS),虛拟機額外更多的性能消耗;其次建立、啟動或關閉容器,如同建立、啟動或者關閉程序那麼輕松,而建立、啟動、關閉一個作業系統就沒那麼友善了。
也是以,意味着在給定的硬體上能運作更多數量的容器,甚至可以直接把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 start
作用: 将一個或多個處于建立狀态或關閉狀态的容器啟動起來
指令格式: docker start [OPTIONS] CONTAINER [CONTAINER...]
指令參數(OPTIONS): -a, --attach 将目前shell的 STDOUT/STDERR 連接配接到容器上
-i, --interactive 将目前shell的 STDIN連接配接到容器上
指令示範:
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 unpause
作用: 取消一個或多個處于暫停狀态的容器,恢複運作
指令格式: docker unpause CONTAINER [CONTAINER...]
指令參數(OPTIONS): 無
指令示範:
容器關閉 – docker stop
作用: 關閉一個或多個處于暫停狀态或者運作狀态的容器
指令格式: docker stop [OPTIONS] CONTAINER [CONTAINER...]
指令參數(OPTIONS): -t, --time int 關閉前,等待的時間,機關秒(預設 10s)
指令示範:
容器終止 – docker kill
作用: 強制并立即關閉一個或多個處于暫停狀态或者運作狀态的容器
指令格式: docker kill [OPTIONS] CONTAINER [CONTAINER...]
指令參數(OPTIONS): -s, --signal string 指定發送給容器的關閉信号 (預設“KILL”信号)
指令示範:
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 container inspect
作用: 檢視本地一個或多個容器的詳細資訊
指令格式: docker container inspect [OPTIONS] CONTAINER [CONTAINER...] 或者 docker inspect [OPTIONS] CONTAINER [CONTAINER...]
指令參數(OPTIONS): -f, --format string 利用特定Go語言的format格式輸出結果
-s, --size 顯示總大小
指令示範:
容器日志資訊 – 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 設定容器中運作時的環境變量