白話容器基礎(三) 深入理解容器映象

2022-01-22 21:34:39 字數 1730 閱讀 9483

在前兩次的分享中,我講解了 linux 容器最基礎的兩種技術:namespace 和 cgroups。希望此時,你已經徹底理解了「容器的本質是一種特殊的程序」這個最重要的概念。而正如我前面所說的,

namespace 的作用是「隔離」,它讓應用程序只能看到該 namespace 內的「世界」;

而 cgroups 的作用是「限制」,它給這個「世界」圍上了一圈看不見的牆。

這麼一折騰,程序就真的被「裝」在了乙個與世隔絕的房間裡,而這些房間就是 paas 專案賴以生存的應用「沙盒」。

在 linux 作業系統裡,有乙個名為 chroot 的命令可以幫助你在 shell 中方便地完成這個工作。

顧名思義,它的作用就是幫你「change root file system」,即改變程序的根目錄到你指定的位置。

實際上,mount namespace 正是基於對 chroot 的不斷改良才被發明出來的,它也是 linux 作業系統裡的第乙個 namespace。

當然,為了能夠讓容器的這個根目錄看起來更「真實」,我們一般會在這個容器的根目錄下掛載乙個完整作業系統的檔案系統,比如 ubuntu16.04 的 iso。這樣,在容器啟動之後,我們在容器裡通過執行 "ls /" 檢視根目錄下的內容,就是 ubuntu 16.04 的所有目錄和檔案。

而這個掛載在容器根目錄上、用來為容器程序提供隔離後執行環境的檔案系統,就是所謂的「容器映象」。

它還有乙個更為專業的名字,叫作:rootfs(根檔案系統)。所以,乙個最常見的 rootfs,或者說容器映象,會包括如下所示的一些目錄和檔案,比如 /bin,/etc,/proc 等等

對 docker 專案來說,它最核心的原理實際上就是為待建立的使用者程序:

啟用 linux namespace 配置;

設定指定的 cgroups 引數;

切換程序的根目錄(change root)。

這樣,乙個完整的容器就誕生了。

不過,docker 專案在最後一步的切換上會優先使用 pivot_root 系統呼叫,如果系統不支援,才會使用 chroot。這兩個系統呼叫雖然功能類似,但是也有細微的區別,這一部分小知識就交給你課後去探索了。

另外,需要明確的是,rootfs 只是乙個作業系統所包含的檔案、配置和目錄,並不包括作業系統核心。在 linux 作業系統中,這兩部分是分開存放的,作業系統只有在開機啟動時才會載入指定版本的核心映象。

所以說,rootfs 只包括了作業系統的「軀殼」,並沒有包括作業系統的「靈魂」。

但有了容器之後,更準確地說,有了容器映象(即 rootfs)之後,這個問題被非常優雅地解決了。

由於 rootfs 裡打包的不只是應用,而是整個作業系統的檔案和目錄,也就意味著,應用以及它執行所需要的所有依賴,都被封裝在了一起。事實上,對於大多數開發者而言,他們對應用依賴的理解,一直侷限在程式語言層面。比如 golang 的 godeps.json。

但實際上,乙個一直以來很容易被忽視的事實是,對乙個應用來說,作業系統本身才是它執行所需要的最完整的「依賴庫」

有了容器映象「打包作業系統」的能力,這個最基礎的依賴環境也終於變成了應用沙盒的一部分。

這就賦予了容器所謂的一致性:無論在本地、雲端,還是在一台任何地方的機器上,使用者只需要解壓打包好的容器映象,那麼這個應用執行所需要的完整的執行環境就被重現出來了。這種深入到作業系統級別的執行環境一致性,打通了應用在本地開發和遠端執行環境之間難以逾越的鴻溝。

java容器的深入理解 填充

容器的填充,陣列填充我前面提到了arrays,那麼容器呢,相應的也有collections的一些方法,其中也有fill 下面我們看個示例 class stringaddress public string tostring 為了看懂列印的資料,這個是父類的tostring,由類名和該物件的雜湊碼用無...

深入理解Dip Ioc Di以及Ioc容器

學習 dip 依賴倒置 一種軟體架構設計的原則 抽象概念 ioc控制反 一種反轉流 依賴和介面的方式 dip的具體實現方式 di依賴注入 ioc的一種實現方式,用來反轉依賴 ioc的具體實現方式 ioc容器 依賴注入的框架,用來對映依賴,管理物件建立和生存週期 di框架 dip 一種軟體架構設計原則...

深入理解 Docker 映象 json 檔案

很多時候,當大家談論起docker,經常會提到docker作為容器解決方案,在虛擬化資源方面存在不小優勢。輕量級虛擬化技術的優點暫且不談,從軟體生命週期來看,docker在打包軟體 分發軟體方面的能力同樣出眾。而後者很大程度上依賴於docker的映象技術。docker映象技術提供了一套標準,創造性地...