docker的三大核心為:映象、容器、倉庫。下面簡單的介紹一下這三大核心概念。
1.docker映象(p_w_picpath)
映象是建立docker容器的基礎,docker映象類似於虛擬機器映象,可以將它理解為乙個面向docker引擎的唯讀模組,包含檔案系統。
建立映象有三種方法:
(1)基於已有映象的容器建立。主要是利用docker commit命令。
(2)基於本地模板匯入。推薦利用openvz提供的模板來建立。
(3)基於dockerfile建立。首先按照dockerfile的格式,編寫好dockerfile檔案,之後通
過docker build命令來建立映象。docker build會讀取制定的dockerfile,由docker伺服器 來建立映象。
2.docker容器(container)
docker容器類似乙個輕量級的沙箱,docker利用容器來執行和隔離應用。
容器是從映象建立的應用執行例項,可以將其啟動、開始、停止、刪除,而這些容器都是相互隔離、互不可見的。
讀者可以把容器看做乙個簡易的linux系統環境(這包括root使用者許可權、程序空間、使用者空間和網路空間等),以及執行在其中的應用程式打包而成的應用盒子。
映象本身是唯讀。容器從映象啟動的時候,docker會在映象的最上層建乙個可寫層,映象本身保持不變。
可以利用docker create命令建立乙個容器,建立後的的容器處於停止狀態,可以使用docker start命令來啟動它。也可以直接利用docker run命令來直接從映象啟動執行乙個容器。docker run = docker creat + docker start。
當利用docker run建立並啟動乙個容器時,docker在後台的標準操作包括:
(2)利用映象建立並啟動乙個容器。
(3)分配乙個檔案系統,並在唯讀的映象層外面掛載一層可讀寫層。
(4)從宿主機配置的網橋介面中橋接乙個虛擬的介面到容器中。
(5)從位址池中配置乙個ip位址給容器。
(6)執行使用者指定的應用程式。
(7)執行完畢後容器終止。
3.docker倉庫(repository)
倉庫是存放docker映象的地方。倉庫和註冊伺服器(registry)還是有區別的。註冊伺服器是存放倉庫的地方,在其中存放了很多倉庫,每個倉庫存放一類映象檔案。
docker映象是docker容器執行的基礎,沒有docker映象,就不可能有docker容器,這也是docker的設計原則之一。
可以理解的是:docker映象畢竟是映象,屬於靜態的內容;而docker容器就不一樣了,容器屬於動態的內容。動態的內容,大家很容易聯想到程序,記憶體,cpu等之類的東西。的確,docker容器作為動態的內容,都會包含這些。
為了便於理解,大家可以把docker容器,理解為乙個或多個執行程序,而這些執行程序將占有相應的記憶體,相應的cpu計算資源,相應的虛擬網路裝置以及相應的檔案系統資源。而docker容器所占用的檔案系統資源,則通過docker映象的映象層檔案來提供。
那麼作為靜態的映象,如何才有能力轉化為乙個動態的docker容器呢?此時,我們可以想象:第一,轉化的依據是什麼;第二,由誰來執行這個轉化操作。
其實,轉化的依據是每個映象的json檔案,docker可以通過解析docker映象的json的檔案,獲知應該在這個映象之上執行什麼樣的程序,應該為程序配置怎麼樣的環境變數,此時也就實現了靜態向動態的轉變。
誰來執行這個轉化工作?答案是docker守護程序。也許大家早就理解這樣一句 話:docker容器實質上就是乙個或者多個程序,而容器的父程序就是docker守護程序。這樣的,轉化工作的執行就不難理解了:docker守護程序 手握docker映象的json檔案,為容器配置相應的環境,並真正執行docker映象所指定的程序,完成docker容器的真正建立。
docker容器執行起來之後,docker映象json檔案就失去作用了。此時docker映象的絕大部分作用就是:為docker容器提供乙個檔案系統的視角,供容器內部的程序訪問檔案資源。
再次回到上圖,我們再來看看容器和映象之間的一些特殊關係。首先,之前已經提及docker映象是分層管理的,管理docker容器的時候,docker映象仍然是分層管理的。由於此時動態的容器中已經存在程序,程序就會對檔案系統視角內的檔案進行讀寫操作,因此,就會涉及乙個問題:容器是否會篡改docker映象的內容?
答案自然是不會的。統一來講,正如上圖,所有的docker映象層對於容器來說,都是唯讀的,容器對於檔案的寫操作絕對不會作用在映象中。
既然如此,實現的原理就很重要,究其根本:docker守護程序會在docker映象的 最上層之上,再新增乙個可讀寫層,容器所有的寫操作都會作用到這一層中。而如果docker容器需要寫底層docker映象中的檔案,那麼此時就會涉及一 個叫copy-on-write的機制,即aufs等聯合檔案系統保證:首先將此檔案從docker映象層中拷貝至最上層的可讀寫層,然後容器程序再對讀 寫層中的副本進行寫操縱。對於容器程序來講,它只能看到最上層的檔案。
docker 三大核心概念
映象 容器 倉庫是docker的三大核心概念。docker映象類似於虛擬機器映象,你可以將其理解為乙個唯讀模板。docker容器類似於乙個輕量級的沙箱,docker利用容器來執行和隔離應用。容器是從映象建立的應用執行例項。可以將其啟動 開始 停止 刪除,而這些容器都是彼此相互隔離的 互不可見的。映象...
Docker 核心概念
1.docker映象 docker映象 image 類似於虛擬機器映象,可以將它理解為乙個面向docker引擎的唯讀模板,包含了檔案系統。例如 乙個映象可以只包含乙個完整的ubuntu作業系統環境,可以把它稱為乙個ubuntu映象。映象也可以安裝了apache應用程式 或使用者需要的其他軟體 可以把...
Docker核心概念
docker引擎的基礎是基於linux容器 lxc 技術,即容器有效的將由單個作業系統管理的資源劃分到孤立的組中,以便更好地在孤立的組之間平衡有衝突的資源使用需求。docker可以高效的建立應用。docker在運維中的優勢 1.更快的交付和部署。使用docker,開發人員可以使用映象來快速構建一套標...