Docker筆記(二) Docker管理的物件

2022-07-04 03:39:18 字數 1796 閱讀 1087

在docker筆記(一):什麼是docker中,我們提到了docker管理的物件包含映象、容器、網路、資料卷等,本文就來介紹下這些物件及用途。

所謂映象,是乙個靜態的概念。它對我們期望幹的事情做了一些定義,比如要執行什麼程式,需要哪些依賴,需要什麼樣的配置,需要開放哪個網路埠等等。

docker的映象是乙個特殊的檔案系統,提供了執行時需要的程式、庫、資源、配置等檔案,還包含一些為執行時準備的配置引數(如環境變數、匿名資料卷、使用者等),映象不包含任何動態資料,其內容在構建之後也不會被改變。

映象的檔案系統有乙個分層儲存的概念,採用的是union fs技術,因此,映象並不是簡單地由一組檔案組成,而是由多層檔案系統疊加聯合組成。如下圖所示

相對映象,容器是乙個動態的執行時的概念,它與映象的關係類似於物件導向中類與例項的關係。容器可以被建立、啟動、停止、刪除等。容器執行實質上就是執行乙個程序,但與那些直接在宿主機上執行的程序不同,容器執行在自己的獨立的隔離的命名空間中——擁有自己的root檔案系統、網路配置、程序空間,甚至自己的使用者id空間,因此雖然是以程序的形式執行,但好像是執行在乙個獨立的系統中一樣,這樣相比直接執行於宿主機的程序,容器的執行顯得更為安全。

前面說到映象的分層儲存概念,對於容器來說,實際上也是以映象作為基礎層,在其上建立了乙個當前容器的儲存層,如下圖

以映象ubuntu:15.04為基礎層所建立的容器,都有乙個自己的可讀寫的儲存層(映象的儲存層是唯讀的)。容器儲存層的生命週期與容器一樣,容器銷毀時,容器的儲存層也會隨之消亡,任何儲存在容器儲存層的資料也都會隨容器的刪除而丟失,因此一般我們要保持容器儲存層的無狀態化,所有檔案的寫操作,都應該使用資料卷或繫結宿主機目錄。

資料卷是乙個獨立於容器,可供乙個或多個容器使用的特殊目錄,它繞過了union fs,不會隨容器的銷毀而消亡。這好比我們在阿里雲上建虛機,再載入乙個資料盤一樣,一般產生的資料都要儲存在資料盤,而不是虛機的系統盤。

資料卷具備如下特性:

可以在容器之間共享和重用

對資料卷的修改會立馬生效

資料卷的更新,不會影響到映象

資料卷缺省會一直存在,不會隨容器的刪除而消亡

docker容器是如何與外部進行網路通訊的?一般來說,我們在執行容器時,只需要指定容器服務埠與宿主機埠的對映,就可以通過宿主機ip與對映的埠訪問容器服務了,因為docker預設使用了bridge的模式來實現容器與外部的通訊。

docker的網路子系統通過使用一些驅動程式,是可插拔式的,預設提供了如下幾種驅動:

bridge:預設的網路驅動。執行在容器中的應用程式一般是通過網橋與外部進行通訊。

host:容器直接使用宿主機的網路通訊。host只在基於docker 17.06或以上版本的swarm服務中可用

overlay:overlay可將多個docker daemon程序連線起來使得swarm服務之間能相互通訊,也可以將overlay用於swarm服務與容器之間,或執行在不同docker daemon上的容器之間的通訊,不需要作業系統層面的路由配置。

macvlan:macvlan允許你分配乙個mac位址給容器,讓它像一台物理裝置一樣加入你的網路中。docker daemon通過mac位址將請求路由給容器,適用於那些希望直接連到物理網路的遺留應用。

none:禁用所有網路。一般與乙個自定義的網路驅動一起使用。none不能用於swarm服務。

其它第三方網路外掛程式:可從docker hub或其它第三方**商獲取安裝。

總之,bridge適用於在同一臺宿主機執行多個容器的場景;host適用於不應與宿主機進行網路隔離的場景;overlay適用於執行在不同宿主機上的容器間通訊,或多個應用通過swarm服務來共同協作的場景;macvlan適用於從虛擬機器遷移配置或希望容器作為物理機一樣使用網路的場景。

docker學習筆記(二) docker安裝配置

在官網頁面,我們可以看到目前 docker 支援docker desktop docker hub docker cloud.docker desktop 支援在桌面系統或雲平台安裝 docker dockerhub 官方提供的雲託管服務,可以提供公有或私有的映象倉庫 dockercloud 官方提...

Docker學習筆記(二)

docker使用cgroups提供容器隔離。cgroups的作用 生搬硬套 1.限制程序組的資源占用 cpu,記憶體 2.為程序組製作pid,uts,ipc,網路,使用者及裝載名字空間?一直出現的關鍵字是名字空間,這裡的名字空間是核心裡的名字空間。還有乙個關鍵字隔離。某乙個pid命名空間允許它裡面的...

Docker學習筆記(二)

docker的核心技術在於容器 container 的應用,之所以作為輕量級的虛擬應用,在於其所有的程式執行均承載在宿主機的硬體環境之上,區別於傳統的虛擬機器技術。一 容器的建立 列出本機上有的存有的映象 i 開啟容器的標準輸入。t 告訴docker為容器建立乙個命令列終端 name 指定容器名稱,...