【云原生 ? Docker】Docker核心UTS Namespace原理實(shí)踐
Docker
三大支柱核心技術(shù):Namespace
、Cgroups
和UnionFS
,這節(jié)通過(guò)一個(gè)UTS Namespace
簡(jiǎn)單實(shí)踐小案例,更加直觀理解Namespace
資源隔離技術(shù)。
UTS Namespace
主要是用來(lái)隔離主機(jī)名和域名的隔離,它允許每個(gè) UTS Namespace
擁有一個(gè)獨(dú)立的主機(jī)名。例如我們的主機(jī)名稱為 VM-4-14-centos
,使用 UTS Namespace
可以實(shí)現(xiàn)在容器內(nèi)的主機(jī)名稱為 container-docker
或者其他任意自定義主機(jī)名。
(資料圖片)
UTS Namespace案例實(shí)踐
在進(jìn)行UTS Namespace
案例實(shí)踐之前,我們先來(lái)了解個(gè)關(guān)鍵指令:「unshare,運(yùn)行一些與父級(jí)不共享某些名稱空間的程序?!?/strong>
root@node3:~# unshare --helpUsage: unshare [options] [...]Run a program with some namespaces unshared from the parent.Options:-h,--help顯示幫助文本并退出。-i,-- ipc 取消共享IPC名稱空間。-m,-- mount 取消共享安裝名稱空間。-n,-- net 取消共享網(wǎng)絡(luò)名稱空間。-p,-- pid 取消共享pid名稱空間。另請(qǐng)參見(jiàn)--fork和--mount-proc選項(xiàng)。-u,-- uts 取消共享UTS名稱空間。-U,--user 取消共享用戶名稱空間。-f,-將指定程序fork為取消共享的子進(jìn)程,而不是直接運(yùn)行它。這在創(chuàng)建新的pid命名空間時(shí)很有用。--mount-proc [=mountpoint]在運(yùn)行程序之前,將proc文件系統(tǒng)掛載到mountpoint (默認(rèn)為/ proc)。這在創(chuàng)建新的pid名稱空間時(shí)很有用。這也意味著創(chuàng)建一個(gè)新的掛載名稱空間,因?yàn)? proc掛載否則會(huì)破壞系統(tǒng)上的現(xiàn)有程序。新的proc文件系統(tǒng)顯式安裝為私有文件(由MS_PRIVATE | MS_REC)。-r,-- map-root-user 僅在當(dāng)前有效的用戶和組ID已映射到新創(chuàng)建的用戶名稱空間中的超級(jí)用戶UID和GID之后,才運(yùn)行該程序。這樣即使在沒(méi)有特權(quán)的情況下運(yùn)行,也可以方便地獲得管理新創(chuàng)建的名稱空間各個(gè)方面所需的功能(例如,在網(wǎng)絡(luò)名稱空間中配置接口或在安裝名稱空間中安裝文件系統(tǒng))。僅作為一項(xiàng)便利功能,它不支持更復(fù)雜的用例,例如映射多個(gè)范圍的UID和GID。
我們通過(guò)一個(gè)實(shí)例來(lái)驗(yàn)證下 UTS Namespace
的作用。
1、首先我們使用 unshare
命令來(lái)創(chuàng)建一個(gè) UTS Namespace
# unshare --uts --fork /bin/bash
創(chuàng)建好 UTS Namespace
后,宿主機(jī)shell
下lsns
列出namespace
信息,會(huì)發(fā)現(xiàn)最后一條就是我們使用unshare
創(chuàng)建了一個(gè)uts
類型的namespace
:
2、回到上步uts
命名空間shell
下,使用 hostname
命令設(shè)置一下主機(jī)名:
[root@VM-4-14-centos ~]# hostnameVM-4-14-centos[root@VM-4-14-centos ~]# hostname -b container-docker[root@VM-4-14-centos ~]# hostnamecontainer-docker
通過(guò)上面命令的輸出,我們可以看到當(dāng)前 UTS Namespace
內(nèi)的主機(jī)名已經(jīng)被修改為 container-docker
。
3、回到宿主機(jī)shell
下,查看一下主機(jī)的 hostname
:
[root@VM-4-14-centos ~]# hostnameVM-4-14-centos
可以看到主機(jī)的名稱仍然為 VM-4-14-centos
,并沒(méi)有被修改,這就是使用UTS Namespace
技術(shù)實(shí)現(xiàn)主機(jī)名隔離功能。
Docker原理驗(yàn)證
1、使用docker run
創(chuàng)建并運(yùn)行一個(gè)Docker
容器:
[root@VM-4-14-centos ~]# docker run -d --name test-nginx --hostname docker-nginx nginx0fd5ec42923553ec2600c51ef4f119e4025ebf5adf13561b0e847cd816f332b7[root@VM-4-14-centos ~]# docker exec -it 0fd sh# hostnamedocker-nginx
?--hostname指定docker容器的hostname,上面指定--hostname docker-nginx,通過(guò)docker exec指令進(jìn)入到docker容器中,使用hostname查看Docker容器的hostname已被正確修改。?
2、查看剛創(chuàng)建的Docker容器對(duì)應(yīng)的宿主機(jī)PID
信息:
[root@VM-4-14-centos ~]# docker inspect -f {{.State.Pid}} test-nginx29424
或者通過(guò)lsns
指令也可以查看到我們剛才創(chuàng)建的Docker容器Namespace信息:
3、在宿主機(jī)shell
下使用nsenter
指令可以進(jìn)入到Docker容器相同的Namespace下:
[root@VM-4-14-centos ~]# nsenter -t 29424 -u -n
說(shuō)明:
-t:指定被進(jìn)入命名空間的目標(biāo)進(jìn)程的pid,即指定Docker容器在宿主機(jī)上對(duì)應(yīng)pid;-u:進(jìn)入uts命令空間;-n:進(jìn)入net命令空間。?「nsenter:一個(gè)可以在指定進(jìn)程的命令空間下運(yùn)行指定程序的命令。」有很多image內(nèi)部是沒(méi)有bash的,所以我們docker exec是無(wú)法進(jìn)入容器的,此時(shí)如果還想看一下容器內(nèi)的情況,其實(shí)只需要想辦法加入到容器對(duì)應(yīng)的namespace就可以了。我們使用nsenter工具即可實(shí)現(xiàn),該工具啟動(dòng)后會(huì)將自己加入到指定的namespace中,然后exec執(zhí)行我們指定的程序(通常就是bash)。這個(gè)命令大家在容器網(wǎng)絡(luò)調(diào)試下可能常用,比如在一些沒(méi)有網(wǎng)絡(luò)調(diào)試工具(
ip address
,ping
,telnet
,ss
,tcpdump
)的容器內(nèi)利用宿主機(jī)上的命令進(jìn)行容器內(nèi)網(wǎng)絡(luò)連通性的調(diào)試等等。?
4、使用hostname
和ip addr
驗(yàn)證,和Docker容器在相同的UTS Namespace
和Network Namespace
下:
[root@docker-nginx ~]# hostnamedocker-nginx[root@docker-nginx ~]# ip addr1: lo: 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 forever40: eth0@if41: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.7/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
標(biāo)簽:
- 【云原生 ? Docker】Docker核心UTS Namespace原理實(shí)踐
- 當(dāng)前快看:春季守護(hù)行動(dòng)|發(fā)生事故不報(bào)警 反而脫衣跳舞還攔車(chē)
- 小小羊肚菌 撐起增收“致富傘”
- 獲新華社關(guān)注,瀏覽量超100萬(wàn) 南充萬(wàn)人誦讀《三國(guó)志》火了
- 16集勵(lì)志劇全程在南充取景拍攝-世界時(shí)訊
- 全球熱點(diǎn)評(píng)!警方回應(yīng)公開(kāi)色狼姓名:行為合規(guī)
- 不光是燒烤!三四線城市中淄博樓市為何最熱?-每日關(guān)注
- 個(gè)人養(yǎng)老金制度“出爐”一周年:配套制度有望完善|當(dāng)前視訊
- 全球即時(shí)看!湖北荊門(mén)臨時(shí)管控 禁止露天燒烤 引導(dǎo)市民夜間錯(cuò)峰加油
- 劉慈欣在聯(lián)合國(guó)被“催更”:啥時(shí)候出新書(shū)? 世界視訊
- 快訊:益陽(yáng)南縣三仙湖鎮(zhèn):危橋重建辦實(shí)事為民解憂暖人心
- 益陽(yáng)桃江病死豬無(wú)害化處理與保險(xiǎn)聯(lián)動(dòng)機(jī)制有序運(yùn)轉(zhuǎn) 天天微頭條
- 環(huán)球關(guān)注:益陽(yáng)桃江組織烈士親屬赴廣西龍州祭掃烈士
- 益陽(yáng)市赫山區(qū)圖書(shū)館助力殘疾人士共享“書(shū)香”-新視野
- 每日熱點(diǎn):“音”為有你,讓我們聽(tīng)見(jiàn)獨(dú)屬雙流的城市浪漫
- 博時(shí)基金吳云:民營(yíng)企業(yè)參與公募REITs試點(diǎn)探索及展望|世界新要聞
- 王廷科任中國(guó)人保黨委書(shū)記 世界快看點(diǎn)
- 全球今日?qǐng)?bào)丨省市合力,助力衢州跨境電商高質(zhì)量發(fā)展
- 舉報(bào)人電話被泄露?湖北隨縣一起環(huán)境污染舉報(bào)引紛爭(zhēng)
- 祖?zhèn)髡厝绾未_權(quán)?繼承的房子可以買(mǎi)嗎?
- 【玩轉(zhuǎn)服務(wù)器】lnmp 多版本PHP安裝及指定PHP CLI版本 獨(dú)家焦點(diǎn)
- 基輔夜空突現(xiàn)強(qiáng)光,NASA否認(rèn)關(guān)聯(lián)其衛(wèi)星墜落|世界微資訊
- 調(diào)崗20多天后,楊文斌主動(dòng)交代了
- 空殼公司可以開(kāi)票嗎?境外向國(guó)內(nèi)匯款新規(guī)來(lái)了,速看!
- 天天滾動(dòng):外交部:針對(duì)韓方涉臺(tái)錯(cuò)誤言論,分別在北京和首爾向韓方提出嚴(yán)正交涉
- 天天消息!岸田文雄向靖國(guó)神社供奉祭品,中方:已向日方提出交涉
- 中國(guó)海軍第8艘055型驅(qū)逐艦咸陽(yáng)艦,入列!-熱推薦
- 買(mǎi)房違約被起訴有什么后果?業(yè)主違規(guī)裝修拒不整改怎么辦?
- 身份證能異地補(bǔ)辦嗎?烈士家屬歸哪個(gè)部門(mén)管?
- 鄰居上門(mén)打架怎么處理?起訴需要對(duì)方身份證復(fù)印件嗎?
- 1 獲新華社關(guān)注,瀏覽量超100萬(wàn) 南充萬(wàn)人誦讀《三國(guó)志》火了
- 2 博時(shí)基金吳云:民營(yíng)企業(yè)參與公募REITs試點(diǎn)探索及展望|世界新要聞
- 3 王廷科任中國(guó)人保黨委書(shū)記 世界快看點(diǎn)
- 4 基輔夜空突現(xiàn)強(qiáng)光,NASA否認(rèn)關(guān)聯(lián)其衛(wèi)星墜落|世界微資訊
- 5 調(diào)崗20多天后,楊文斌主動(dòng)交代了
- 6 天天滾動(dòng):外交部:針對(duì)韓方涉臺(tái)錯(cuò)誤言論,分別在北京和首爾向韓方提出嚴(yán)正交涉
- 7 天天消息!岸田文雄向靖國(guó)神社供奉祭品,中方:已向日方提出交涉
- 8 中國(guó)海軍第8艘055型驅(qū)逐艦咸陽(yáng)艦,入列!-熱推薦
- 9 社保基金2023年一季度新進(jìn)28股,增持17股
- 10 熱消息:linux下查看文件內(nèi)容工具發(fā)布啦!