【云原生 ? Docker】Docker核心UTS Namespace原理實踐
Docker三大支柱核心技術(shù):Namespace、Cgroups和UnionFS,這節(jié)通過一個UTS Namespace簡單實踐小案例,更加直觀理解Namespace資源隔離技術(shù)。
UTS Namespace主要是用來隔離主機名和域名的隔離,它允許每個 UTS Namespace擁有一個獨立的主機名。例如我們的主機名稱為 VM-4-14-centos,使用 UTS Namespace可以實現(xiàn)在容器內(nèi)的主機名稱為 container-docker或者其他任意自定義主機名。
(資料圖片)
UTS Namespace案例實踐
在進行UTS Namespace案例實踐之前,我們先來了解個關(guān)鍵指令:「unshare,運行一些與父級不共享某些名稱空間的程序。」
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名稱空間。另請參見--fork和--mount-proc選項。-u,-- uts 取消共享UTS名稱空間。-U,--user 取消共享用戶名稱空間。-f,-將指定程序fork為取消共享的子進程,而不是直接運行它。這在創(chuàng)建新的pid命名空間時很有用。--mount-proc [=mountpoint]在運行程序之前,將proc文件系統(tǒng)掛載到mountpoint (默認為/ proc)。這在創(chuàng)建新的pid名稱空間時很有用。這也意味著創(chuàng)建一個新的掛載名稱空間,因為/ proc掛載否則會破壞系統(tǒng)上的現(xiàn)有程序。新的proc文件系統(tǒng)顯式安裝為私有文件(由MS_PRIVATE | MS_REC)。-r,-- map-root-user 僅在當(dāng)前有效的用戶和組ID已映射到新創(chuàng)建的用戶名稱空間中的超級用戶UID和GID之后,才運行該程序。這樣即使在沒有特權(quán)的情況下運行,也可以方便地獲得管理新創(chuàng)建的名稱空間各個方面所需的功能(例如,在網(wǎng)絡(luò)名稱空間中配置接口或在安裝名稱空間中安裝文件系統(tǒng))。僅作為一項便利功能,它不支持更復(fù)雜的用例,例如映射多個范圍的UID和GID。 我們通過一個實例來驗證下 UTS Namespace的作用。
1、首先我們使用 unshare命令來創(chuàng)建一個 UTS Namespace
# unshare --uts --fork /bin/bash創(chuàng)建好 UTS Namespace后,宿主機shell下lsns列出namespace信息,會發(fā)現(xiàn)最后一條就是我們使用unshare創(chuàng)建了一個uts類型的namespace:
2、回到上步uts命名空間shell下,使用 hostname命令設(shè)置一下主機名:
[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通過上面命令的輸出,我們可以看到當(dāng)前 UTS Namespace內(nèi)的主機名已經(jīng)被修改為 container-docker。
3、回到宿主機shell下,查看一下主機的 hostname:
[root@VM-4-14-centos ~]# hostnameVM-4-14-centos可以看到主機的名稱仍然為 VM-4-14-centos,并沒有被修改,這就是使用UTS Namespace技術(shù)實現(xiàn)主機名隔離功能。
Docker原理驗證
1、使用docker run創(chuàng)建并運行一個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,通過docker exec指令進入到docker容器中,使用hostname查看Docker容器的hostname已被正確修改。?
2、查看剛創(chuàng)建的Docker容器對應(yīng)的宿主機PID信息:
[root@VM-4-14-centos ~]# docker inspect -f {{.State.Pid}} test-nginx29424或者通過lsns指令也可以查看到我們剛才創(chuàng)建的Docker容器Namespace信息:
3、在宿主機shell下使用nsenter指令可以進入到Docker容器相同的Namespace下:
[root@VM-4-14-centos ~]# nsenter -t 29424 -u -n說明:
-t:指定被進入命名空間的目標(biāo)進程的pid,即指定Docker容器在宿主機上對應(yīng)pid;-u:進入uts命令空間;-n:進入net命令空間。?「nsenter:一個可以在指定進程的命令空間下運行指定程序的命令。」有很多image內(nèi)部是沒有bash的,所以我們docker exec是無法進入容器的,此時如果還想看一下容器內(nèi)的情況,其實只需要想辦法加入到容器對應(yīng)的namespace就可以了。我們使用nsenter工具即可實現(xiàn),該工具啟動后會將自己加入到指定的namespace中,然后exec執(zhí)行我們指定的程序(通常就是bash)。這個命令大家在容器網(wǎng)絡(luò)調(diào)試下可能常用,比如在一些沒有網(wǎng)絡(luò)調(diào)試工具(
ip address,ping,telnet,ss,tcpdump)的容器內(nèi)利用宿主機上的命令進行容器內(nèi)網(wǎng)絡(luò)連通性的調(diào)試等等。?
4、使用hostname和ip addr驗證,和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)簽:
- 淮劇《小白楊》深情上演 致敬一代代援疆人的“精神豐碑”
- 寧德時代出資20億元在洛陽成立新公司 經(jīng)營范圍含電池制造等業(yè)務(wù)_即時焦點
- 小法:我尊重圖多爾但他不尊重我,溫格觀戰(zhàn)是我給他買的票_今日快看
- 農(nóng)發(fā)行湖南省分行違反金融統(tǒng)計規(guī)定被警告并罰款135.4萬元 速讀
- 黃曉明回應(yīng)為新戲增肥30斤:這是我人生中最快樂的時光 觀速訊
- 每日動態(tài)!國家統(tǒng)計局:9月份社會消費品零售總額增長3.0%
- 中國之變|這五年,數(shù)字化點亮新生活-每日觀點
- 大行評級丨里昂:上調(diào)臺積電目標(biāo)價至2000新臺幣 維持“高度確信跑贏大市”評級_每日時訊
- 熱消息:內(nèi)蒙古赤峰農(nóng)村牧區(qū)產(chǎn)權(quán)流轉(zhuǎn)服務(wù)中心完成首單交易
- 熱資訊!贛C支持湘C!宜春“老表”跨城應(yīng)援
- 丹尼-格林:姚明如不傷難以想象,文班或能成為他本該成為的人
- 房產(chǎn)投資的風(fēng)險與收益權(quán)衡?
- 鼎佳精密:10月17日獲融資買入291.41萬元_快資訊
- 財報速遞:達瑞電子2025年前三季度凈利潤2.31億元 每日動態(tài)
- 廣州湛建建材有限公司成立 注冊資本10萬人民幣|焦點快播
- 今日熱搜:時空科技擬“跨界”收購 切入半導(dǎo)體存儲賽道
- 當(dāng)前聚焦:佑駕創(chuàng)新中標(biāo)1185萬元車路云一體化城市交通融合感知項目
- 中原證券擬實施2025年半年度權(quán)益分派,共計派發(fā)現(xiàn)金紅利3714.31萬元-當(dāng)前熱議
- 每日視點!主場戰(zhàn)三鎮(zhèn)賽前,大連英博為隊史首位外援羅伯森舉辦退役儀式
- 祥生醫(yī)療前三季度營業(yè)收入3.43億元,同比下降5.27%
- 江蘇最低工資標(biāo)準(zhǔn)公布
- 首佳科技于10月17日耗資56萬港元回購70萬股-每日消息
- 靳東:延安的變化讓人刮目相看_焦點簡訊
- 當(dāng)前關(guān)注:凡人微光|這座城的精神,正年輕!
- 又見中小銀行密集調(diào)降存款利率-簡訊
- 前沿?zé)狳c:思源電氣前三季度凈利21.91億元,同比增長46.94%
- 今日快看!劉浩存談藝術(shù)的生命力
- 要聞:呂瑞浩公參會見上海市疾控局團組
- 光庭信息:2025年前三季度凈利潤4477.54萬元 同比增長308.53%_最新資訊
- 拿起手機就能免費聽講座、看展覽 “十四五”期間多彩文化點亮生活





