【云原生 • Docker】Docker核心UTS Namespace原理实践_独家

2023-04-21 02:07:00   来源:腾讯云

【云原生 • 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

关键词:

精彩阅读

【云原生 • Docker】Docker核心UTS Namespace原理实践_独家

产业

Docker三大支柱核心技术:Namespace、Cgroups和UnionFS,这节通过一个UTSNamespace简单实践小案例,更加直观理解Namesp

探探遭大量投诉:被指退款难、乱扣费

产业

此外,在小红书上也有网友对探探自动扣费问题提出质疑,发帖询问如何才能退费成功。解读新商业的财经新媒体

佛山盈香生态园附近景点推荐

产业

盈香生态园周边景点介绍:一、榴村陆家古村陆家古村落位于佛山市高明区荷城街道照明居委榴村,始建于明代,

天天头条:黄浦区教育学院:统编教材习作单元的教学认知和实践策略——黄浦区小学语文“习作单元”教学研讨活动

产业

4月13日下午,一场以“遵循课标精神,用好统编教材”为主题的小学五年级语文教研活动在黄浦区巨鹿路第一小

风冷和直冷冰箱的区别?

产业

一、风冷与直冷的分界点在300升左右,大容积多间室风冷有优势。二、容积大,间室多,风冷在冷量分配上有绝

天天快消息!黄陂幼升小入学要求户口或者居住证吗?

产业

黄陂幼升小入学要求户口或者居住证吗?要求。具体要求如下:(1)学生本人具有黄陂区户籍。(2)学生本人非

RBC:利润率短期难改善 下调Rivian(RIVN.US)评级至“与大盘持平”-当前时讯

产业

智通财经APP获悉加拿大皇家银行RBC发布研报将RivianRIVNUS的评级从跑赢大盘下调至与大盘持平并将目标价从28

密室小神探官网在哪下载 最新官方下载安装地址

产业

密室小神探怎么下载?想要比别人更加抢先抢快的玩到这款游戏,那么你获取游戏开测消息是关键,能够获取到第

甘肃民乐: 戈壁滩上崛起"光伏城"

产业

暮春时节,位于甘肃省张掖市民乐县工业园区的三墩滩10万千瓦光伏建设项目现场,一排排光伏太阳能发电板排列整

车内物品被抢车主为何不报案?警方抽丝剥茧侦破盗采锡矿案

产业

车内物品被抢劫,事后车主却不主动报警,反而是路过的人给报了警,这是怎么回事呢?事情发生在云南省个旧市

财富

天天要闻:融资丨「科道芯国」完成超亿元C轮融资,建银国际领投

资讯

融资丨「科道芯国」完成超亿元C轮融资,建银国际领投,致力于高集成安全移动支付芯片设计

融资丨「众调科技」宣布连续获两轮近亿元战略融资

资讯

融资丨「众调科技」宣布连续获两轮近亿元战略融资,融资主要用于优化数智中台产品线

300元陪玩一天,年轻人卷向“大学生特种兵”

资讯

300元陪玩一天,年轻人卷向“大学生特种兵”,这届大学生,正在用一种类似“特种兵拉练”的方式旅游。

当前时讯:巴菲特看多日本最重要的理由

资讯

巴菲特看多日本最重要的理由,日本可能是最后一个还有廉价资金的地方。

当前热点-特斯拉:画饼大年、落地小年,“长情陪伴”太难了

资讯

特斯拉:画饼大年、落地小年,“长情陪伴”太难了,厮杀到来:特斯拉的毛利率不如比亚迪?

融资丨「汤恩智能」获数千万元A轮融资,嘉御资本、高和资本联合投资

资讯

融资丨「汤恩智能」获数千万元A轮融资,嘉御资本、高和资本联合投资,商用清洁机器人公司SPARKOZ汤恩智能获得数千万元A轮融资

环球快消息!融资丨「芯算一体」完成千万级天使轮融资

资讯

融资丨「芯算一体」完成千万级天使轮融资,资金将主要用于技术深度研发

环球今日讯!融资丨「齐禾生科」完成超亿元Pre-A轮融资,辰德资本领投

资讯

融资丨「齐禾生科」完成超亿元Pre-A轮融资,辰德资本领投,拥有基于CRISPR-Cas系统的系列基因编辑核心技术

【报资讯】融资丨「恺望数据」完成新一轮战略融资

资讯

融资丨「恺望数据」完成新一轮战略融资,数据标注解决方案公司恺望数据近日已完成新一轮战略融资

快播:融资丨「中太技术」完成近亿元A轮融资

资讯

融资丨「中太技术」完成近亿元A轮融资,中太技术加速技术向产品转化以及推进商业化应用

“生成式AI”在军事领域中的应用:虚拟“参谋官”

“兵无常势,水无常形。”积极探索人工智能技术对于军事领域的作用,才能用科技武装军事,为打赢未来之战增砖添瓦。

信息:都在卷大模型底座,云计算一哥决定给底座造底座

就在人人争相发大模型“秀肌肉”时,也有人不按套路出牌。

AIGC潮水中,重新理解低代码

打响「AIGC+低代码」第一枪。

比特小鹿上市 竞争力如何?与 Marathon 和 Riot 两大矿业巨头数据对比

三家公司按总算力排序依次为Riot、Bitdeer和Marathon。

天天观点:上线在即 一文了解“MOVE 双子星” Sui 的主要生态项目

在“明星公链”Aptos发行Token半年之后,被社区称为“MOVE双子星之一”的Sui也即将迈入主网阶段。

苹果举行主题为超前瞻秋季新品发布会 AirPodsPro2正式登场

北京时间9月8日凌晨,苹果举行主题为超前瞻的秋季新品发布会,在此次发布会上,备受关注的iPhone 14系列新机、新款Apple Watch Ultra以

微软正为Windows12开发新驱动框架 提升新老显卡性能

Windows 12系统可能会在2024年到来,按照正常的节奏,其开发工作应该早已秘密进行。日前,有开发者从Windows 11最新预览版Build 25188中

华盛顿地铁站首次亮相为视障人士扩展旅行路线

5月25日消息,一款旨在帮助视障人士或盲人行人使用公共交通工具的应用程序在华盛顿地铁站首次亮相。该应用程序名为Waymap,旨在为盲人和视

2022年情况又要变了!华硕高管:今年PC恐怕要供过于求

这两年来,由于疫情导致的居家办公及远程教育需求爆发,一直在下跌的PC市场枯木逢春,2021年更是创下了2012年以来的最快增长,然而2022年情

垃圾佬的心头好!西数新款固态盘SN740曝光

对于DIY垃圾佬来说,散片、拆机件、工包……这些名词怕是并不陌生。本周,西数推出了主要供应OEM厂商的新款固态盘SN740。SN740升级到了第五

虚假宣传、误导消费者 倍至冲牙器关联公司被处罚

后来者要想在激烈的市场竞争中立足,如果可以背靠巨头享受大树底下好乘凉的红利,那自然是皆大欢喜,没有这个福气,也大可凭借自己一步一个