1. 程式人生 > >Docker 之 概念介紹

Docker 之 概念介紹

外部 遷移 registry 中間數據 wid nbsp core 令行 簡單的

1 概述

linux容器是一類解決方案,如lxc,dockerlxc是容器管理功能。

lxc是容器解決方案較早的實現者,docker是後續的實現者。

docker進一步輕量化lxc需求,把做好的系統模板做成一個磁盤映像文件,安裝的過程相當於是復制鏡像文件。

可以做一個centos鏡像,二級mysql鏡像和php鏡像。

docker的一個程序只用於運行一個進程。所以在docker裏就不需要init進程(用來管理所有的進程,但是這裏只有一個進程)。如果一個用戶空間只有一個子進程,就不需要容器了。

應用程序的分發和發布

docker實現應用分發的結構。docker負責把集裝箱安裝和卸載。

lxc沒有解決程序分發的問題,

docker借助於鏡像文件,把依賴的文件都打包到鏡像文件裏,實現更簡單的安裝過程。

docker把要啟動的環境都打包成一個包,做成鏡像文件,這個鏡像文件只需要放到指定的路徑下,就可以被啟動,不需要釋放文件。鏡像文件啟動後是在一個獨立環境下運行的進程。

docker把最終需要運行的文件都放到了一起。讓多個進程通信,即讓容器間通信即可。

如果當前主機奔潰,要新建一個環境

依賴相同的文件,在用戶空間來看。是不一樣的,但是,在底層可能是同一個。

docker能重構程序分發的技術。

這裏開發鏡像就變成尤其重要。

任何一個物理主機down機,就需要用虛擬化的主機,如vsphere技術,或者是k8s。實現物理機的快速遷移。

實現彈性擴展和壓縮。跨多主機的容器編排和框架,就PaaS,平臺級服務。是一個雲環境

一個docker容器只是用來運行一個程序。

分層構建,啟動容器,在本地放置相應的鏡像文件。分層構建可以復用。依賴於特殊的存儲設備,本地不支持分層構建的存儲機制,因此需要在內核的基礎上用相應技術實現。

docker最開始是lxc的二次封裝,引擎為lxc,提升了lxc的應用和便捷,但是,後續又重新研發了容器引擎,拋棄了lxc。之後,docker自有的容器技術為libcontainer,後續升級為runC,runC是開放式的工業化標準,容器標準為OCI,有兩個規範,runtime-sepc和image-sepc,最新的docker遵循runC標準

Docker的競爭對手coreOS,coreOS也是一個容器技術,通過rkt實現

2 Docker架構

在一臺主機上安裝docker deamon 和docker client,啟動守護進程,通過client的命令行工具,client發起命令,連接到docker deamon進程,deamon來接收命令,在本地啟動一個容器,可以從互聯網上拉一個鏡像下來,後期可以根據自己的分發需求,封裝鏡像

相關名詞解釋如下

Docker host:運行容器的主機

registry:放置鏡像的倉庫集合的服務器,為docker的registry。docker有鏡像托管的鏡像,可以在docker hub上註冊賬號,賬號可公共可私有。目前docker hub倉庫沒有收費。

client:是用來觸發容器的運行

docker daemon為服務端,用來啟動容器,接收遠程的控制請求

dockerc/s架構的應用。docker即是客戶端也是服務器端,重點是看哪個工具實現

Docker deamon 和docker基於http或者https協議進行通信

Docker架構如下

技術分享圖片

docker鏡像文件是只讀的,防止一個容器被修改影響另一個容器。由於鏡像是分層構建的,可以臨時構建一層可讀可寫的,覆蓋在鏡像的最上層。這裏文件可以被刪除或者更改,用戶看到的任何修改都是在這一層修改的,對原生鏡像沒有任何的修改。

因此每個容器的讀寫操作都是在最上層的讀寫層上實現的。萬一容器被刪除,所有的數據都沒有,包括這個讀寫層上的數據。但是這樣不利於遷移和分發,因為過去運行過程的中間數據沒有在鏡像裏,這個讀寫層盡量放臨時文件,重要的文件,需要通過掛載到外部存儲的卷來實現,這樣遷移的時候,容器和重要數據都可以被正常的加載。

容器自身有生命周期,數據在卷上,關閉容器後,如果要重新打開,只需要把新的鏡像關聯到對應的卷即可加載相應的數據,將數據和鏡像分離。


Docker 之 概念介紹