导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的容器技术!

为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术。
cgroup 和 namespace 是最重要的两种技术。cgroup 实现资源限额, namespace 实现资源隔离。

cgroup

cgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。相信你已经猜到了:前面我们看到的--cpu-shares-m--device-write-bps 实际上就是在配置 cgroup。

cgroup 到底长什么样子呢?我们可以在 /sys/fs/cgroup 中找到它。还是用例子来说明,启动一个容器,设置 --cpu-shares=512

查看容器的 ID:

在 /sys/fs/cgroup/cpu/docker 目录中,Linux 会为每个容器创建一个 cgroup 目录,以容器长ID 命名:

目录中包含所有与 cpu 相关的 cgroup 配置,文件 cpu.shares 保存的就是 --cpu-shares 的配置,值为 512。

同样的,/sys/fs/cgroup/memory/docker 和 /sys/fs/cgroup/blkio/docker 中保存的是内存以及 Block IO 的 cgroup 配置。

namespace

在每个容器中,我们都可以看到文件系统,网卡等资源,这些资源看上去是容器自己的。拿网卡来说,每个容器都会认为自己有一块独立的网卡,即使 host 上只有一块物理网卡。这种方式非常好,它使得容器更像一个独立的计算机。

Linux 实现这种方式的技术是 namespace。namespace 管理着 host 中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。换句话说,namespace 实现了容器间资源的隔离

Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User,下面我们分别讨论。

Mount namespace

Mount namespace 让容器看上去拥有整个文件系统。

容器有自己的 / 目录,可以执行 mount 和 umount 命令。当然我们知道这些操作只在当前容器中生效,不会影响到 host 和其他容器。

UTS namespace

简单的说,UTS namespace 让容器有自己的 hostname。默认情况下,容器的 hostname 是它的短ID,可以通过 -h 或 --hostname 参数设置。

IPC namespace

IPC namespace 让容器拥有自己的共享内存和信号量(semaphore)来实现进程间通信,而不会与 host 和其他容器的 IPC 混在一起。

PID namespace

我们前面提到过,容器在 host 中以进程的形式运行。例如当前 host 中运行了两个容器:

通过 ps axf 可以查看容器进程:

所有容器的进程都挂在 dockerd 进程下,同时也可以看到容器自己的子进程。如果我们进入到某个容器,ps 就只能看到自己的进程了:

而且进程的 PID 不同于 host 中对应进程的 PID,容器中 PID=1 的进程当然也不是 host 的 init 进程。也就是说:容器拥有自己独立的一套 PID,这就是 PID namespace 提供的功能。

Network namespace

Network namespace 让容器拥有自己独立的网卡、IP、路由等资源。我们会在后面网络章节详细讨论。

User namespace

User namespace 让容器能够管理自己的用户,host 不能看到容器中创建的用户。

在容器中创建了用户 cloudman,但 host 中并不会创建相应的用户。

小结

本章首先通过大量实验学习了容器的各种操作以及容器状态之间如何转换,然后讨论了限制容器使用 CPU、内存和 Block IO 的方法,最后学习了实现容器的底层技术:cgroup 和 namespace。

长按订阅更多精彩▼

实现容器的底层技术--云平台技术栈06相关推荐

  1. 漫谈云计算、虚拟化、容器化--云平台技术栈05

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的虚拟化! 什么是云计算? 1.1 云计算概念 云计算是最近几年才兴起的概念,但是这样的需求其实早都有了,现阶段广为接受的是美国国家 ...

  2. 10张图带你深入理解Docker容器和镜像--云平台技术栈07

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的Docker! 翻译:杨润青 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image ...

  3. 分布式存储 Ceph 介绍及原理架构分享--云平台技术栈系列01

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的Ceph,从架构简介使用场景,以及内部IO流程.心跳机制.通信框架.CRUSH算法.QOS等多个方面逐渐介绍分布式存储系统Ceph ...

  4. 阿里云叔同:以容器为代表的云原生技术,已经成为释放云价值的最短路径

    作者 | 丁宇(叔同) 阿里云智能容器平台负责人 云计算.大数据.人工智能等新技术正迅速的改变着我们所处的时代,其巨大的影响力已经从量变到质变,数字化转型成为企业发展的必然选择. 据IDC报告,全球前 ...

  5. 阿里云叔同:以容器为代表的云原生技术,已成为释放云价值的最短路径

    作者 | 丁宇(叔同) 阿里云智能容器平台负责人 .刘丹 2019 年阿里巴巴 双11 核心系统 100% 以云原生的方式上云,完美支撑了 54.4w 峰值流量以及 2684 亿的成交量.随着阿里巴巴 ...

  6. 以容器为代表的云原生技术,正成为释放云价值最短路径

    作者 | 丁宇(叔同) 阿里云智能容器平台负责人 云计算.大数据.人工智能等新技术正迅速的改变着我们所处的时代,其巨大的影响力已经从量变到质变,数字化转型成为企业发展的必然选择. 据IDC报告,全球前 ...

  7. 图解Istio原理和实践--云平台技术栈18

    " 如果你比较关注新兴技术的话,那么很可能在不同的地方听说过 Istio,并且知道它和 Service Mesh 有着牵扯. 导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下 ...

  8. Spring Cloud剖析--云平台技术栈17

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的Spring cloud! Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构 ...

  9. Redis详解和实战--云平台技术栈16

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的Redis! http://wdxtub.com/2016/07/05/redis-guide/ Redis 是 C 实现的基于内 ...

最新文章

  1. Oralce分析函数
  2. 图解当前最强语言模型BERT:NLP是如何攻克迁移学习的?
  3. PHP array_merge() 函数
  4. android文件读写
  5. react封装函数_react request.js 函数封装
  6. vue跳转传参刷新后参数消失
  7. Socket编程总结—Android手机服务器与多个Android手机客户端之间的通信(非阻塞)
  8. stata面板数据单位根检验llc_stata面板单位根检验怎样看结果?LLC、ADF_Fisher以及IPS,求助...
  9. 阿里云CDN边缘图像处理功能内测
  10. ORACLE大数据查询
  11. 跨平台测试框架--STAF介绍
  12. 访问localhsot:8080需要密码
  13. 记录——kubeadm集群node节点加入
  14. animate.css插件指南
  15. C语言实现时间差计算
  16. 狂神说多线程学习笔记整理(二)~JUC并发编程
  17. Centos8安装vsftpd
  18. “永恒之蓝”(Wannacry)蠕虫全球肆虐 安装补丁的方法
  19. 联想微型计算机开机显示f1,联想笔记本开机后总是提示需要按F1才能进入系统如何解决...
  20. 字典服务的设计与管理

热门文章

  1. oracle rodo 查看大小,Checkpoint not complete故障
  2. BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】
  3. linux2.0版本发布时间,Ubuntu 20.04 LTS发布时间表公布 4月23日放出最终稳定版
  4. 二分查找与二叉排序树
  5. 创建新的用户以及一系列的操作
  6. centos6.5下载卸载mysql,centos 6.5卸载Mysql
  7. 01-mybatis源码阅读
  8. 19.04.27--作业 打字游戏
  9. 给2019前端的5个建议
  10. jQuery取值的一些奇奇怪怪的操作