【云原生 ? Docker】Docker核心UTS Namespace原理實踐 速訊

            發布時間:2023-04-21 16:06:51  |  來源:騰訊云  

            【云原生 ? Docker】Docker核心UTS Namespace原理實踐

            Docker三大支柱核心技術:NamespaceCgroupsUnionFS,這節通過一個UTS Namespace簡單實踐小案例,更加直觀理解Namespace資源隔離技術。


            【資料圖】

            UTS Namespace主要是用來隔離主機名和域名的隔離,它允許每個 UTS Namespace擁有一個獨立的主機名。例如我們的主機名稱為 VM-4-14-centos,使用 UTS Namespace可以實現在容器內的主機名稱為 container-docker或者其他任意自定義主機名。

            UTS Namespace案例實踐

            在進行UTS Namespace案例實踐之前,我們先來了解個關鍵指令:「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 取消共享網絡名稱空間。-p,-- pid 取消共享pid名稱空間。另請參見--fork和--mount-proc選項。-u,-- uts 取消共享UTS名稱空間。-U,--user 取消共享用戶名稱空間。-f,-將指定程序fork為取消共享的子進程,而不是直接運行它。這在創建新的pid命名空間時很有用。--mount-proc [=mountpoint]在運行程序之前,將proc文件系統掛載到mountpoint (默認為/ proc)。這在創建新的pid名稱空間時很有用。這也意味著創建一個新的掛載名稱空間,因為/ proc掛載否則會破壞系統上的現有程序。新的proc文件系統顯式安裝為私有文件(由MS_PRIVATE | MS_REC)。-r,-- map-root-user 僅在當前有效的用戶和組ID已映射到新創建的用戶名稱空間中的超級用戶UID和GID之后,才運行該程序。這樣即使在沒有特權的情況下運行,也可以方便地獲得管理新創建的名稱空間各個方面所需的功能(例如,在網絡名稱空間中配置接口或在安裝名稱空間中安裝文件系統)。僅作為一項便利功能,它不支持更復雜的用例,例如映射多個范圍的UID和GID。

            我們通過一個實例來驗證下 UTS Namespace的作用。

            1、首先我們使用 unshare命令來創建一個 UTS Namespace

            # unshare --uts --fork /bin/bash

            創建好 UTS Namespace后,宿主機shelllsns列出namespace信息,會發現最后一條就是我們使用unshare創建了一個uts類型的namespace

            2、回到上步uts命名空間shell下,使用 hostname命令設置一下主機名:

            [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

            通過上面命令的輸出,我們可以看到當前 UTS Namespace內的主機名已經被修改為 container-docker

            3、回到宿主機shell下,查看一下主機的 hostname

            [root@VM-4-14-centos ~]# hostnameVM-4-14-centos

            可以看到主機的名稱仍然為 VM-4-14-centos,并沒有被修改,這就是使用UTS Namespace技術實現主機名隔離功能。

            Docker原理驗證

            1、使用docker run創建并運行一個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、查看剛創建的Docker容器對應的宿主機PID信息:

            [root@VM-4-14-centos ~]# docker inspect -f {{.State.Pid}} test-nginx29424

            或者通過lsns指令也可以查看到我們剛才創建的Docker容器Namespace信息:

            3、在宿主機shell下使用nsenter指令可以進入到Docker容器相同的Namespace下:

            [root@VM-4-14-centos ~]# nsenter -t 29424 -u -n

            說明:

            -t:指定被進入命名空間的目標進程的pid,即指定Docker容器在宿主機上對應pid;-u:進入uts命令空間;-n:進入net命令空間。

            ?「nsenter:一個可以在指定進程的命令空間下運行指定程序的命令。」有很多image內部是沒有bash的,所以我們docker exec是無法進入容器的,此時如果還想看一下容器內的情況,其實只需要想辦法加入到容器對應的namespace就可以了。我們使用nsenter工具即可實現,該工具啟動后會將自己加入到指定的namespace中,然后exec執行我們指定的程序(通常就是bash)。這個命令大家在容器網絡調試下可能常用,比如在一些沒有網絡調試工具(ip addresspingtelnetsstcpdump)的容器內利用宿主機上的命令進行容器內網絡連通性的調試等等。?

            4、使用hostnameip addr驗證,和Docker容器在相同的UTS NamespaceNetwork 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

            關鍵詞:

             

            關于我們 - 聯系我們 - 版權聲明 - 招聘信息 - 友鏈交換

            2014-2020  電腦商網 版權所有. All Rights Reserved.

            備案號:京ICP備2022022245號-1 未經過本站允許,請勿將本站內容傳播或復制.

            聯系我們:435 226 40@qq.com

            国产亚洲精品成人AA片新蒲金 | 亚洲国产精品自在拍在线播放| 国产a v无码专区亚洲av| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲性天天干天天摸| 亚洲中久无码永久在线观看同| 亚洲AV成人片无码网站| 亚洲精华国产精华精华液网站| 亚洲1234区乱码| 亚洲精品免费在线| 亚洲精品免费在线| 亚洲日本国产乱码va在线观看| 亚洲综合国产精品| 日韩亚洲AV无码一区二区不卡| 亚洲日本一区二区| 久久狠狠高潮亚洲精品| 亚洲黑人嫩小videos| 亚洲神级电影国语版| 亚洲明星合成图综合区在线| 亚洲国产精品专区| 亚洲一区二区免费视频| 亚洲av无码国产综合专区| ass亚洲**毛茸茸pics| 在线观看亚洲AV每日更新无码| 在线观看亚洲AV每日更新无码| 亚洲变态另类一区二区三区 | 亚洲精品高清无码视频| 亚洲成AV人片在线观看无| 亚洲国产成人精品不卡青青草原| 亚洲人成电影在线天堂| 亚洲韩国在线一卡二卡| 亚洲卡一卡2卡三卡4麻豆| 久久久久久亚洲精品影院| 亚洲成av人在线观看网站| 国产成人+综合亚洲+天堂| jlzzjlzz亚洲乱熟在线播放| 亚洲精品成人片在线播放 | 亚洲熟妇AV日韩熟妇在线| WWW国产亚洲精品久久麻豆| 亚洲情a成黄在线观看| 国产亚洲精品自在久久|