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

2023-04-21 15:53:50 来源:腾讯云 分享到:

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

来源:腾讯云 2023-04-21 15:53:50

IDC周震刚:数智化平台建设六大策略

来源:中国网财经 2023-04-21 15:10:53

哪个关键词与你紧密相关?从一季度经济数据看生活消费

来源:央视新闻客户端 2023-04-21 15:13:21

赖文靓:新老赛道冰火两重天 注意操作节奏 切忌追高|就市论市 新视野

来源:第一财经资讯 2023-04-21 14:54:48

【速看料】全市招商引资和开放合作工作会议召开

来源:通化发布官方号 2023-04-21 14:41:09

【世界时快讯】央视直播21日澳门冠军赛,钱天一内战王曼昱,马龙对阵雨果

来源:乒乓球球 2023-04-21 14:33:14

【世界说】美媒:美国清洁空气获取也有“种族”之分 创纪录6400万人处于污染峰值区

来源:中国日报网 2023-04-21 13:36:45

民营船厂造船忙

来源:舟山日报-舟山网 2023-04-21 13:26:19

全球时讯:教育部:毕业生求职需警惕陷阱 焦点信息

来源:城市头条网 2023-04-21 13:36:02

全球微速讯:唐人神:截至4月20日,公司股东数为60,637

来源:证券之星 2023-04-21 13:17:31

振奋的数据折射发展信心 全球观速讯

来源:燕鸣 2023-04-21 12:49:36

丘成桐为18所中学授牌“丘成桐少年班”,雅礼中学位列其中

来源:潇湘晨报 2023-04-21 12:10:47

建设银行兔年金条价格今天多少一克(2023年04月21日)

来源:金投网 2023-04-21 12:07:25

何氏眼科:4月20日融资买入93.89万元,融资融券余额6070.84万元

来源:证券之星 2023-04-21 11:30:32

工行融e借逾期25天还不上会怎样

来源:法师兄 2023-04-21 10:57:41

爆米花不设小份被警告 浙江杭州查办多起反食品浪费案件

来源:中国消费者报 2023-04-21 10:32:20

速读:格力博跌2.99%创新低 2个月前上市即巅峰募37.5亿

来源:中国经济网 2023-04-21 10:29:36

混合二元酸商品报价动态(2023-04-20)

来源:生意社 2023-04-21 10:01:28

东芯股份:4月20日融资买入1.13亿元,融资融券余额5.22亿元 环球关注

来源:证券之星 2023-04-21 09:43:13

国家队队友冲突!基米希动作惹怒京多安,两人发生争执纷纷染黄

来源:直播吧 2023-04-21 09:30:52

世界快讯:乐歌股份:本次计提资产减值准备将减少公司2022年度合并报表利润总额人民币1684.14万元

来源:每日经济新闻 2023-04-21 09:24:27

全球滚动:品春茶,学文化,“浙”里的国际中文日这么过

来源:钱江晚报 2023-04-21 08:40:45

什么是集散控制系统 它有什么主要优点-全球实时

来源:互联网 2023-04-21 08:06:56

【世界聚看点】三镇vs国安首发:韦世豪、于大宝先发,李可时隔710天重回名单

来源:直播吧 2023-04-21 07:57:40

环球实时:市场监管总局公布2023 “铁拳”行动第一批典型案例

来源:环球网 2023-04-21 07:37:23

百视通亮相2023 CCBN,数汇新业态 焕发新生机|当前看点

来源:金融界 2023-04-21 07:14:01

重点聚焦!vivo X Fold2外观正式揭晓:双材质拼接设计独特

来源:快科技 2023-04-21 06:55:35

生物进化树_全球讯息

来源:元宇宙网 2023-04-21 06:41:32

环球微速讯:推荐一款轻量级全栈式开源测试平台!

来源:程序员客栈 2023-04-21 06:28:52

观点:淄博一医院在门口摆烧烤摊具体是什么情况

来源:互联网 2023-04-21 05:37:13

Copyright   2015-2022 华中知识产权网 版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com