docker13 年初开源,公司本来叫 dotcloud,后改名叫 docker。被 Mitantis 收购。基于linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离的进程,因此也称其为容器。
docker 就是容器,容器就是 docker,并不是这样的,容器就是一个技术类型。而 docker 是当下最主流的,容器的一种实现容器的方案,docker 只是容器其中一种实现方案,其他方案包括:LXC,Mesos,RKT 等等。
容器和传统虚拟化最大的一点区别,就是虚拟化的封装是系统级的封装,docker或者其他容器是进程级的封装。和传统虚拟化最大的一点区别,就是虚拟化是系统级的封装,容器是进程级封装。
Namespaces
作用:访问隔离Docker 主要就是借助 Linux 内核技术 Namespace 来做到隔离的,Linux Namespaces 机制提供一种资源隔离方案。PID,IPC.NETwork 等系统资源不再是全局性的,而是属于某个特定的 Namespace。每个 namespace 下的资源对于其他 namespace 下的资源都是不可见的。因此在操作系统层面上看,就会出现多个相同 pid 的进程。系统中可以同时存在两个进程号为 0, 1,2 的进程,由于属于不同的 namespace,所以它们之间并不冲突。而在用户层面上只能看到属于用户自己 namespace 下的资源,例如使用 ps 命令只能列出自己 namespace 下的进程。这样每个 namespace 看上去就像一个单独的 Linux 系统。IPCNetWorkmountPIDUTSUser
Control groups作用:做资源控制,CPUMEM宽带等提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 cpu、memory、磁盘 IO 等等)的机制,被 LXC、docker 等很多项目用于实现进程资源控制。cgroup 将任意进程进行分组化管理的 Linux 内核功能。cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O 或内存的分配控制等具体的资源管理功能是通过这个功能来实现的。
Rootfs作用:文件系统隔离