docker struct and namespace and cgroup
This project is maintained by wangfakang
关于docker架构的简单认识:
首先docker是一种c/s模式的架构,分为docker client 和 docker daemon.其中docker client主要是 收集用户执行的命令参数,并做简单的解析,然后解析调用相应的handler与docker daemon进行连接然后动 过docker daemon的router server 进行相应的路由处理,调用相应的函数进行response给client.
主要是进行相关命令行的解析,然后进行向docker发送命令请求.
主要就是根据client发过来的请求参数进行执行相应的handler.其组件:Docker Server、Engine和Job三部分, 其中docker server是接受client的请求的,Engine主要是用来管理job的执行,job就是一个具体的任务执行.
docker 进行run image的时候生成一个容器,有这样几个概念rootfs、Union mount、image以及layer。
docker是lxc的管理器,lxc是cgroup的管理工具,cgroup是namespace的用户空间的管理接口。namespace是linux内核在
task_struct中对进程组管理的基础机制。
linux中称谓的container在内核层面由两个独立的机制保证,一个保证资源的隔离性,名为namespace;一个进行资源的
控制,名为cgroup。
docker 的名字叫 lxc-docker而 LXC 又是基于 cgroup 的 namespace, chroot 等, 由于我并不懂这些, 但 namespace 可以帮助我们理解, 就像我们写
程序一样, 这是一个命名空间, 与其他 namespace 相区别:
cgroup 对于 docker 是至关重要的, 了解它才会觉得 docker 不神秘, cgroup 全称为 control group, 是 linux 内核提供
的功能, 简单的说, 它的作用就是把系统运行的进程按用户自定义的群组区分, 也就是说一个 docker, 一个 group cgroup
有限制使用资源的能力.
UTS namespace提供了主机名和域名的隔离,这样每个容器就可以拥有了独立的主机名和域名,在网络上可以被视作一个独
立的节点而非宿主机上的一个进程.
Mount namespace通过隔离文件系统挂载点对隔离文件系统提供支持,它是历史上第一个Linux namespace,所以它的标识位比
较特殊,就是CLONE_NEWNS.
Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理 资源(如:cpu,memory,IO等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚 拟化所使用的资源管理手段,可以说没有cgroups就没有LXC。
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流