2019-04-23-docker基本知識(鏡像)

鏡像是 Docker 容器的基石惠赫,容器是鏡像的運行實例呢岗,有了鏡像才能啟動容器限府。

本章內(nèi)容安排如下:

首先通過研究幾個典型的鏡像,分析鏡像的內(nèi)部結(jié)構(gòu)供汛。

然后學習如何構(gòu)建自己的鏡像。

最后介紹怎樣管理和分發(fā)鏡像。

鏡像的內(nèi)部結(jié)構(gòu)

為什么我們要討論鏡像的內(nèi)部結(jié)構(gòu)怔昨?

如果只是使用鏡像雀久,當然不需要了解,直接通過docker命令下載和運行就可以了趁舀。

但如果我們想創(chuàng)建自己的鏡像赖捌,或者想理解 Docker 為什么是輕量級的,就非常有必要學習這部分知識了矮烹。

我們從一個最小的鏡像開始吧越庇。

hello-world - 最小的鏡像

hello-world 是 Docker 官方提供的一個鏡像,通常用來驗證 Docker 是否安裝成功奉狈。

我們先通過docker pull從 Docker Hub 下載它卤唉。

用docker images命令查看鏡像的信息。

hello-world 鏡像竟然還不到 2KB!

通過docker run運行仁期。

其實我們更關(guān)心 hello-world 鏡像包含哪些內(nèi)容桑驱。

Dockerfile 是鏡像的描述文件,定義了如何構(gòu)建 Docker 鏡像跛蛋。Dockerfile 的語法簡潔且可讀性強熬的,后面我們會專門討論如何編寫 Dockerfile。

hello-world 的 Dockerfile 內(nèi)容如下:

只有短短三條指令赊级。

FROM scratch

此鏡像是從白手起家押框,從 0 開始構(gòu)建。

COPY hello /

將文件“hello”復(fù)制到鏡像的根目錄理逊。

CMD ["/hello"]

容器啟動時橡伞,執(zhí)行 /hello

鏡像 hello-world 中就只有一個可執(zhí)行文件 “hello”,其功能就是打印出 “Hello from Docker ......” 等信息挡鞍。

/hello 就是文件系統(tǒng)的全部內(nèi)容骑歹,連最基本的 /bin,/usr, /lib, /dev 都沒有墨微。

hello-world 雖然是一個完整的鏡像道媚,但它并沒有什么實際用途。通常來說翘县,我們希望鏡像能提供一個基本的操作系統(tǒng)環(huán)境最域,用戶可以根據(jù)需要安裝和配置軟件。這樣的鏡像我們稱作 base 鏡像锈麸。

我們下一節(jié)討論 base 鏡像

base 鏡像有兩層含義:

不依賴其他鏡像镀脂,從 scratch 構(gòu)建。

其他鏡像可以之為基礎(chǔ)進行擴展忘伞。

所以薄翅,能稱作 base 鏡像的通常都是各種 Linux 發(fā)行版的 Docker 鏡像沙兰,比如 Ubuntu, Debian, CentOS 等。

我們以 CentOS 為例考察 base 鏡像包含哪些內(nèi)容翘魄。

下載鏡像:

docker pull centos

查看鏡像信息:

鏡像大小不到 200MB鼎天。

等一下!

一個 CentOS 才 200MB 暑竟?

平時我們安裝一個 CentOS 至少都有幾個 GB斋射,怎么可能才 200MB !

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

Linux 操作系統(tǒng)由內(nèi)核空間和用戶空間組成。如下圖所示:

rootfs

內(nèi)核空間是 kernel腹躁,Linux 剛啟動時會加載 bootfs 文件系統(tǒng)桑包,之后 bootfs 會被卸載掉。

用戶空間的文件系統(tǒng)是 rootfs潜慎,包含我們熟悉的 /dev, /proc, /bin 等目錄捡多。

對于 base 鏡像來說,底層直接用 Host 的 kernel铐炫,自己只需要提供 rootfs 就行了垒手。

