鍍金池/ 問(wèn)答/Linux/ docker中,對(duì)于各個(gè)鏡像和我物理機(jī)的關(guān)系的一些疑問(wèn)

docker中,對(duì)于各個(gè)鏡像和我物理機(jī)的關(guān)系的一些疑問(wèn)

最近在學(xué)docker,我們知道,docker中有各種鏡像,比如ubuntu,centos這種操作系統(tǒng)的鏡像,還有nginx,redis這樣的應(yīng)用級(jí)鏡像。我用docker inspect 指令 查看了nginx鏡像,發(fā)現(xiàn)了這么段內(nèi)容:

    "Architecture": "amd64",
    "Os": "linux",
    "Size": 108664124,
    "VirtualSize": 108664124,
    

首先聲明一下我是mac。
那這個(gè) "Os": "linux",是我物理機(jī)的系統(tǒng)內(nèi)核嗎?
如果是,那nginx鏡像共用了我的物理機(jī)的系統(tǒng)內(nèi)核,那么問(wèn)題來(lái)了,像ubuntu,centos這種操作系統(tǒng)的鏡像,它們鏡像里面是不是包含了自己的linux內(nèi)核?還是怎么說(shuō)?

回答
編輯回答
莫小染

說(shuō)說(shuō)我淺薄的認(rèn)識(shí),請(qǐng)大神們指正。

你跑著的Nginx容器并不是使用的你宿主機(jī)(mac)的內(nèi)核,因?yàn)閐ocker所依賴的namespaces、cgroups的功能在你的宿主機(jī)上并沒(méi)有。你能在mac上跑docker容器,是因?yàn)橐粋€(gè)名叫Docker.app的程序提供了一層抽象,它介于宿主機(jī)和docker之間,提供了容器所倚賴的Linux的namespaces、cgroups等功能。

在Linux上跑著的各個(gè)docker容器是真的共享了Linux內(nèi)核,但mac上跑著的各個(gè)docker容器并不是共享了mac的內(nèi)核。換個(gè)角度,從github上把docker的源代碼克隆下來(lái)并編譯,編譯得到的二進(jìn)制程序并不能直接跑在mac上。

ubuntu這類docker鏡像中并不包含Linux內(nèi)核,反過(guò)來(lái)想,要是包含了Linux內(nèi)核這個(gè)鏡像大小肯定不止這點(diǎn)。

2017年5月27日 01:02