为了账号安全,请及时绑定邮箱和手机立即绑定

Docker背后的技术

标签:
Docker

Docker 是用Go语言编写的,它使用了Linux内核中的一些功能,具体就是:

NameSpace

Docker的Container 使用NameSpace 来实现隔离,在运行容器的过程中,Docker为该容器创建一组NameSpace。

这些NameSpace提供了隔离层,例如,进程,网络等,它们都运行在一个独立的NameSpace,访问也只限于NameSpace。

Linux 内核从版本 2.4.19 开始陆续引入了 namespace 的概念。其目的是将某个特定的全局系统资源通过抽象方法使得namespace 中的进程看起来拥有它们自己的隔离的全局系统资源实例,namepsace包括:

  1. pid NameSpace:进程隔离(pid:进程ID)。
    每个 PID namespace 中的进程可以有其独立的 PID; 每个容器可以有其 PID 为 1 的root 进程;也使得容器可以在不同的 host 之间迁移,因为 namespace 中的进程 ID 和 host 无关了。这也使得容器中的每个进程有两个PID:容器中的 PID 和 host 上的 PID。

  2. net NameSpace:管理网络接口(net: Networking)。
    每个容器用有其独立的网络设备,IP 地址,IP 路由表,/proc/net 目录,端口号等等。这也使得一个 host 上多个容器内的同一个应用都绑定到各自容器的 80 端口上。

  3. ipc NameSpace:管理对ipc资源的访问(ipc:进程间通信)。
    每个容器有其自己的 System V IPC 和 POSIX 消息队列文件系统,因此,只有在同一个 IPC namespace 的进程之间才能互相通信

  4. mnt NameSpace:管理文件系统挂载点(mnt: mount)。
    每个容器能看到不同的文件系统层次结构。

  5. uts NameSpace:隔离内核和版本标识符。Unix分时系统。
    每个容器可以有自己的 hostname 和 domainame。

  6. User NameSpace :用户和组 ID name space。
    在 user namespace 中的进程的用户和组 ID 可以和在 host 上不同; 每个 container 可以有不同的 user 和 group id;一个 host 上的非特权用户可以成为 user namespace 中的特权用户;

Control Groups.

Docker使用CGroups技术来限制特定的资源。 使用CGroups, Docker 引擎可以向容器共享可用的硬件资源。比如限定特定内存给特定的容器使用。

Linux 中的Cgroup 可​​​​为​​​系​​​统​​​中​​​所​​​运​​​行​​​任​​​务​​​(进​​​程​​​)的​​​用​​​户​​​定​​​义​​​组​​​群​​​分​​​配​​​资​​​源​​​ — 比​​​如​​​ CPU 时​​​间​​​、​​​系​​​统​​​内​​​存​​​、​​​网​​​络​​​带​​​宽​​​或​​​者​​​这​​​些​​​资​​​源​​​的​​​组​​​合​​​。
它主要提供了如下功能:

  1. Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制。
  2. Prioritization: 优先级控制,比如:CPU利用和磁盘IO吞吐。
  3. Accounting: 一些审计或一些统计,主要目的是为了计费。
  4. Control: 挂起进程,恢复执行进程。

使​​​用​​​ cgroup,系​​​统​​​管​​​理​​​员​​​可​​​更​​​具​​​体​​​地​​​控​​​制​​​对​​​系​​​统​​​资​​​源​​​的​​​分​​​配​​​、​​​优​​​先​​​顺​​​序​​​、​​​拒​​​绝​​​、​​​管​​​理​​​和​​​监​​​控​​​。​​​可​​​更​​​好​​​地​​​根​​​据​​​任​​​务​​​和​​​用​​​户​​​分​​​配​​​硬​​​件​​​资​​​源​​​,提​​​高​​​总​​​体​​​效​​​率​​​。

Union 文件系统

UnionFS是通过创建层来操作的文件系统。非常的轻量级,而且快。
Docker使用UnionFS来为容器创建构建块。

容器格式

Docker将name space, cGroups, unionFS 组合到一个称为容器格式的包装器中。默认的容器格式是libcontainer。

所以,Docker是一种基于Linux内核的一个容器引擎,通过其背后的技术,我们其实也可以得到以下几点:

  1. Docker基于Linux,隔离性主要是通过Namespace来隔离,相对简单。
  2. Docker对Disk管理也比较有限。
    当然,Docker也毋庸置疑是一个很好的,非常成功的产品。
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消