而對于一個精簡的 OS,rootfs 可以很小倒信,只需要包括最基本的命令科贬、工具和程序庫就可以了。相比其他 Linux 發(fā)行版鳖悠,CentOS 的 rootfs 已經(jīng)算臃腫的了榜掌,alpine 還不到 10MB。

我們平時安裝的 CentOS 除了 rootfs 還會選裝很多軟件乘综、服務(wù)憎账、圖形桌面等,需要好幾個 GB 就不足為奇了卡辰。

base 鏡像提供的是最小安裝的 Linux 發(fā)行版胞皱。

下面是 CentOS 鏡像的 Dockerfile 的內(nèi)容:

第二行 ADD 指令添加到鏡像的 tar 包就是 CentOS 7 的 rootfs。在制作鏡像時九妈,這個 tar 包會自動解壓到 / 目錄下反砌,生成 /dev, /proc, /bin 等目錄。

注:可在 Docker Hub 的鏡像描述頁面中查看 Dockerfile 萌朱。

支持運行多種 Linux OS

不同 Linux 發(fā)行版的區(qū)別主要就是 rootfs宴树。

比如 Ubuntu 14.04 使用 upstart 管理服務(wù),apt 管理軟件包晶疼;而 CentOS 7 使用 systemd 和 yum酒贬。這些都是用戶空間上的區(qū)別又憨,Linux kernel 差別不大。

所以 Docker 可以同時支持多種 Linux 鏡像锭吨,模擬出多種操作系統(tǒng)環(huán)境竟块。

上圖 Debian 和 BusyBox(一種嵌入式 Linux)上層提供各自的 rootfs,底層共用 Docker Host 的 kernel耐齐。

這里需要說明的是:

base 鏡像只是在用戶空間與發(fā)行版一致,kernel 版本與發(fā)行版是不同的蒋情。

例如 CentOS 7 使用 3.x.x 的 kernel埠况,如果 Docker Host 是 Ubuntu 16.04(比如我們的實驗環(huán)境),那么在 CentOS 容器中使用的實際是是 Host 4.x.x 的 kernel棵癣。

① Host kernel 為 4.4.0-31

② 啟動并進入 CentOS 容器

③ 驗證容器是 CentOS 7

④ 容器的 kernel 版本與 Host 一致

容器只能使用 Host 的 kernel辕翰,并且不能修改。

所有容器都共用 host 的 kernel狈谊,在容器中沒辦法對 kernel 升級喜命。如果容器對 kernel 版本有要求(比如應(yīng)用只能在某個 kernel 版本下運行),則不建議用容器河劝,這種場景虛擬機可能更合適壁榕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赎瞎,一起剝皮案震驚了整個濱河市牌里,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌务甥,老刑警劉巖牡辽,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敞临,居然都是意外死亡态辛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門挺尿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奏黑,“玉大人,你說我怎么就攤上這事票髓∨屎” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵洽沟,是天一觀的道長以故。 經(jīng)常有香客問我,道長裆操,這世上最難降的妖魔是什么怒详? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任炉媒,我火速辦了婚禮,結(jié)果婚禮上昆烁,老公的妹妹穿的比我還像新娘吊骤。我一直安慰自己,他們只是感情好静尼,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布白粉。 她就那樣靜靜地躺著,像睡著了一般鼠渺。 火紅的嫁衣襯著肌膚如雪鸭巴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天拦盹,我揣著相機與錄音鹃祖,去河邊找鬼。 笑死普舆,一個胖子當著我的面吹牛恬口,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沼侣,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祖能,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了华临?” 一聲冷哼從身側(cè)響起芯杀,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雅潭,沒想到半個月后揭厚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡扶供,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年筛圆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椿浓。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡太援,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扳碍,到底是詐尸還是另有隱情提岔,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布笋敞,位于F島的核電站碱蒙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赛惩,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一哀墓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喷兼,春花似錦篮绰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勉抓,卻和暖如春走孽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琳状。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盒齿,地道東北人念逞。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像边翁,于是被迫代替她去往敵國和親翎承。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354