docker底层技术:
docker底层的2个核心技术分别是namespaces和control groups
namespace:是容器虚拟化的核心技术,用来隔离各个容器,可解决容器之间的冲突。
主要通过以下六项隔离技术来实现:
有两个伪文件系统:/proc和/sys/

- uts:允许每个container拥有独立的hostname(主机名)和domainname(域名),使其在网络上可以被视作一个独立的节点而非host上的一个进程。
- ipc:contaner中进程交互还是采用linux常见的进程间交互方法,包括常见的信号量,消息队列和共享内存。container的进程间交互实际上还是host上具有相同pid中的进程交互。
- pid:不同用户的进程就是通过pid namesapce隔离开的,且不同namespace中可以有相同pid。所有的lxc(linux containers)进程在docker中的父进程为docker进程,每个lxc进程具有不同的namespace。
- net:不同用户的进程就是通过pidnamespace隔离开的,且不同namespace中可以有相同pid。所有的lxc进程在docker中的父进程为docker进程,每个lxc进程具有不同的namespace。
- mnt:文件系统的挂载点。
- usre:每个container可以有不同的user和groupid,也就是说可以在container内部用container内部的用户执行程序而非host上的用户。
只要解耦了这6项,其他系统资源即便有共用的情况,计算机也认为是在两个不同的系统中。
cgroup(控制程序对资源的占用)
实现cgroup是的主要目的是为不同用户层面的资源管理,提供一个统一化的接口。从单个进程的资源控制到操作系统层面的虚拟化。
cgroup的作用:
1) 资源的限制:cgroup可以对进程组使用的资源总额进行限制。
2) 优先级分配:通过分配的cpu时间片数量及磁盘io带宽大小,实际上就是相当于控制了进程运行的优先级
3) 资源统计:cgroup可以统计系统资源使用量。比如cpu使用时间,内存使用量等。
可用于按量计费。
4) 进程控制:可以对进程组执行挂起,恢复等操作。
cgroup的应用:
1)内存和交换分区的限制:
容器内包括两个部分:物理内存和swap
在docker中可以通过参数控制容器内存的使用:
-m或–memory:设置内存的使用限额
–memory-swap:设置swap(交换分区)的使用限额
//基于centos镜像,限制内存为200m,交换分区的内存为300m



