10 Docker 資源隔離

技術(shù)實(shí)現(xiàn)

Docker 是使用 Linux 的 Namespace 技術(shù)實(shí)現(xiàn)各種資源隔離的撩扒。
Namespace 是 Linux 內(nèi)核的一項(xiàng)功能压彭,該功能對(duì)內(nèi)核資源進(jìn)行分區(qū)守伸,以使一組進(jìn)程看到一組資源滑肉,而另一組進(jìn)程看到另一組資源反肋。Namespace 的工作方式通過(guò)為一組資源和進(jìn)程設(shè)置相同的 Namespace 而起作用拖云,但是這些 Namespace 引用了不同的資源贷笛。資源可能存在于多個(gè) Namespace 中。這些資源可以是進(jìn)程 ID宙项、主機(jī)名乏苦、用戶 ID、文件名杉允、與網(wǎng)絡(luò)訪問(wèn)相關(guān)的名稱(chēng)和進(jìn)程間通信邑贴。


Namespace 類(lèi)型

在最新的 Linux 5.6 內(nèi)核中,提供了 8 種類(lèi)型的 Namespace叔磷,但最新版本的 Docker 只使用了其中的前 6 種類(lèi)型拢驾,如下表所示:

Namespace 名稱(chēng) 簡(jiǎn)稱(chēng) 作用 內(nèi)核版本
Mount mnt 隔離掛載點(diǎn) 2.4.19
Process ID pid 隔離進(jìn)程ID 2.6.24
Network net 隔離網(wǎng)絡(luò)設(shè)備、端口號(hào)等 2.6.29
Interprocess Communication ipc 隔離信息量改基、消息隊(duì)列和共享內(nèi)存 2.6.19
UTS uts 隔離主機(jī)名和域名 2.6.19
User user 隔離用戶和用戶組 3.8
Control group cgroup 隔離 Cgroups 根目錄 4.6
Time time 隔離系統(tǒng)時(shí)間 5.6

Namespace 各類(lèi)型作用

通過(guò)使用 unshare 命令可以實(shí)現(xiàn)創(chuàng)建并訪問(wèn)不同類(lèi)型的 Namespace繁疤,模擬 Dokcer 資源隔離的效果。以下只針對(duì) Docker 使用的前 6 種類(lèi)型來(lái)分析它們各自的作用:

##### Mount Namespace:實(shí)現(xiàn)在不同的進(jìn)程中看到不同的掛載目錄
### 通過(guò)unshare命令創(chuàng)建一個(gè)bash進(jìn)程秕狰,作為窗口1
$ unshare --mount --fork /bin/bash
[root@centos7 ~]# mkdir /tmp/tmpfs
[root@centos7 ~]# mount -t tmpfs -o size=20m tmpfs /tmp/tmpfs
[root@centos7 ~]# df -h /tmp/tmpfs
Filesystem      Size  Used Avail Use% Mounted on
tmpfs            20M     0   20M   0% /tmp/tmpfs

### 打開(kāi)一個(gè)新的命令行窗口稠腊,作為窗口2驗(yàn)證
[root@centos7 ~]# df -h /tmp/tmpfs
df: /tmp/tmpfs: No such file or directory

