1.Docker是什么?
Docker是一种轻量虚拟化技术,之所以说轻量,是相比于传统的虚拟机,docker是轻量的。每创建一个传统的虚拟机启动一个进程,当在传统的虚拟机内启动一个进程时宿主机看不到其内部的进程、而轻量虚拟机则可以;轻量虚拟机不能再跑一个系统(windows、centos等)、传统的虚拟机则可以;传统的虚拟机之所以相对重量级一些,是因为创建速度慢;而且,如果一台机器上可以启动40个传统的虚拟机、那么可以启动400到1000个轻量化虚拟机
2.轻量虚拟化的产生
在Linux进程中,每个进程都存在资源的使用,包括Linux内核、文件系统、网络系统、PID、UID、IPC等资源,内存、CPU、磁盘等资源。每个进程共享这些资源且可以接触到的资源是完全一样的。但是有时我们需要1.资源隔离(不同进程有独立的资源环境);2.资源限制(限制某些进程所能使用的资源);3.能对一组进程进行资源隔离和限制。在这种情况下,轻量虚拟化应运而生。运行在满足以上条件下的进程组,我们称它们运行在一个Container中。Docker就是这样的一种容器。
3.Docker的底层技术:
namespace: 实现PID隔离分组,比如虚拟机A中一个进程的PID是1,虚拟机B中一个进程的PID也是1,但是在宿主机内,这两个进程的PID分别为3和4
cgroups:control group实现虚拟机使用的资源隔离
chroot: change root 实现虚拟机文件目录隔离
veth: 实现外界-宿主机-虚拟机的网络交互
union fs(AUFS): 创建虚拟机时,如果把宿主机上的文件系统模版都进行复制,则需要几百兆到1G,使用union fs可以通过mount直接获取这个模版,对于当前容器的改动则可以直接以copy-on-write的形式存储在文件系统顶层。
iptable、netfilter:用于包过滤、转发
tc: traffic controller 流量控制,限制虚拟机使用的网络带宽
quota: 实现对虚拟机磁盘大小的限制
在容器管理方面,LXC是利用以上这些技术创建轻量级虚拟机,libvert也可以使用以上这些技术创建轻量级虚拟机,但其产生是为虚拟机提供一套标准的接口
4.网络相关技术
routing、VLAN、Linux bridge/ovs bridge
5.安全相关
grsec、apparmor、SELinux
6.高级
warden/Imctfy/openVZ
7.相关开源项目
panamax、kubernetes、coreos、flynn、
8.PAAS平台
cloudfoundry、heroku、openshift、BAE