简单总结,对比下容器、镜像、虚拟机。
什么是容器?
进程的特点:
- 可以相互看到、相互通信;
- 可以对同一个文件进行读写操作;
- 使用相同的系统资源。
这样的三个特点会带来什么问题呢?
- 因为这些进程能够相互看到并且进行通信,高级权限的进程可以攻击其他进程;
- 因为它们使用的是同一个文件系统,因此会带来两个问题:
- 这些进程可以对于已有的数据进行增删改查,具有高级权限的进程可能会将其他进程的数据删除掉,破坏掉其他进程的正常运行;
- 进程与进程之间的依赖可能会存在冲突,如此一来就会给运维带来很大的压力;
- 因为这些进程使用的是同一个宿主机的资源,应用之间可能会存在资源抢占的问题,当一个应用需要消耗大量 CPU 和内存资源的时候,就可能会破坏其他应用的运行,导致其他应用无法正常地提供服务。
容器 是一个视图隔离、独立文件系统、资源可限制的进程集合。
- 视图隔离:使用
Namespace
技术来实现进程在资源的视图上进行隔离,只能够看到部分进程以及具有独立的主机名等; - 文件系统独立:通过
chroot
系统调用将子目录变成根目录,进程在 chroot 的帮助下可以具有独立的文件系统,对于这样的文件系统进行增删改查不会影响到其他进程; - 资源可限制:通过
Cgroup
来限制其资源使用率。
什么是镜像?
容器具有一个独立的文件系统,因为使用的是系统的资源,所以在独立的文件系统内不需要具备内核相关的代码或者工具,我们只需要提供容器所需的二进制文件、配置文件以及依赖即可。
我们将容器运行时所需要的所有的文件集合称之为容器 镜像。
一个镜像就相当于是一个模板,一个容器就像是一个具体的运行实例,镜像具有 一次构建、到处运行 的特点。
容器 VS 虚拟机
VM:利用 Hypervisor
虚拟化技术来模拟 CPU、内存等硬件资源,在宿主机上建立的一个 Guest OS
。
容器 | 虚拟机 | |
---|---|---|
内核 | 共享宿主内核 | 独立 |
隔离效果 | 差(进程级) | 好(系统级别) |
占用资源 | 少(MB) | 多(GB) |
启动速度 | 快(秒级) | 慢(分钟级) |