关于docker的理解随记
1.容器其实不是什么新技术,说白了就是namespace对资源进行隔离,再加UFS实现分层镜像,以及cgroup实现资源限制。这些技术,都是linux中已有的技术,而且有些技术很早之前就有了。
2.上面说了,容器就是用了隔离+分层+限制技术,所以和虚拟机是完全不同的东西,虚拟机那是真真正正的一个操作系统。
3.在/roc/pid/ns下,保存着每一个进程对应的namespace,一共6种,分别是:① 进程通信ns(ipc)、② 挂载ns(mnt)、③pid ns、④网络ns(net)、⑤用户ns(user)、⑥隔离hostname和NIS domain name的uts。
一个进程属于哪个namespace,那么就建立一个链接到该namespace。比如下面,我有一个容器,它里面有两个进程,7344和7327:
$ docker top nginx ↵
UID PID PPID C STIME TTY TIME CMD
root : pts/ :: nginx: master process nginx -g daemon off;
: pts/ :: nginx: worker process
看一下这两个在同一个容器中的进程他们的namespace以及cgroup:
sudo ls -l /proc//ns ↵
total
lrwxrwxrwx root root Jan : cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx root root Jan : ipc -> 'ipc:[4026532496]'
lrwxrwxrwx root root Jan : mnt -> 'mnt:[4026532494]'
lrwxrwxrwx root root Jan : net -> 'net:[4026532499]'
lrwxrwxrwx root root Jan : pid -> 'pid:[4026532497]'
lrwxrwxrwx root root Jan : pid_for_children -> 'pid:[4026532497]'
lrwxrwxrwx root root Jan : user -> 'user:[4026531837]'
lrwxrwxrwx root root Jan : uts -> 'uts:[4026532495]'
udo ls -l /proc//ns ✔
total
lrwxrwxrwx Jan : cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx Jan : ipc -> 'ipc:[4026532496]'
lrwxrwxrwx Jan : mnt -> 'mnt:[4026532494]'
lrwxrwxrwx Jan : net -> 'net:[4026532499]'
lrwxrwxrwx Jan : pid -> 'pid:[4026532497]'
lrwxrwxrwx Jan : pid_for_children -> 'pid:[4026532497]'
lrwxrwxrwx Jan : user -> 'user:[4026531837]'
lrwxrwxrwx Jan : uts -> 'uts:[4026532495]'
发现是相同的,说明他们是在同一个namespace中的。
然后我们来看看普通的进程(容器外的),zsh和systemd这连个进程:
sudo ls -l /proc//ns ↵
[sudo] password for xlinliu:
total
lrwxrwxrwx root root Jan : cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx root root Jan : ipc -> 'ipc:[4026531839]'
lrwxrwxrwx root root Jan : mnt -> 'mnt:[4026531840]'
lrwxrwxrwx root root Jan : net -> 'net:[4026532000]'
lrwxrwxrwx root root Jan : pid -> 'pid:[4026531836]'
lrwxrwxrwx root root Jan : pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx root root Jan : user -> 'user:[4026531837]'
lrwxrwxrwx root root Jan : uts -> 'uts:[4026531838]'
ls -l /proc/$$/ns ✔
total
lrwxrwxrwx xlinliu xlinliu Jan : cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx xlinliu xlinliu Jan : ipc -> 'ipc:[4026531839]'
lrwxrwxrwx xlinliu xlinliu Jan : mnt -> 'mnt:[4026531840]'
lrwxrwxrwx xlinliu xlinliu Jan : net -> 'net:[4026532000]'
lrwxrwxrwx xlinliu xlinliu Jan : pid -> 'pid:[4026531836]'
lrwxrwxrwx xlinliu xlinliu Jan : pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx xlinliu xlinliu Jan : user -> 'user:[4026531837]'
lrwxrwxrwx xlinliu xlinliu Jan : uts -> 'uts:[4026531838]'
发现也是一样的,说明他们也是在同意namespace下。另外我们还可以看到有一个 pid_for_children ,这是什么呢?这是因为pid namespace是可以嵌套的,父级可以看到子级的进程的pid,但子级看不到父集,正式因为这样,所以我们在宿主机中,是可以看到所有容器的进程的,并且每个进程都有pid。 比如上面的nginx容器,他的CMD进程在容器里的pid是1,但是在宿主机中也可以看到它,pid是7344。
参考:
1 DOCKER基础技术:LINUX NAMESPACE(上) 以及 DOCKER基础技术:LINUX NAMESPACE(下)
5 linux 网络虚拟化: network namespace 简介
关于docker的理解随记的更多相关文章
- Docker个人理解总结
最新在学习Docker,记录下自己对Docker的理解. 一.Docker是什么? 1. Docker是一个能够把开发的应用程序自动部署到容器的开源引擎. 2.Docker使用Google公司推出的G ...
- 用前端姿势玩docker【一】Docker通俗理解常用功能汇总与操作埋坑
前言 首先一句话表达个人对docker的理解:与传统虚拟技术基于硬件及物理资源的虚拟化相比,Docker更加轻量化,docker为基于操作系统或内核级别的虚拟化,并且提供了从各种机制与操作以满足从开发 ...
- docker 深入理解之cgroups
cgroups 资源限制 cgroups 是什么 cgroups 最初名为process container,有Google工程师Paul Menage和Rohit Seth于 2006 年提出,后由 ...
- 初识docker与理解
因最近公司的一个新项目,有一个业务场景是需要给多个甲方的服务器配置运行环境与部署,所以考虑使用docker来实现环境配置的统一 1.docker是什么 docker是一种容器虚拟化技术的实现,相当于在 ...
- Docker入门——理解Docker的核心概念
1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...
- docker的理解
作者:刘允鹏链接:https://www.zhihu.com/question/28300645/answer/67707287来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- docker&k8s填坑记
本篇主要用于记录在实施docker和kubenetes过程中遇到的一个问题和解决办法. 本节部分内容摘自互联网,有些部分为自己在测试环境中遇到到实际问题,后面还会根据实际情况不断分享关于docker/ ...
- docker 深入理解之namespace
namespace 名称空间 docker容器主要通过资源隔离来实现的,应该具有的6种资源隔 namespace 的六项隔离 namespace 系统调用参数 隔离的内容 UTS CLONE_NEWU ...
- docker简单理解
Docker是开源的一个基于轻量级虚拟化技术的容器引擎项目.它通过分层镜像标准化和内核虚拟化技术,使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的 ...
随机推荐
- 博客和Github简单练习
我的第一篇博客 1.首先是自我介绍 姓名:孙弘毅 班级:网工142 学号:1413042050 兴趣:游戏,看书 至于我写了多少代码我也不清楚,反正不多 2.Github 注册流程 (1)百度Git ...
- zabbix监控cpu jumps
cpu监控图形分为三种 cpu jumps cpu突发 包含 context switches per second 进程线程切换 interrupts per second 每秒的中断次数 cpu ...
- awk中NF的使用
统计机器中网络连接各个状态个数 netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 一下子不明白$NF是什么意 ...
- 使用 Build Pipeline View 插件图表展示Jenkins job依赖关系
使用 Build Pipeline View 查看Jenkins的Job的依赖关系图表 安装 Build Pipeline View 插件下载地址 下载后再jenkins的"插件管理&quo ...
- DNS本机可解析,其他主机通过本机无法解析问题
新建了一个redhat虚拟机,将此虚拟机作为dns服务器使用,配置完以后宿主机的dns服务器设置为配置好的虚拟机地址,结果总是显示no Server Reached,没有服务器可以到达,花了很长时间终 ...
- (zxing.net)一维码ITF的简介、实现与解码
一.简介 一维码ITF 25又称交插25条码,常用在序号,外箱编号等应用.交插25码是一种条和空都表示信息的条码,交插25码有两种单元宽度,每一个条码字符由五个单元组成,其中二个宽单元,三个窄单元.在 ...
- 调用阿里云API 的demo示例(java/python)
Java 示例 // 创建DefaultAcsClient实例并初始化 DefaultProfile profile = DefaultProfile.getProfile(vo.getAliRegi ...
- Python(模块&包)
参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html 在linux下给pycharm安装第三方库,需要在.bashrc中加: 因为对应 ...
- dbus-launch(转)
*NAME* dbus-launch - Utility to start a message bus from a shell script dbus-launch - 从shell脚本启动一个消息 ...
- SQL查询表结构的语句
SELECT tableName=CASE WHEN a.colorder=1 THEN d.name ELSE '' END ,表说明 =CASE WHEN a.colorder=1 THEN IS ...