Docker核心技术之容器详解
一、容器簡介
容器(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 ? ? ? ? ? ? ?? ?設置容器中運行時的環境變量
七、容器總結
容器的詳解到這結束,后面還有更深入的文章講解!
總結
以上是生活随笔為你收集整理的Docker核心技术之容器详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker核心技术之镜像
- 下一篇: Docker核心技术之容器与镜像深入了解