docker容器通過什么隔離

docker容器通過linux內(nèi)核技術(shù)Namespace來實(shí)現(xiàn)隔離;“Linux Namespaces”機(jī)制提供了一種資源隔離方案,每個(gè)namespace下的資源對(duì)于其他namespace下的資源都是透明,不可見的,因此在操作系統(tǒng)層面看就會(huì)出現(xiàn)多個(gè)相同pid的進(jìn)程。

docker容器通過什么隔離

本教程操作環(huán)境:linux7.3系統(tǒng)、docker19.03版、Dell G3電腦。

docker容器通過什么隔離

Docker主要就是借助 Linux 內(nèi)核技術(shù)Namespace來做到隔離的,Linux Namespaces機(jī)制提供一種資源隔離方案。

PID,IPC,Network等系統(tǒng)資源不再是全局性的,而是屬于某個(gè)特定的Namespace。每個(gè)namespace下的資源對(duì)于其他namespace下的資源都是透明,不可見的。因此在操作系統(tǒng)層面上看,就會(huì)出現(xiàn)多個(gè)相同pid的進(jìn)程。系統(tǒng)中可以同時(shí)存在兩個(gè)進(jìn)程號(hào)為0,1,2的進(jìn)程,由于屬于不同的namespace,所以它們之間并不沖突。而在用戶層面上只能看到屬于用戶自己namespace下的資源,例如使用ps命令只能列出自己namespace下的進(jìn)程。這樣每個(gè)namespace看上去就像一個(gè)單獨(dú)的Linux系統(tǒng)。

docker容器通過什么隔離

示例如下:進(jìn)程隔離

啟動(dòng)一個(gè)容器

docker?run?-it?-p?8080:8080?--name?pai-sn?pai-sn:snapshot?/bin/bash

-it 交互啟動(dòng),-p端口映射 ,–name 容器名稱 后面是鏡像名稱,打開shell,啟動(dòng)之后就進(jìn)入到了容器

查看進(jìn)程

ps?-ef

docker容器通過什么隔離

使用top命令查看進(jìn)程資源

docker容器通過什么隔離

在宿主機(jī)查看下當(dāng)前執(zhí)行容器的進(jìn)程ps -ef|grep pai-sn

docker容器通過什么隔離

由此,我們可以知道docker run命令啟動(dòng)的只是一個(gè)進(jìn)程,它的pid是4677。而對(duì)于容器程序本身來說,它被隔離了,在容器內(nèi)部都只能看到自己內(nèi)部的進(jìn)程。Docker是借助了Linux內(nèi)核的Namespace技術(shù)來實(shí)現(xiàn)的。

文件隔離

容器內(nèi)部根目錄執(zhí)行l(wèi)s命令

docker容器通過什么隔離

容器內(nèi)部已經(jīng)包含了這些文件夾了

宿主機(jī)執(zhí)行docker info 來看看我們的 Docker 用到的文件系統(tǒng)是什么

docker容器通過什么隔離

Docker版本是20.10.6,存儲(chǔ)驅(qū)動(dòng)是overlay2,不同的存儲(chǔ)驅(qū)動(dòng)在 Docker 中表現(xiàn)不一樣,但是原理類似。

Docker文件系統(tǒng)是通過mount去掛載的,執(zhí)行docker ps命令器實(shí)例id

docker容器通過什么隔離

執(zhí)行docker inspect container_id | grep Mounts -A 20找到掛載在宿主機(jī)的目錄,查看目錄列表

docker容器通過什么隔離

發(fā)現(xiàn)這個(gè)和我們?nèi)萜鞯哪夸浭且恢碌模覀冊(cè)谶@個(gè)目錄下創(chuàng)建一個(gè)新的目錄,然后看看容器內(nèi)部是不是會(huì)出現(xiàn)新的目錄。其實(shí)文件的隔離,資源的隔離都是在新的命名空間下通過mount掛載的方式來隔離的。

推薦學(xué)習(xí):《docker視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享