--------------------------------------------------------------------------------------------------
##### PID Namespace:實(shí)現(xiàn)每個(gè)容器的主進(jìn)程為1號(hào)進(jìn)程,而容器內(nèi)的進(jìn)程在主機(jī)上卻擁有不同的PID
### 在當(dāng)前命令行窗口加入了新創(chuàng)建的 PID Namespace鸣哀,從而看不到主機(jī)上其他進(jìn)程信息
$ unshare --pid --fork --mount-proc /bin/bash
[root@centos7 ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 115544  2004 pts/0    S    10:57   0:00 bash
root        10  0.0  0.0 155444  1764 pts/0    R+   10:59   0:00 ps aux

--------------------------------------------------------------------------------------------------
##### UTS Namespace:實(shí)現(xiàn)在容器內(nèi)的主機(jī)名稱(chēng)為任意自定義的主機(jī)名
### 在當(dāng)前命令行窗口加入了新創(chuàng)建的 UTS Namespace架忌,作為窗口1
$ unshare --uts --fork /bin/bash
[root@centos7 ~]# hostname -b utsdocker && hostname
utsdocker

### 打開(kāi)一個(gè)新的命令行窗口,作為窗口2驗(yàn)證
[root@centos7 ~]# hostname
centos7

--------------------------------------------------------------------------------------------------
##### IPC Namespace:實(shí)現(xiàn)在容器內(nèi)的不同空間下的進(jìn)程間不能通信
### 在當(dāng)前命令行窗口加入了新創(chuàng)建的 IPC Namespace我衬,作為窗口1
$ unshare --ipc --fork /bin/bash

## 創(chuàng)建系統(tǒng)間通信隊(duì)列
[root@centos7 centos]# ipcmk -Q
Message queue id: 0

## 查看系統(tǒng)間通信隊(duì)列列表
[root@centos7 ~]# ipcs -q
------ Message Queues --------
key          msqid      owner      perms      used-bytes   messages
0x73682a32   0          root       644        0            0

### 打開(kāi)一個(gè)新的命令行窗口叹放,作為窗口2驗(yàn)證
[root@centos7 ~]# ipcs -q
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

--------------------------------------------------------------------------------------------------
##### User Namespace:實(shí)現(xiàn)進(jìn)程在容器內(nèi)擁有root權(quán)限,而在主機(jī)上卻只是普通用戶
### unshare命令報(bào)錯(cuò)無(wú)效參數(shù)挠羔,需要修改系統(tǒng)允許創(chuàng)建 User Namespace 的數(shù)量
$ echo 65535 > /proc/sys/user/max_user_namespace

### 在當(dāng)前命令行窗口加入了新創(chuàng)建的 User Namespace
$ unshare --user -r /bin/bash
[root@centos7 ~]# id
uid=0(root) gid=0(root) groups=0(root),65534(nfsnobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

### 雖然已是root用戶井仰,但執(zhí)行重啟失敗,說(shuō)明并不能獲取到主機(jī)的root權(quán)限
[root@centos7 ~]# reboot
Failed to open /dev/initctl: Permission denied
Failed to talk to init daemon.

--------------------------------------------------------------------------------------------------
##### Net Namespace:實(shí)現(xiàn)每個(gè)進(jìn)程擁有自己獨(dú)立的IP地址破加、端口和網(wǎng)卡信息
### 在當(dāng)前命令行窗口加入了新創(chuàng)建的 Net Namespace俱恶,作為窗口1
$ unshare --net --fork /bin/bash
[root@centos7 ~]# ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

### 打開(kāi)一個(gè)新的命令行窗口,作為窗口2驗(yàn)證
[root@centos7 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 02:11:b0:14:01:0c brd ff:ff:ff:ff:ff:ff
    inet 172.25.168.11/24 brd 172.25.168.255 scope global dynamic eth0
       valid_lft 86063337sec preferred_lft 86063337sec
    inet6 fe80::11:b0ff:fe14:10c/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 02:42:82:8d:a0:df brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:82ff:fe8d:a0df/64 scope link
       valid_lft forever preferred_lft forever
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市合是,隨后出現(xiàn)的幾起案子了罪,更是在濱河造成了極大的恐慌,老刑警劉巖端仰,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捶惜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荔烧,警方通過(guò)查閱死者的電腦和手機(jī)吱七,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)鹤竭,“玉大人踊餐,你說(shuō)我怎么就攤上這事⊥沃桑” “怎么了吝岭?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)吧寺。 經(jīng)常有香客問(wèn)我窜管,道長(zhǎng),這世上最難降的妖魔是什么稚机? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任幕帆,我火速辦了婚禮,結(jié)果婚禮上赖条,老公的妹妹穿的比我還像新娘失乾。我一直安慰自己,他們只是感情好纬乍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布碱茁。 她就那樣靜靜地躺著,像睡著了一般仿贬。 火紅的嫁衣襯著肌膚如雪纽竣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天茧泪,我揣著相機(jī)與錄音蜓氨,去河邊找鬼。 笑死调炬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舱馅。 我是一名探鬼主播缰泡,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了棘钞?” 一聲冷哼從身側(cè)響起缠借,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宜猜,沒(méi)想到半個(gè)月后泼返,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姨拥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年绅喉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叫乌。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柴罐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憨奸,到底是詐尸還是另有隱情革屠,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布排宰,位于F島的核電站似芝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏板甘。R本人自食惡果不足惜党瓮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望虾啦。 院中可真熱鬧麻诀,春花似錦、人聲如沸傲醉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)硬毕。三九已至呻引,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吐咳,已是汗流浹背逻悠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留韭脊,地道東北人童谒。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沪羔,于是被迫代替她去往敵國(guó)和親饥伊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 容器化和Docker相關(guān)的問(wèn)題 選擇題 Docker命令的參數(shù)中,哪個(gè)是指定容器環(huán)境變量的參數(shù)琅豆?A:-t*B:-e...
    煉獄騰蛇Eric閱讀 2,691評(píng)論 0 3
  • Linux容器中用來(lái)實(shí)現(xiàn)“隔離”的技術(shù)手段:Namespace愉豺。Namespace實(shí)際上修改了應(yīng)用進(jìn)程看待整個(gè)計(jì)算...
    JavaEdge閱讀 1,266評(píng)論 0 1
  • 如果我們想像 Docker 一樣實(shí)現(xiàn)一個(gè)簡(jiǎn)陋的資源隔離的容器,我們需要隔離文件系統(tǒng)茫因、需要隔離網(wǎng)絡(luò)蚪拦、需要隔離主機(jī)名、...
    zpei0411閱讀 735評(píng)論 0 0
  • 本章內(nèi)容 ◆ Docker簡(jiǎn)介◆ Docker 鏡像與制作◆ Docker 數(shù)據(jù)管理◆ Docker 網(wǎng)絡(luò)◆ Do...
    Liang_JC閱讀 777評(píng)論 0 0
  • 漸變的面目拼圖要我怎么拼饱苟? 我是疲乏了還是投降了? 不是不允許自己墜落狼渊, 我沒(méi)有滴水不進(jìn)的保護(hù)膜箱熬。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,246評(píng)論 0 13