base 映象 每天5分鐘玩轉容器技術(10)

2021-09-08 04:34:43 字數 1838 閱讀 1995

上一節我們介紹了最小的 docker 映象,本節討論 base 映象。

base 映象有兩層含義:

不依賴其他映象,從 scratch 構建。

其他映象可以之為基礎進行擴充套件。

所以,能稱作 base 映象的通常都是各種 linux 發行版的 docker 映象,比如 ubuntu, debian, centos 等。

檢視映象資訊:

映象大小不到 200mb。

等一下!

乙個 centos 才 200mb ?

平時我們安裝乙個 centos 至少都有幾個 gb,怎麼可能才 200mb !

相信這是幾乎所有 docker 初學者都會有的疑問,包括我自己。下面我們來解釋這個問題。

linux 作業系統由核心空間和使用者空間組成。如下圖所示:

rootfs

核心空間是 kernel,linux 剛啟動時會載入 bootfs 檔案系統,之後 bootfs 會被解除安裝掉。

使用者空間的檔案系統是 rootfs,包含我們熟悉的 /dev, /proc, /bin 等目錄。

對於 base 映象來說,底層直接用 host 的 kernel,自己只需要提供 rootfs 就行了。

而對於乙個精簡的 os,rootfs 可以很小,只需要包括最基本的命令、工具和程式庫就可以了。相比其他 linux 發行版,centos 的 rootfs 已經算臃腫的了,alpine 還不到 10mb。

我們平時安裝的 centos 除了 rootfs 還會選裝很多軟體、服務、圖形桌面等,需要好幾個 gb 就不足為奇了。

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

下面是 centos 映象的 dockerfile 的內容:

第二行 add 指令新增到映象的 tar 包就是 centos 7 的 rootfs。在製作映象時,這個 tar 包會自動解壓到 / 目錄下,生成 /dev, /proc, /bin 等目錄。

注:可在 docker hub 的映象描述頁面中檢視 dockerfile 。

支援執行多種 linux os

不同 linux 發行版的區別主要就是 rootfs。

比如 ubuntu 14.04 使用 upstart 管理服務,apt 管理軟體包;而 centos 7 使用 systemd 和 yum。這些都是使用者空間上的區別,linux kernel 差別不大。

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

上圖 debian 和 busybox(一種嵌入式 linux)上層提供各自的 rootfs,底層共用 docker host 的 kernel。

這裡需要說明的是:

base 映象只是在使用者空間與發行版一致,kernel 版本與發行版是不同的。

例如 centos 7 使用 3.x.x 的 kernel,如果 docker host 是 ubuntu 16.04(比如我們的實驗環境),那麼在 centos 容器中使用的實際是是 host 4.x.x 的 kernel。 

① host kernel 為 4.4.0-31

② 啟動並進入 centos 容器

③ 驗證容器是 centos 7

④ 容器的 kernel 版本與 host 一致

容器只能使用 host 的 kernel,並且不能修改。

所有容器都共用 host 的 kernel,在容器中沒辦法對 kernel 公升級。如果容器對 kernel 版本有要求(比如應用只能在某個 kernel 版本下執行),則不建議用容器,這種場景虛擬機器可能更合適。

下一節我們討論映象的分層結構。

base 映象 每天5分鐘玩轉容器技術(10)

原創 cloudman cloudman 2017 05 03 base 映象 上一節我們介紹了最小的 docker 映象,本節討論 base 映象。base 映象有兩層含義 不依賴其他映象,從 scratch 構建。其他映象可以之為基礎進行擴充套件。所以,能稱作 base 映象的通常都是各種 li...

構建映象 每天5分鐘玩轉容器技術(12)

對於 docker 使用者來說,最好的情況是不需要自己建立映象。幾乎所有常用的資料庫 中介軟體 應用軟體等都有現成的 docker 官方映象或其他人和組織建立的映象,我們只需要稍作配置就可以直接使用。使用現成映象的好處除了省去自己做映象的工作量外,更重要的是可以利用前人的經驗。特別是使用那些官方映象...

構建映象 每天5分鐘玩轉容器技術(12)

對於 docker 使用者來說,最好的情況是不需要自己建立映象。幾乎所有常用的資料庫 中介軟體 應用軟體等都有現成的 docker 官方映象或其他人和組織建立的映象,我們只需要稍作配置就可以直接使用。使用現成映象的好處除了省去自己做映象的工作量外,更重要的是可以利用前人的經驗。特別是使用那些官方映象...