請問docker鏡像是否包含操作系統,那雲主機就是虛擬機,鏡像後,也包含操作系統,應用程序,tomcat,nginx等,那還有什麼區別?


從操作系統的定義來說,docker鏡像並不包含操作系統。

維基操作系統詞條對操作系統的定義是

An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs.

操作系統是管理計算機硬體、軟體資源,並為計算機程序提供通用服務的系統軟體。

而管理硬體、軟體資源,都是由內核實現的。docker鏡像是不含內核的,容器與宿主機共享內核。docker鏡像只包含一部分提供通用服務的用戶態(userland),如各種lib、系統應用,還有一部分服務由內核提供。


不包含,可以參考:

CSDN-專業IT技術社區-登錄?

blog.csdn.net

自己從0搞一個基礎鏡像。

從文中可以看到,tar打包一個目錄,import塞進docker,就會得到一個鏡像。

換句話說,如果tar打的這一包東西裡邊沒有系統,那麼就沒有操作系統。

可以做到的是,如果程序由靜態(鏈接)編譯得到且可以在裸內核上運行,完全可以實現用空目錄搞出個0k鏡像然後並藉此運行,所以證得docker鏡像中沒有系統(內核).

同時,(原汁原味的類UNIX平台上的)docker不是VM,與VM有本質上的差異。


現代操作系統(原書第4版)京東去購買?

先說答案不包括。

《現代操作系統》中有討論什麼是操作系統,像常見的 windows,linux 這種操作系統就是運行在內核態的軟體。所謂內核態對下擁有對硬體的完全訪問權,對上能夠為用戶提供簡單統一的操作模型。

docker 主要是通過 namespace ,cgroup,aufs等 linux 內核提供的技術來完成資源的隔離,像 docker 鏡像本身就是一系列 aufs 層的打包。鏡像的釋放就是將 aufs 層釋放,系統訪問時會優先訪問上層的文件,使得底層的文件對系統不可見,僅此而已。

每一個 docker 容器都與 linux 宿主共享一個內核,容器里的操作還要靠速主機內核完成,很明顯光有 docker 容器是不能操作硬體的。


不包含,docker和虛擬機最大的不同是docker和宿主機共享linux內核。docker鏡像只是一個操作系統所包含的文件、配置和目錄。


不包含內核,但是包含除內核以外配套的工具和庫


docker鏡像包含完整的操作系統.

它是把整個鏡像操作系統的資源調度讓通過cgroups隔離的進程來實現中轉調度完成的;

你看到很多docker鏡像小,不是因為它們不是完整的os,而是因為docker鏡像都是基於某個特定的目的精簡打包而成的,去掉了很多兼容目的的安裝包、驅動、資源文件;最有名的就是alpine,這哥們兒是從Linux from scratch的角度來定製os的.

完整的是docker,那一定有不完整的對不對?

不完整的就是Xen虛擬機,它就需要對os進行定製,這個定製不是修剪類的定製喲,是要針對xen的需求對os本身做修改,所以門檻較高,一般超大型企業才考慮這貨,在docker出現之後,這種需要各種定製的貨色就沒有那麼火了,架不住docker開箱即用亂拳打死老師傅的風潮。


docker有操作系統鏡像。你可以 docker pull centos-5.6的鏡像之類的。

而且現在流行的雲系統,就是容器雲。

大型主機好幾T內存,運行的虛擬層數至少三層以上,最終都是容器,因為容器管理工具很多,很容易集成管理。

但是非系統應用鏡像,是不包含系統內核的。有的軟體如果是用java寫的,裡面一般都有jdk環境。


了解一下cgroup和name space技術就知道了


Docker鏡像包含操作系統,可以看一下Dockerfile相關的內容,熟悉一下打包Docker鏡像的流程。文件第一行就是「From [system name]」,system name替換成你想要作為基礎鏡像的鏡像名。至於後面的應用程序,tomcat,nginx等應用程序是在該基礎上添加進去的


操作系統主要兩項工作是提供硬體的抽象和資源的管理 從這個角度看 docker 鏡像不包含 os


推薦閱讀:
相关文章