來自 nigel poulton的深入淺出docker
docker引擎由如下的元件構成
docker客戶端 docker client
docker守護程序 docker deamon
containerd
runc
總體邏輯如圖
docker首次發布時,docker引擎由兩個核心元件構成lxc和docker deamon.
docker deamon是單一的二進位制檔案,包含諸如docker客戶端,docker api,容器執行時,映象構建等.
lxc提供了對諸如命名空間和控制組等基礎工具的操作能力,它們是基於linux核心的容器虛擬化技術.
lxc是基於linux的,這對於跨平台的專案來說是個問題.
其次核心的元件依賴於外部工具,docker公司開發了名為libcontainer的自研工具,用於替代lxc,它的目的是成為平台無關的工具,可基於不同的docker核心為上層提供必要的容器互動功能.在docker 0.9 版本中,libcontainer取代lxc成為預設的執行驅動.
拆解將大而全的docker deamon程序並將其模組化,即盡可能地拆解出其中的功能特性,並用小而專的工具來實現它.
目前的docker引擎架構示意圖如圖
docker公司進行docker deamon程序的拆解和重構的時候,oci也正在著手定義兩個容器相關的規範
例如docker deamon不再包含任何容器執行時的**,所有的容器執行**在乙個單獨的oci相容層中實現,預設情況下,docker使用runc來實現這一點.此外,docker引擎中的containerd元件確保了docker映象能夠以正確的oci bundle的格式傳遞給runc.
runc實質上是乙個輕量級的,針對libcontainer進行了包裝的命令互動工具,有時候將runc所在的那一層稱為oci層
docker deamon的功能進行拆解後,所有的容器執行邏輯被重構到containerd中,它的主要任務是容器的生命週期管理 start|stop|pause|rm ...
containerd用來指揮runc建立新容器,每次建立容器時,它都會fork乙個新的runc例項,一旦容器建立完畢,對應的runc程序就會退出,因此即時執行上百個容器,也無需保持上百個執行中的runc例項.
一旦容器程序的父程序runc退出,相關聯的containerd-shim程序就會成為容器的父程序.
shim程序的部分職責如下:
保持所有stdin和stdout流都是開啟狀態,從而當deamon重啟的時候,容器不會因為管道(pipe)的關閉而終止
將容器的退出狀態反饋給deamon
Docker筆記3 docker的資料管理
資料管理主要針對資料持久化 多容器之間的資料共享和資料的備份和恢復。資料管理主要有兩種方式 基本屬性 可供容器使用的特殊目錄,直接把主機作業系統的目錄直接對映進容器。資料卷有如下的幾個特性,類似linux的mount 建立的例子 docker volume create d local test這相...
部署(3) docker高階
1,網路模式說明 特點 和宿主機的網絡卡一樣,方便進行部署使用 2,橋接模式,bridge模式 特點 只有兩個網絡卡,並且多個橋接模式的容器,在乙個網段,方便搭建集群 3,空模式,none模式 特點 之後回環位址,不能聯網,在需要絕對安全情況下使用 4,container模式 特點 複製其他容器的網...
3 docker製作映象
映象具有 重複性 和 不可變性 docker run it golang 1.17新建 dockerfile 配置檔案 啟動編譯環境 from golang 1.17 配置編譯環境 拷貝源 到映象中 copy gateway go src 編譯 workdir go src gateway run ...