前言:
云计算领域最火的莫过于“容器”,而提到容器,就不得不提 Docker,可以说 Docker 已经是容器的代名词。容器其实是一种沙盒技术,顾名思义,沙盒就是能够像集装箱一样,把应用“装”起来的技术。这样,应用和应用之间就有了边界,不互相干扰。Docker 运行的三大基石:Namespace、Cgroup和 rootfs。了解这些内容就能够清晰地明白 docker 和虚拟机的区别了,也就是说运行在 Docker 里的进程仍然需要宿主机的支持,比如内核版本等。而我们通常会把容器技术和虚拟化技术做对比,应该会常常看到这样一张图。
左边的图,画出了虚拟机的工作原理。其中,Hypervisor 是虚拟机的重要组成部分,通过硬件虚拟化功能,模拟出了运行一个操作系统需要的各种硬件,比如 CPU、内存、I/O 设备等,然后,它在这些虚拟的硬件上安装了一个新的操作系统,即 Guest OS。而容器是进程级隔离,依靠 Namespace 机制实现进程间隔离,Cgroups 实现进程资源限制。
一、Linux NamespaceLinux Namespace 是 Kernel 的一个功能,可以隔离一系列的系统资源,比如 PID(Process ID)、User ID、Network 等。命名空间建立系统不同的视图,从用户的角度来看,