Docker映象分層的原理詳解

2022-09-24 18:39:13 字數 2183 閱讀 8988

base映象

base映象有兩層含義:

所以,base映象一般都是各種linux發行版本的docker映象,比如:ubuntu,debian或者centos等。

base映象提供的都是最小安裝的linux發行版本。

我們大部分映象都將是基於base映象構建的。所以,通常使用的是官方發布的base映象。可以在docker hub裡找到。比如centos:

我們可以自己構建docker base映象,也可以直接使用已有的base映象。比如centos。我們可以直接從docker hub上拉取。

拉取docker pull centos

檢視docker images centos

repository tag image id created 程式設計客棧 size

centos latest 1e1148e4cc2c 2 months ago 202mb

可以看到最新的centos映象只有200mb,是不是覺得太小了?這是因為docker映象在執行的時候直接使用docker宿主機器的kernel。

linux作業系統由使用者空間和核心空間構成。

核心空間是kernel,使用者空間是rootfs,不同發行版的區別主要是rootfs。比如ubuntu 14.04使用 upstart 管理服務,apt 管理軟體包;而 centos 7 使用 systemd 和 yum。這些都是使用者空間的不同,kernel差別不大。

所以docker可以同時支援多種 linux 映象,模擬出不同的作業系統環境。

base映象只是使用者空間和發行版本一致,核心空間使用的是docker宿主機器的kernel。

儲存結構

上文裡展示了如何**乙個base映象。我們通常是基於這份base映象來構建我們自己的映象。比如,在centos裡新增乙個nginx負載均衡。首先,得需要了解映象的結構是什麼。

官方文件:

docker映象的分層結構

啟動映象時,乙個新的可寫層會載入到映象的頂層。這一層通常稱為"容器層",之下是"映象層"。

容器層可以讀寫,容器所有發生檔案變更寫都發生在這一層。映象層只允許讀取,read-only。

修改時複製策略(copy-on-write)

docker通過乙個修改時複製策略來保證b程式設計客棧ase映象的安全性,以及更高的效能和空間利用率。

從最上層的映象層開始往下找,找到後讀取到記憶體中,若已經在記憶體中,可以直接使用。換句話說,執行在同一臺機器上的docker容器共享執行時相同的檔案程式設計客棧。

從上往下查詢,找到後複製到容器層,對於容器來說,可以看到的是容器層的這個檔案,看不到映象層裡的檔案,然後直接修改容器層的檔案。

從上往下查詢,找到後在容器中記錄刪除,並不是真正的刪除,而是軟刪除。這導致映象體積只會增加,不會減少。

當容器需要增加檔案的時候

直接在最上層的容器可寫層增加,不會影響映象層。

映象的精簡優化

優化基礎映象

基礎映象選擇時,選擇合適的較小的映象,常用的 linux 系統映象一般有 ubuntu、centos、alpine等

串聯dockerfile指令

在dockerfile中,每條指令都會建立乙個映象層,從而增加映象的大小。當前層的修改不會影響上一層。

具體例項如下:

自定義dockerfile:

from ubuntu:14.04

#基礎源映象

maintainer xiongkun

#描述映象的建立者,名稱和郵箱

workdir /home

run dd if=/dev/zero of=50m.file bs=1m count=50

#建立大小為50m的測試檔案

run rm -rf 50m.file

#刪除該檔案

優化後的dockerfile:

from ubuntu:14.04

#基礎源映象

maintainer xiongkun

#描述映象的建立者,名稱和郵箱

workdir /home

run dd if=/dev/zero of=50m.file bs=1m count=50 && rm -rf 50m.file

#建立檔案,同時在該層刪除該檔案

本文標題: docker映象分層的原理詳解

本文位址: /jiqiao/fuwuqi/291395.html

docker映象分層原理

學習了linux的 namespace之後,知道了docker是如何將機器的資源進行隔離的,那麼docker中的映象分層技術的原理是什麼呢?答案是聯合檔案系統 先看看overlay的架構圖也許就明白了一半了 原理 overlayfs在linux主機上只有兩層,乙個目錄在下層,用來儲存映象 docke...

docker映象原理

映象就是基於執行環境的軟體包,不妨想象成乙個千層餅 映象底層就是unionfilesystem聯合檔案系統,簡稱union檔案,分為 bootfs 引導載入kernel,包含載入器和記憶體 rootfs 不一樣,諸如ubuntu 和centos的區別,但他們都共用bootfs載入的核心 顯然這種分層...

Docker 映象原理

目錄參考文獻 映象是什麼 unionfs 映象載入原理 為什麼採用分層映象 toc尚矽谷 docker核心技術 基礎篇 形象說法 映象就像千層餅,一層套一層 官方 映象是一種輕量級 可執行的獨立軟體包,用來打包軟體執行環境和基於執行環境開發的軟體,它包含執行某個軟體所需的所有內容包括 執行時 庫 環...