Docker是一个容器技术的应用,而底层是由于Linux容器实现的,Docker只是实现层。
一、Linux容器
1、隔离与共享
一台服务器运行着多个逻辑隔离的服务器进程,谁的运行环境都不希望影响到谁,也就是一个物理机需要虚拟出多个环境或容器,Linux提供一种创建和进入容器的方式,操作系统让应用程序就像在独立的机器上运行一样,但又能共享很多底层的资源。
2、实现基础
Linux容器功能是基于cgroups和Namespace实现的。
(1)cgroups(control groups 控制组)
cgroups是将进程分组管理的内核功能,通过cgroups可以隔离进程,同时还可以隔离进程的资源占用(cpu,内存等)情况,在操作系统底层限制物理资源,起到container的作用,进程可用的cpu资源由cpuset指定。
(2)Namespace
Namespace让每个进程拥有独立的PID、IPC和网络空间。Namespace是通过clone系统调用来实现的。clone系统调用的第三个参数flags就是通过设置Namespace来划分资源的。
Linux一共构建了6种不同的Namespace,用于不同场景下的隔离
Mount - 隔离文件系统挂载点
UTS - 隔离主机名和域名
IPC - 隔离进程间通信资源
PID - 隔离PID空间
Network - 隔离网络接口
User - 隔离用户/用户组空间
二、Docker简介