关于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是开源的一个基于轻量级虚拟化技术的容器引擎项目.它通过分层镜像标准化和内核虚拟化技术,使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的 ...
随机推荐
- The Scope Chain
JavaScript is a lexically scoped language: the scope of variable can be thought of as the set of sou ...
- 浏览器兼容性随手记:Javascript
1.event IE9以下不支持直接获取event对象,所以需要写兼容: var event = event?event:window.event; IE8以下不支持event.target,但是可以 ...
- 窗口间传送数据wsprintf,WM_SETTEXT,SendMessage的理解
对wsprintf API函数的理解: int wsprintf ( LPTSTR lpOut, // pointer to buffer for output LPCTSTR lpFmt, // ...
- npm 安装less
npm install less less-loader --save 在style加上lang="less" 就可以直接用了
- Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法
Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法. 错误信息: git clone git@github.com:ediw ...
- 面向对象SOLID设计原则之Open-Closed原则
首先,我们看下开放-封闭原则(Open-Closed Principle,简称OCP)的概念: 是指软件实体(类.模块.函数等)应该可以扩展,但是不可修改. 任何新功能(functionality)应 ...
- .Net Mvc5Filter与权限认证扩展
WebForm 在做WebForm的时候,如果我们要实现某页面登陆后才能访问,这个非常容易实现 public partial class IndexForm : Page { protected vo ...
- ClamAV学习【9】——cvd文件解析及cli_untgz函数浏览
这个cli_untgz函数,是用来解压CVD文件的. 那么,就刚先搞清楚CVD文件的功能作用.下了源码,我们会发现,没有前面提到的*.mdb或者*.hbd等病毒签名文件.原因就是,那些文件都是由CVD ...
- 微信小程序——扫码后提示“打开失败缺少ID”
解决步骤: 进入通讯录tab->点击右上角添加朋友->搜索框输入:recover,拉到最底下选择小程序进行修复操作 参考:https://developers.weixin.qq.com/ ...
- Vue 框架 笔记
1.兼容 2.性能优化 vuejs ******作者:尤雨溪 *** *******MVVM框架: M:model层 数据层 数据的增删改查 V:view视图层 类似于html的模板 vm:vie ...