docker中映象的作用

2022-09-07 11:57:08 字數 2317 閱讀 3843

映象原理

映象映象到底是什麼?映象是一種輕量級、可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含執行某個軟體所需的所有內容,包括**、執行時、庫、環境變數和配置檔案。

1.unionfs(聯合檔案系統):

union檔案系統(unionfs)是一種分層、輕量級並且高效能的檔案系統,它支援對檔案系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同乙個虛擬檔案系統下(unite several directories into a single virtual filesystem)。

unionfs是docker映象的基礎

unionfs特性:

一次同時載入多個檔案系統,但從外面看起來,只能看到乙個檔案系統,聯合載入會把各層檔案系統疊加起來,這樣最終的檔案系統會包含所有底層的檔案和目錄

2.docker映象的載入原理

docker的映象實際上由一層一層的檔案系統組成,這種層級的檔案系統unionfs。

bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引導載入kernel, linux剛啟動時會載入bootfs檔案系統,在docker映象的最底層是bootfs。這一層與我們典型的linux/unix系統是一樣的,包含boot載入器和核心。當boot載入完成之後整個核心就都在記憶體中了,此時記憶體的使用權已由bootfs轉交給核心,此時系統也會解除安裝bootfs。

rootfs (root file system) ,在bootfs之上。包含的就是典型 linux 系統中的 /dev, /proc, /bin, /etc 等標準目錄和檔案。rootfs就是各種不同的作業系統發行版,比如ubuntu,centos等等。

虛擬化中的映象分為:

3.docker映象層

平時我們安裝進虛擬機器的centos都是好幾個g,為什麼docker這裡才200m??

對於乙個精簡的os,rootfs可以很小,只需要包括最基本的命令、工具和程式庫就可以了,因為底層直接用host的kernel,自己只需要提供 rootfs 就行了。由此可見對於不同的linux發行版, bootfs基本是一致的, rootfs會有差別, 因此不同的發行版可以公用bootfs。

每乙個映象都可能依賴於由乙個或多個下層的組成的另乙個映象。我們有時說,下層那個 映象是上層映象的父映象。乙個沒有任何父映象的映象,謂之基礎映象

docker pull就是將映象一層一層載入:

乙個mongodb的映象如下:

4.為什麼docker映象要採用這種分層結構呢?

最大的乙個好處就是 - 共享資源

比如:有多個映象都從相同的 base 映象構建而來,那麼宿主機只需在磁碟上儲存乙份base映象,同時記憶體中也只需載入乙份 base 映象,就可以為所有容器服務了。而且映象的每一層都可以被共享。

5.特點

docker映象都是唯讀的,當容器啟動時,乙個新的可寫層被載入到映象的頂部。這一層通常被稱為「容器層」。「容器層」之下的都叫「映象層」

通過容器製作映象

docker commit :從容器建立乙個新的映象。

語法docker commit [options] container [repository[:tag]]

options說明:

-a :提交的映象作者;

-c :使用dockerfile指令來建立映象;

-m :提交時的說明文字;

-p :在commit時,將容器暫停。

例項

將容器a404c6c174a2 儲存為新的映象,並新增提交人資訊和說明資訊。

Docker映象中的base映象理解

base 映象有兩層含義 不依賴其他映象,從 scratch 構建。其他映象可以之為基礎進行擴充套件。所以,能稱作 base 映象的通常都是各種 linux 發行版的 docker 映象,比如 ubuntu,debian,centos 等。檢視映象資訊 映象大小不到 200mb。等一下!乙個 cen...

docker中映象的使用

映象是docker的三大元件之一 1.獲取映象 docker hub 上由大量的映象 獲取映象命令 docker pull 選項 docker registry 位址 埠號 倉庫名 標籤 選項可以通過docker pull help檢視,倉庫名 使用者名稱 軟體名 如果不給使用者名稱,預設位libr...

刪除 Docker 映象中為 none 的映象

dockerfile 更新頻繁,自然docker build構建同名映象也頻繁的很,產生了眾多名為none的無用映象。分別執行以下三行可清除 docker ps a grep exited awk xargs docker stop docker ps a grep exited awk xargs...