• <s id="aiiqm"></s>
  • 
    
    • <sup id="aiiqm"></sup>
    • <sup id="aiiqm"></sup>
       

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

      發(fā)布時(shí)間:2023-04-21 16:06:51  |  來源:騰訊云  

      【云原生 ? Docker】Docker核心UTS Namespace原理實(shí)踐

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


      【資料圖】

      UTS Namespace主要是用來隔離主機(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í)踐之前,我們先來了解個(gè)關(guān)鍵指令:「unshare,運(yùn)行一些與父級(jí)不共享某些名稱空間的程序。」

      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選項(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)行該程序。這樣即使在沒有特權(quán)的情況下運(yùn)行,也可以方便地獲得管理新創(chuàng)建的名稱空間各個(gè)方面所需的功能(例如,在網(wǎng)絡(luò)名稱空間中配置接口或在安裝名稱空間中安裝文件系統(tǒng))。僅作為一項(xiàng)便利功能,它不支持更復(fù)雜的用例,例如映射多個(gè)范圍的UID和GID。

      我們通過一個(gè)實(shí)例來驗(yàn)證下 UTS Namespace的作用。

      1、首先我們使用 unshare命令來創(chuàng)建一個(gè) UTS Namespace

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

      創(chuàng)建好 UTS Namespace后,宿主機(jī)shelllsns列出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

      通過上面命令的輸出,我們可以看到當(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,并沒有被修改,這就是使用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,通過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

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

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

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

      說明:

      -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)部是沒有bash的,所以我們docker exec是無法進(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)試下可能常用,比如在一些沒有網(wǎng)絡(luò)調(diào)試工具(ip addresspingtelnetsstcpdump)的容器內(nèi)利用宿主機(jī)上的命令進(jìn)行容器內(nèi)網(wǎng)絡(luò)連通性的調(diào)試等等。?

      4、使用hostnameip addr驗(yàn)證,和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

      關(guān)鍵詞:

       

      關(guān)于我們 - 聯(lián)系我們 - 版權(quán)聲明 - 招聘信息 - 友鏈交換

      2014-2020  電腦商網(wǎng) 版權(quán)所有. All Rights Reserved.

      備案號(hào):京ICP備2022022245號(hào)-1 未經(jīng)過本站允許,請勿將本站內(nèi)容傳播或復(fù)制.

      聯(lián)系我們:435 226 40@qq.com

      国内精品一区视频在线播放,嫩草影视在线观看,天天久久狠狠伊人第一麻豆,波多野结衣视频免费看
    • <s id="aiiqm"></s>
    • 
      
      • <sup id="aiiqm"></sup>
      • <sup id="aiiqm"></sup>
        主站蜘蛛池模板: 亚洲精品视频观看| 暖暖免费高清日本一区二区三区| 日本毛茸茸的丰满熟妇| 国产传媒在线观看| 亚洲国产精品成人久久久| 99国产精品久久久久久久成人热| 精品人妻久久久久久888| 天天躁日日躁狠狠躁av中文| 免费a级毛视频| 538在线观看| 月夜影视在线观看免费完整| 国产精品成人va在线播放| 亚洲欧洲日韩在线电影| 80s国产成年女人毛片| 欧美激情综合色综合啪啪五月| 在线观看亚洲免费| 亚洲黄网在线观看| 香蕉伊思人在线精品| 日本免费a级毛一片| 国产一区二区在线|播放| 中文字幕精品一区二区| 美女被免网站在线视频| 性久久久久久久| 亚洲男女一区二区三区| 欧美丝袜高跟鞋一区二区| 手机亚洲第一页| 免费看国产一级片| A级毛片内射免费视频| 污污的小说片段| 国产成人亚洲综合网站不卡| 两夫妇交换的一天| 欧美日韩国产综合视频一区二区三区| 国产精成人品日日拍夜夜免费| 亚洲成人福利在线| 欧美视频亚洲色图| 性色AV一区二区三区夜夜嗨| 亚洲欧美一区二区三区在线| 被滋润的艳妇疯狂呻吟白洁老七| 奇米影视久久777中文字幕| 亚洲AV综合色区无码二区爱AV| 黄色软件下载链接|