Docker 依赖的Linux内核特性

  • Namespaces 命名空间
  • Control groups (cgroups) 控制组

理解这两个特性,能够更好的帮助我们理解docker的资源分配和管理

Namespaces 命名空间

  很多编程语言都包含有命名空间的概念,可以认为命名空间是一种封装的概念,编程中的封装目的是实现代码的隔离。

  编程语言:

    封装 ----->  代码隔离

  操作系统:

    系统资源的隔离

    系统资源包括 进行、网络、文件系统...

  实际上Linux系统内核实现命名空间的目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器。

  在同一个命名空间下的进程可以感知彼此的变化,二对其他命名空间下的进程一无所知,这样可以让容器中的进程产生一种错觉,仿佛置身于一个独立的系统环境中,以此达到独立和隔离的目的。

  从docker的公开文档中可以看到使用了 5 种不同的命名空间

  • PID (Process ID) 进程隔离
  • NET (Network) 管理网络接口
  • IPC (InterProcess Communication) 管理跨进程通信的访问
  • MNT (Mount) 管理挂载点也就是文件系统
  • UTS (Unix Timesharing System) 隔离内核和版本标识

  这些隔离的资源是如何管理起来的呢,这就需要用到 Control groups

Control groups 控制组

  Control groups 是Linux系统内核提供的一种可以限制,记录和隔离进程组所使用的物理资源的机制,最初由Googler工程师提出,

  并且在2007年被Linux内核的2.6.24版本整合进来,可以说cgroups就是为了实现容器而生的,没有cgroups就没有容器的技术的今天。

  Control groups控制组提供了哪些功能:

  • 资源限制  比如Memory子系统可以为进程组设定一个内存使用的上限,一旦进程组使用的内存达到的上限,在申请内存就会发出Out of Memory的消息
  • 优先级设定 可以设定哪些进程组使用更大的CPU或者是磁盘IO 的资源
  • 资源计量 可以计算进程组使用了多少系统资源,尤其在计费系统中这点非常重要
  • 资源控制 可以将进程组挂起和恢复

这两个特性带给了Docker容器的哪些能力呢?

Docker容器的能力

  • 文件系统隔离:每个容器都有自己的root文件系统 
  • 进程隔离: 每个容器都运行在自己的进程环境中
  • 网络隔离:容器间的虚拟网络接口和IP地址都是分开的
  • 资源隔离和分组:使用cgroups将CPU 和内存之类的资源独立分配给每个Docker容器

  

Docker 容器相关技术的更多相关文章

  1. Docker容器相关技术

    docker需要依赖的Linux内核特性:(1)Namespaces 命名空间PID(Process ID) 用来隔离进程NET(Network) 管理网络接口IPC(InterProcess com ...

  2. Docker容器化技术

    1. 初始Docker 1.1 Docker概念 Docker概念:Docker是一个开源的应用容器引擎 诞生于2013年初,基于Go实现,dotCloud公司出品(后改名为Docker Inc) D ...

  3. Docker容器化技术(下)

    Docker容器化技术(下) 一.Dockerfile基础命令 1.1.FROM - 基于基准镜像 FROM centos #制作基准镜像(基于centos) FROM scratch #不依赖任何基 ...

  4. Docker容器化技术(上)

    目录 Docker容器化技术 一.介绍 二.Docker的发展 三.Docker安装 四.阿里云Docker镜像加速 五.Docker的基本概念 六.命令 七.Docker宿主机与容器通信 八.容器内 ...

  5. docker容器虚拟化技术

    简单来说,在Windows系统下安装各种运行环境的坑简直不要太多了(● ̄(エ) ̄●),并不仅限于docker.Nginx.PHP.Python等等,我会尽详细写出实际过程中遇到的各种各样的奇葩问题 1 ...

  6. 新一代Java程序员必学的Docker容器化技术基础篇

    Docker概述 **本人博客网站 **IT小神 www.itxiaoshen.com Docker文档官网 Docker是一个用于开发.发布和运行应用程序的开放平台.Docker使您能够将应用程序与 ...

  7. docker容器的学习笔记

    目录 Docker入门学习笔记(一) 1. 什么是Docker? 2. Docke的目标 3. Docker通常应用场景 4. Docker的基本组成 补:Docker容器相关技术简介 安装Docke ...

  8. docker容器dockerfile详解

    docker公司在容器技术发展中提出了镜像分层的理念,可以说也是这个革命性的理念让原本只不过是整合linux内核特性的容器,开始野蛮生长. docker通过UnionFS联合文件系统将镜像的分层实现合 ...

  9. Docker容器技术-基础命令

    一.基础命令 1.运行一个镜像 [root@bogon ~]# docker run debian echo "Hello World" Unable to find image ...

随机推荐

  1. 极速Node.js:来自LinkedIn的10个性能提升秘籍

    from:http://faylai.iteye.com/blog/1293194 1.避免使用同步的方法 nodejs 是基于单线程.为了让单线程能够处理高并发的请求,我们尽量要避免让线程等待,阻塞 ...

  2. junit在idea中的使用(1)--理论篇

     感觉本文前部分配置太过繁琐,大家可以参考我的这篇文章http://www.cnblogs.com/SuMeng/p/8279879.html(junit在IDEA中使用--实践篇),用添加maven ...

  3. rails 增删改查

    class InvoicesController < ApplicationController def index @invoices = Invoice.all end def show @ ...

  4. C#中往数据库插入空值报错解决方法

    C#中的NUll于SQL中的null是不一样的, SQL中的null用C#表示出来就是DBNull.Value 在用C#往数据库里面插入记录的时候, 可能有的字段你不赋值,那么这个字段的值就为null ...

  5. Sliverlight变换特性

    通过变换,可以为Silverlight图形对象提供旋转.缩放.扭曲和移动的特效.如果图形元素需要通过修改坐标系统来改变元素显示,可能需要使用变换功能.一般来说,所有的变换使用矩形数学改变图形元素的坐标 ...

  6. VC6.0 开发 64 位程序

    1. 设置平台SDK(如:Microsoft platform sdk 2003),选择64位的编译.链接环境. setenv /XP64 /DEBUG 2. 利用这个环境启动VC6.0. msdev ...

  7. WEB-INF有关的目录路径总结、转向方式: forward 重定向方式: Redirect

    WEB-INF有关的目录路径总结 1.资源文件只能放在WebContent下面,如 CSS,JS,image等.放在WEB-INF下引用不了. 2.页面放在WEB-INF目录下面,这样可以限制访问,提 ...

  8. Raspberry Pi开发之旅-实现云平台监控

    一.基本设置 1 sudo raspi-config 移动到第五项“Enable Camera”,回车进入,按tab键切换到“Enable”回车确认.回到主菜单,tab键切换到“Finish”回车确认 ...

  9. 【HackerRank】Cut the tree

    题目链接:Cut the tree 题解:题目要求求一条边,去掉这条边后得到的两棵树的节点和差的绝对值最小. 暴力求解会超时. 如果我们可以求出以每个节点为根的子树的节点之和,那么当我们去掉一条边(a ...

  10. Python编程-函数进阶二

    一.生成器补充 1.什么是生成器? 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2.生成器分类 (1) ...