容器的本质
容器到底是什么
广义上说,容器技术是动态的容器、静态的镜像和远端的仓库这三者的组合。
容器,就是一个特殊的隔离环境,它能够让进程只看到这个环境里的有限信息,不能对外界环境施加影响。
为什么要隔离
隔离,是为了系统安全的考虑。
使用容器技术,我们就可以让应用程序运行在一个有严密防护的“沙盒”(Sandbox)环境之内。
容器技术的另一个本领就是为应用程序加上资源隔离,在系统里切分出一部分资源,让它只能使用指定的配额。
与虚拟机的区别
从实现的角度来看
- 虚拟机:虚拟化出来的是硬件,需要在上面再安装一个操作系统后才能够运行应用程序,而硬件虚拟化和操作系统都比较“重”,会消耗大量的 CPU、内存、硬盘等系统资源。
- 容器:直接利用了下层的计算机硬件和操作系统,因为比虚拟机少了一层,所以自然就会节约 CPU 和内存,显得非常轻量级,能够更高效地利用硬件资源
从运行效率来看
容器相比虚拟机最大的优势,就在于运行效率,同样的系统资源,虚拟机只能跑3个应用,容器却能跑6个左右。
安装一个Ubuntu系统,很容易就用到10G左右硬盘空间;但使用容器,ubuntu的镜像则只有几十MB,启动也非常快。
隔离是怎么实现的
Linux 操作系统内核之中,为资源隔离提供了三种技术:namespace、cgroup、chroot
namespace
2002 年从 Linux 2.4.19 开始出现的,和编程语言里的 namespace 有点类似
它可以创建出独立的文件系统、主机名、进程号、网络等资源空间,相当于给进程盖了一间小板房,这样就实现了系统全局资源和进程局部资源的隔离
cgroup
2008 年从 Linux 2.6.24 开始出现的,它的全称是 Linux Control Group
用来实现对进程的 CPU、内存等资源的优先级和配额限制,相当于给进程的小板房加了一个天花板
chroot
早在 1979 年的 UNIX V7 就已经出现了
它可以更改进程的根目录,也就是限制访问文件系统,相当于给进程的小板房铺上了地砖
综合运用这三种技术,一个具有完善隔离特性的容器就出现了,进程可以搬到这个隔离空间内了。
总结
- 容器就是操作系统里一个特殊的“沙盒”环境,里面运行的进程只能看到受限的信息,与外部系统实现了隔离。
- 容器隔离的目的是为了系统安全,限制了进程能够访问的各种资源。
- 相比虚拟机技术,容器更加轻巧、更加高效,消耗的系统资源非常少,在云计算时代极具优势。
- 容器的基本实现技术是 Linux 系统里的 namespace、cgroup、chroot。
《极客时间-Kubernetes入门实战课》学习笔记 Day3