最新要闻
- 政治权利名词解释电大 政治权利名词解释 最新资讯
- 微软确认月初遭DDoS网络攻击:一度导致Microsoft 365服务中断
- 终末的女武神同人 毗沙门天VS宇智波斑-资讯
- 249元 雷柏推出VT9S无线鼠标:原相3395引擎、26000 DPI|全球微头条
- 大四男生实习薪资1万4妈妈仰天大笑 姐姐回应:要在船上写论文 全球聚焦
- 一箭41星创中国纪录!当天传回超清大图:英格兰一览无余 环球观察
- 全球热讯:拜耳医药保健有限公司属于哪个国家_拜耳公司是哪个国家
- 天天快消息!苹果M2 Ultra首次开盖:Intel 56核心相形见绌
- “迈克·马龙,你为什么不买詹姆斯的账?”
- 东土科技:定增募资不超8.75亿元申请获证监会注册批复 环球热文
- 当前滚动:最便宜折叠手机!moto razr 40开售:3999元起
- 官方通报“特校校长刘某某强制猥亵残障学生案”
- 马斯克:针对智能电视的推特视频应用即将问世 世界快消息
- 速递!国内首款市域C型动车组亮相:时速达160公里
- 最新民调:超半数非裔美国人预计美国种族主义会变得更糟 环球报道
- 500元到5000元 各价位最值得买的10款CPU集合
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
k8s 深入篇———— 一些容器操作的原理[三]|报资讯
前言
简单介绍一下一些容器的操作原理。
正文
docker exec 是怎么做到进入容器里的呢。
(相关资料图)
比如说:
这里有一个容器,我们可以exec 进去:
docker exec -it b265 /bin/sh
我们为什么能看到和容器内部一样的场景呢?
首先我们知道了为什么容器进程只能看到规定的namespace了,那么如果我们能拿到这个namespace的信息,那么我们就能看到容器进程一样的场景了。
docker inspect --format "{{ .State.Pid }}" b26585ee826b
上面可以查看容器进程。
可以查看namespace信息。
#define _GNU_SOURCE#include #include #include #include #include #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE);} while (0)int main(int argc, char *argv[]) {int fd;fd = open(argv[1], O_RDONLY);if (setns(fd, 0) == -1) {errExit("setns");}execvp(argv[2], &argv[2]);errExit("execvp");}
写入到文件中,然后编译:
tee exectest.c <<- "EOF" > #define _GNU_SOURCE> #include > #include > #include > #include > #include > > #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE);} while (0)> > int main(int argc, char *argv[]) {> int fd;> > fd = open(argv[1], O_RDONLY);> if (setns(fd, 0) == -1) {> errExit("setns");> }> execvp(argv[2], &argv[2]);> errExit("execvp");> }> EOF
gcc -o exectest exectest.c
然后运行./exectest:
./exectest /proc/17240/ns/mnt /bin/sh
那么看下这个进程看到的信息是啥:
./exectest /proc/17240/ns/mnt /bin/sh
看到的信息:
这段代码的的核心操作,则是通过 open() 系统调用打开了指定的 Namespace 文件,并把这个文件的描述符 fd 交给 setns() 使用。在 setns() 执行后,当前进程就加入了这个文件对应的 Linux Namespace 当中了
你也可以将网络带进去:
正如上所示,当我们执行 ifconfig 命令查看网络设备时,我会发现能看到的网卡“变少”了:只有两个。而我的宿主机则至少有四个网卡。这是怎么回事呢?实际上,在 setns() 之后我看到的这两个网卡,正是我在前面启动的 Docker 容器里的网卡。也就是说,我新创建的这个 /bin/bash 进程,由于加入了该容器进程(PID=25686)的 Network Namepace,它看到的网络设备与这个容器里是一样的,即:/bin/bash 进程的网络设备视图,也被修改了。而一旦一个进程加入到了另一个 Namespace 当中,在宿主机的 Namespace 文件上,也会有所体现。
其实就是将自己的namespace 指向了原来容器进程的namespace。
查看进程号:
发现和原来的17240进程的net一样。
此外,Docker 还专门提供了一个参数,可以让你启动一个容器并“加入”到另一个容器的Network Namespace 里,这个参数就是 -net,比如:
docker run -it --net container:4ddf4638572d busybox ifconfig
而如果我指定–net=host,就意味着这个容器不会为进程启用 Network Namespace。这就意味着,这个容器拆除了 Network Namespace 的“隔离墙”,所以,它会和宿主机上的其他普通进程一样,直接共享宿主机的网络栈。这就为容器直接操作和使用宿主机网络提供了一个渠道。
docker commit 干了啥? 比如我们提交一个容器。
docker commit,实际上就是在容器运行起来后,把最上层的“可读写层”,加上原先容器镜像的只读层,打包组成了一个新的镜像。当然,下面这些只读层在宿主机上是共享的,不会占用额外的空间。而由于使用了联合文件系统,你在容器里对镜像 rootfs 所做的任何修改,都会被操作系统先复制到这个可读写层,然后再修改。这就是所谓的:Copy-on-Write。而正如前所说,Init 层的存在,就是为了避免你执行 docker commit 时,把 Docker 自己对 /etc/hosts 等文件做的修改,也一起提交掉。
前面我已经介绍过,容器技术使用了 rootfs 机制和 Mount Namespace,构建出了一个同宿主机完全隔离开的文件系统环境。这时候,我们就需要考虑这样两个问题:
- 容器里进程新建的文件,怎么才能让宿主机获取到?
- 宿主机上的文件和目录,怎么才能让容器里的进程访问到?这正是 Docker Volume 要解决的问题:Volume 机制,允许你将宿主机上指定的目录或者文件,挂载到容器里面进行读取和修改操作。
在 Docker 项目里,它支持两种 Volume 声明方式,可以把宿主机目录挂载进容器的 /test目录当中:
docker run -v /test ...docker run -v /home:/test ...
而这两种声明方式的本质,实际上是相同的:都是把一个宿主机的目录挂载进了容器的/test 目录。
只不过,在第一种情况下,由于你并没有显示声明宿主机目录,那么 Docker 就会默认在宿主机上创建一个临时目录 /var/lib/docker/volumes/[VOLUME_ID]/_data,然后把它挂载到容器的 /test 目录上。而在第二种情况下,Docker 就直接把宿主机的 /home 目录挂载到容器的 /test 目录上
当容器进程被创建之后,尽管开启了 Mount Namespace,但是在它执行 chroot(或者 pivot_root)之前,容器进程一直可以看到宿主机上的整个文件系统
而宿主机上的文件系统,也自然包括了我们要使用的容器镜像。这个镜像的各个层,保存在/var/lib/docker/aufs/diff 目录下,在容器进程启动后,它们会被联合挂载在/var/lib/docker/aufs/mnt/ 目录中,这样容器所需的 rootfs 就准备好了。所以,我们只需要在 rootfs 准备好之后,在执行 chroot 之前,把 Volume 指定的宿主机目录(比如 /home 目录),挂载到指定的容器目录(比如 /test 目录)在宿主机上对应的目录(即 /var/lib/docker/aufs/mnt/[可读写层 ID]/test)上,这个 Volume 的挂载工作就完成了。
更重要的是,由于执行这个挂载操作时,“容器进程”已经创建了,也就意味着此时Mount Namespace 已经开启了。所以,这个挂载事件只在这个容器里可见。你在宿主机上,是看不见容器内部的这个挂载点的。这就保证了容器的隔离性不会被 Volume 打破。
注意:这里提到的 " 容器进程 ",是 Docker 创建的一个容器初始化进程(dockerinit),而不是应用进程 (ENTRYPOINT + CMD)。dockerinit 会负责完成根目录的准备、挂载设备和目录、配置 hostname 等一系列需要在容器内进行的初始化操作。最后,它通过 execv() 系统调用,让应用进程取代自己,成为容器里的 PID=1 的进程。
而这里要使用到的挂载技术,就是 Linux 的绑定挂载(bind mount)机制。它的主要作用就是,允许你将一个目录或者文件,而不是整个设备,挂载到一个指定的目录上。并且,这时你在该挂载点上进行的任何操作,只是发生在被挂载的目录或者文件上,而原挂载点的内容则会被隐藏起来且不受影响
所以,在一个正确的时机,进行一次绑定挂载,Docker 就可以成功地将一个宿主机上的目录或文件,不动声色地挂载到容器中。
这样,进程在容器里对这个 /test 目录进行的所有操作,都实际发生在宿主机的对应目录(比如,/home,或者 /var/lib/docker/volumes/[VOLUME_ID]/_data)里,而不会影响容器镜像的内容。那么,这个 /test 目录里的内容,既然挂载在容器 rootfs 的可读写层,它会不会被 dockercommit 提交掉呢?也不会。
这个原因其实我们前面已经提到过。容器的镜像操作,比如 docker commit,都是发生在宿主机空间的。而由于 Mount Namespace 的隔离作用,宿主机并不知道这个绑定挂载的存在。所以,在宿主机看来,容器中可读写层的 /test 目录(/var/lib/docker/aufs/mnt/[可读写层 ID]/test),始终是空的。
不过,由于 Docker 一开始还是要创建 /test 这个目录作为挂载点,所以执行了 dockercommit 之后,你会发现新产生的镜像里,会多出来一个空的 /test 目录。毕竟,新建目录操作,又不是挂载操作,Mount Namespace 对它可起不到“障眼法”的作用。
实验:
docker run -d -v /test nginx
查看挂载信息:
那么是哪一个呢?
docker inspect a9c79
直接看这个好了。
docker exec -it a9c79 /bin/bash
然后运行一下:
在里面写了一下文件.
然后看下这个目录里面有不。
然后我们看下读写层有不:
有一个test 目录,但是是空的。
可以确认,容器 Volume 里的信息,并不会被 docker commit 提交掉;但这个挂载点目录 /test 本身,则会出现在新的镜像当中。
如果你执行 docker run -v /home:/test 的时候,容器镜像里的 /test 目录下本来就有内容的话,你会发现,在宿主机的 /home 目录下,也会出现这些内容。这是怎么回事?为什么它们没有被绑定挂载隐藏起来呢?(提示:Docker 的“copyData”功能)
结
下一节k8s的本质。
关键词:
k8s 深入篇———— 一些容器操作的原理[三]|报资讯
政治权利名词解释电大 政治权利名词解释 最新资讯
微软确认月初遭DDoS网络攻击:一度导致Microsoft 365服务中断
终末的女武神同人 毗沙门天VS宇智波斑-资讯
249元 雷柏推出VT9S无线鼠标:原相3395引擎、26000 DPI|全球微头条
大四男生实习薪资1万4妈妈仰天大笑 姐姐回应:要在船上写论文 全球聚焦
一箭41星创中国纪录!当天传回超清大图:英格兰一览无余 环球观察
全球热讯:拜耳医药保健有限公司属于哪个国家_拜耳公司是哪个国家
头条焦点:全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64
STL vector容器存储键值对
世界滚动:美国加速跌落美债深渊
天天快消息!苹果M2 Ultra首次开盖:Intel 56核心相形见绌
“迈克·马龙,你为什么不买詹姆斯的账?”
环球报道:美团一面:OOM后,JVM一定会退出吗?为什么?
JS(入门)-焦点速读
东土科技:定增募资不超8.75亿元申请获证监会注册批复 环球热文
当前滚动:最便宜折叠手机!moto razr 40开售:3999元起
官方通报“特校校长刘某某强制猥亵残障学生案”
Python调用外部系统命令
【环球报资讯】Python第三方模块:pymongo模块的用法
马斯克:针对智能电视的推特视频应用即将问世 世界快消息
速递!国内首款市域C型动车组亮相:时速达160公里
最新民调:超半数非裔美国人预计美国种族主义会变得更糟 环球报道
500元到5000元 各价位最值得买的10款CPU集合
世界今日报丨独特16:18“方形”比例辨识度拉满:LG推出新款DualUp 28MQ750显示器
演员胡兵50万航司积分被清零引关注 东航客服回应:没办法核实-热门
k8s 深入篇———— docker 镜像是什么[二]
马斯克脑机接口新进展:首例人体植入试验今年开展 环球热资讯
攀升618秒杀:12代酷睿16英寸护眼屏轻薄本仅1999元_全球通讯
天天热资讯!《变形金刚》独占鳌头:2023暑期档票房达15亿元
看了“细菌量” 你还敢给孩子用卷纸来擦嘴吗?_天天快资讯
网飞爆火网剧续作来了!《鱿鱼游戏》第二季官宣:老角色回归|焦点要闻
浦发银行:共湘发展十九载 奋楫扬帆正当时
满血8核+32GB+1TB 机械革命S mini主机到手2929元:办公神器|世界即时看
资讯推荐:上线12年的“QQ安全达人”将下线 网友:你为它装过腾讯电脑管家没?
商职全称是什么 济南商职全称是什么
2023中国高校计算机大数据挑战赛:论文学科分类baseline|清华主办|今日看点
【技术积累】算法中的排序算法【一】
极限科技旗下软件产品 INFINI Easysearch 通过统信 UOS 认证|天天热议
【环球财经】日本为何出现巨额贸易逆差
便宜的瓜不甜?百果园回应女子团购西瓜被嘲讽:是误解 已道歉|全球热闻
京东618发布“35711”梦想:打造3家万亿收入公司 创造100万就业_通讯
演员胡兵向东航维权失败:价值一万多的白金卡50万积分一夜清零
天天快讯:在 Cenntos6.8 下安装 Oracle11g
当前播报:京东限时优惠:Redmi 27英寸4K显示器享大降价
世界头条:人气漫改!网飞真人版《海贼王》预告片出炉:路飞橡胶手无敌
全球车企第一高!马斯克曝特斯拉市值上涨主要动力 今日快看
关注:广州一龙舟队全是富婆?当地:事实 但身价不是参赛门槛
焦点热门:一公司端午节只发了三颗荔枝 员工吐槽:是不是公司要凉了?
女子户外活动后因热射病去世 专家提醒:轻度中暑及时干预_每日时讯
春天的诗有哪些古诗 春天的100首古诗有哪些|快资讯
【热闻】JWT的基本组成结构
当前速递!校长猥亵残障女学生判3年 法院回应全案审查!简直是禽兽不如!
保时捷Taycan对手来了!法拉利“老乡”发布纯电轿跑:124万起-世界报道
世界短讯!上新啦!这些夏日冷饮新品你尝过了吗?今年中国饮品冷饮产业还有这些新趋势!
【技术积累】Java中的集合框架【一】
清除外卖行业“影子店铺”隐患
今天是父亲节 微信上线限时状态感谢老爸:教你2步设置|环球快播
环球信息:重新定义移动办公:华为MatePad Air“野趣办公”成年轻人办公新潮流
每日焦点!16GB显存直戳RTX 4070痛点 AMD RX 7800 XT显卡定了
读发布!设计与部署稳定的分布式系统(第2版)笔记04_集成点
张家界桑植,跳桥救人小哥彭清林的家乡:那里都是“彩色的人”
1799元!前小米9号员工李明发布全球首款Android桌面机器人
Windows游戏一键移植 苹果Mac电脑硬伤不再:暗黑4能跑近百帧 当前热闻
李想造车:网上全赢过 现实没输过 焦点资讯
今日观点!女子骑车手扶帽子头部着地身亡:戴头盔太重要 新国标下月施行
天天观热点:吸甲醛最快最有效方法不花钱(吸甲醛最好的方法是什么)
理想自研自动充电机器人亮相:自动插枪 车主全程免下车_实时焦点
观焦点:广汽本田首批ZR-V致在e:HEV出口欧洲
rust 使用第三方库构建mini命令行工具
spring-boot 项目 使用总结
淄博狂飙90天:烧烤降温流量下滑 大部分烧烤店不再需要排队|当前速看
跳河救人小哥说大家给我的太多了:我只是做了一件小事
95后小伙卖临期食品走红:极具性价比 也能防止浪费_天天视讯
余承东:除了华为和比亚迪 其他人活下来很难
焦点热议:小孩路边偷偷买猫 家长找商家退猫遭拒把猫摔死:网友看怒
83届奥斯卡获奖名单(关于83届奥斯卡获奖名单的基本详情介绍)-全球速递
Rachio3控制用水量的智能庭院洒水器_全球最资讯
【全球新视野】Linux批量文件操作——基于find-xargs
安全攻击溯源-钓鱼邮件溯源 环球滚动
天天百事通!保时捷Mission_E原型车在纽伯格林上飞奔
一加Ace 2V大促:12+256不到2000元 无塑料支架 前沿资讯
大雾致航班取消 乘客骂哭机场员工
焦点速看:江苏常州:把惠企的公交车开到企业“家门口”
环球动态:08. centos安装包方式安装nginx(推荐该方式)
nas docker安装mysql 整理
麻省理工学院开发出超吸水性水凝胶 具有巨大的应用潜力
为计划支持平稳过渡 谷歌千万域名将全部打包出售
网友将梅西亲笔签名纹在了手臂上 网友点评称将永远擦不掉
国产开放世界端游《仙剑世界》即将开启首测 研发时间超过两年
极兔速递正式向港交所提交上市申请书 2022年包裹量计为东南亚排名第一
山东一高校为毕业生举行别有滋味的龙虾宴 引发网友羡慕嫉妒
2023端午档期预售票房突破1000万 王宝强新作《八角笼中》备受期待
医生发现一男子是正常人骨密度的8倍 车祸后毫发无损
媒体曝光C罗与乔治娜曾达成“婚前协议” 若分手女友每个月可获10万欧元补贴
北方多地迎来高温天气 网友在线表演无火煎蛋
《永劫无间》胡桃1/4限量收藏级雕像即将上线 引入全彩3D仿真眼球
百度旗下萝卜快跑开展L4级无人驾驶商业化收费运营 运营时间覆盖早晚高峰
研究结果显示土星发现高浓度磷元素存在 为构成生命的六大基本元素之一
热心市民无意捡到石头竟是新石器时代遗存文物 具有不小的研究价值