Docker 基础底层架构浅谈

docker学习过程中,免不了需要学习下docker的底层技术,今天我们来记录下docker的底层架构吧!

 

从上图我们可以看到,docker依赖于linux内核的三个基本技术:namespaces、CGroups、union FS;

  • namespaces
    管理着host中 全局唯一的资源,可以让每个容器都感觉只有自己在使用它。换句话是,namespace 实现了容器间资源的隔离,让容器拥有独立的hostname、ip、pid,同时确保一个容器中运行一个进程而且不能看到或者影响容器wait的其他进程。它使得容器看起来更像一个独立的计算机。
  • CGroups,全程Control Group
    CGroups是容器对使用的宿主机资源进行核算并限制的关键功能。linux os 可以通过 cgroup 设置进程使用CPU、内存和IO资源的限额。我们可以在 
    /sys/fs/cgroup 中找到cgroup 的“原型”。
  • union FS
    主要是对镜像也就是image 这一块作支持,采用copy-on-write 技术,让大家可以共用某一层,对于某些差异层的话,就可以在差异的内存中进行存储。
    docker原本是在ubuntu上开发的,ubuntu有 union fs这种支持,但是centos内核不支持,docker为了能够在centos下 开箱即用,所以弄了loop-lvm ,做到不用配置,但是这个东西官方明确说明 不建议在生成环境使用,所以通过网上查找资料,将loop-lvm  更换为direct-lvm。后续探讨如何在虚拟机上进行direct-lvm设置

Libcontainer:是一个库,对我们上述的三个技术进行了封装。

Docker Engine 用来控制容器 Container 的运行,以及镜像文件的拉取。

 

PS.其他文章会对三个基本技术中的 CGroup 进行详细的测试描述: Docker资源限制实现——CGroups

 

posted @ 2018-04-02 17:54  我为什么要写这个  阅读(318)  评论(0编辑  收藏  举报