日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

一位同學(xué)曾給我打比方:宿主機(jī)就好比一間大房子,Docker把它成了N個(gè)小隔斷。在這些小隔斷之間,有獨(dú)立的衛(wèi)生間、小床、電視...

麻雀雖小,五臟俱全,這個(gè)比喻非常的貼切。linux提供了非常全面的隔離機(jī)制,使得每個(gè)小隔間互不影響。即使隔壁小間滿室春光,我的小房間一樣的冷清,對我毫無影響。

Docker能實(shí)現(xiàn)這些功能,依賴于chroot、namespace、cgroup等三種老技術(shù)。我們本篇文章,就先聊一下namespace方面的東西。畢竟隔離是容器的第一要素。

5分鐘快速了解Docker的底層原理

 

Linux的內(nèi)核,提供了多達(dá)8種類型的Namespace。在這些獨(dú)立的Namespace中,資源互不影響,隔離措施做的非常好。

1. 8種類型

我們先來看一下,Linux都支持哪些Namespace。可以通過unshare命令來觀察到這些細(xì)節(jié)。在終端執(zhí)行man unshare,將會出現(xiàn)這些Namespace的介紹。

5分鐘快速了解Docker的底層原理

 

  1. Mount(mnt) 隔離掛載點(diǎn)
  2. Process ID (pid) 隔離進(jìn)程 ID
  3. Network (net) 隔離網(wǎng)絡(luò)設(shè)備,端口號等
  4. Interprocess Communication (ipc) 隔離 System V IPC 和 POSIX message queues
  5. UTS Namespace(uts) 隔離主機(jī)名和域名
  6. User Namespace (user) 隔離用戶和用戶組

另外,Linux在4.6版本,5.6版本,分別加入了cgroups和Time兩種隔離類型,加起來就有8種。

  1. Control group (cgroup) Namespace 隔離 Cgroups 根目錄 (4.6版本加入)
  2. Time Namespace 隔離系統(tǒng)時(shí)間 (5.6版本加入)

2. 1個(gè)例子

通過unshare命令,可以快速建立一些隔離的例子,我們拿最簡單直觀的pid namespace來看一下它的效果。

眾所周知,Linux進(jìn)程號為1的,叫做systemd進(jìn)程。但在Docker中,我們通過執(zhí)行ps命令,卻只能看到非常少的進(jìn)程列表。

執(zhí)行下面的命令,進(jìn)入隔離環(huán)境,并將bash作為根進(jìn)程:

unshare --pid --fork --mount-proc /bin/bash

效果如圖所示。可以看到,我們的bash,已經(jīng)成為了1號進(jìn)程,而宿主機(jī)和其他隔離環(huán)境的進(jìn)程信息,在這里是不可見的。

5分鐘快速了解Docker的底層原理

 

先在隔離環(huán)境中,執(zhí)行sleep 1000。再開一個(gè)終端,在宿主機(jī)上執(zhí)行pstree,我們將會看到這個(gè)隔離環(huán)境的進(jìn)行信息。

5分鐘快速了解Docker的底層原理

 

接下來,在宿主機(jī)上,把sleep對應(yīng)進(jìn)程的命名空間信息,和宿主機(jī)的命名空間信息作一下對比。可以看到,它們的pid namespace,對應(yīng)的數(shù)值是不同的。

5分鐘快速了解Docker的底層原理

 

下面給出其他namespace的實(shí)驗(yàn)性命令,你可以實(shí)際操作一下。

3. 試驗(yàn)一下

unshare --mount --fork /bin/bash

創(chuàng)建mount namespace,并在每個(gè)不同的環(huán)境中,使用不同的掛載目錄。

unshare --uts --fork /bin/bash

uts可以用來隔離主機(jī)名稱,允許每個(gè)namespace擁有一個(gè)獨(dú)立的主機(jī)名,你可以通過hostname命令進(jìn)行修改。

unshare --ipc --fork /bin/bash

IPC Namespace 主要是用來隔離進(jìn)程間通信的。Linux的進(jìn)程間通信,有管道、信號、報(bào)文、共享內(nèi)存、信號量、套接口等方式。使用了IPC命名空間,意味著跨Namespace的這些通信方式將全部失效!不過,這也正是我們所希望的到的。

unshare --user -r /bin/bash

用戶命名空間,就非常好理解了。我們可以在一個(gè)Namespace中建立xjjdog賬號,也可以在另外一個(gè)Namespace中建立xjjdog賬號,而且它們是相互不影響的。

unshare --net --fork /bin/bash

net namespace,這個(gè)就非常有用了。它可以用來隔離網(wǎng)絡(luò)設(shè)備、IP 地址和端口等信息。

End

可以看到,通過各種Namespace,Linux能夠?qū)Ω鞣N資源進(jìn)行精細(xì)化的隔離。Docker本身也是一個(gè)新瓶裝舊酒的玩具。Docker的創(chuàng)新之處,在于它加入了一個(gè)中央倉庫,并封裝了很多易用的命令。

你可能會發(fā)現(xiàn),到目前為止,我們并沒有對Cpu和內(nèi)存的資源使用進(jìn)行隔離,也沒有對應(yīng)的Namespace來解決這些問題。

資源限制的功能,是使用Cgroups進(jìn)行限額配置來完成的,和Namespace沒什么關(guān)系。我們將在后面的文章,介紹Cgroups這項(xiàng)技術(shù)。

最后,附上Docker的一張生命周期圖。來源(http://docker-saigon.github.io/post/Docker-Internals/ )。有需要的同學(xué)可以加我的好友獲取。

5分鐘快速了解Docker的底層原理

 

Docker發(fā)展到現(xiàn)在,應(yīng)用工具鏈已經(jīng)非常成熟了,很多同學(xué)已經(jīng)駕輕就熟,如果你對容器技術(shù)非常感興趣,不如多看一下最底層的原理。這樣,不管是谷歌推自己的容器,還是繼續(xù)使用docker,都能快速把它掌握。

分享到:
標(biāo)簽:Docker
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定