容器、镜像、虚拟机

简单总结,对比下容器、镜像、虚拟机。

什么是容器?

进程的特点:

  1. 可以相互看到、相互通信;
  2. 可以对同一个文件进行读写操作;
  3. 使用相同的系统资源。

这样的三个特点会带来什么问题呢?

  • 因为这些进程能够相互看到并且进行通信,高级权限的进程可以攻击其他进程;
  • 因为它们使用的是同一个文件系统,因此会带来两个问题:
    • 这些进程可以对于已有的数据进行增删改查,具有高级权限的进程可能会将其他进程的数据删除掉,破坏掉其他进程的正常运行;
    • 进程与进程之间的依赖可能会存在冲突,如此一来就会给运维带来很大的压力;
  • 因为这些进程使用的是同一个宿主机的资源,应用之间可能会存在资源抢占的问题,当一个应用需要消耗大量 CPU 和内存资源的时候,就可能会破坏其他应用的运行,导致其他应用无法正常地提供服务。

容器 是一个视图隔离、独立文件系统、资源可限制的进程集合。

  1. 视图隔离:使用 Namespace 技术来实现进程在资源的视图上进行隔离,只能够看到部分进程以及具有独立的主机名等;
  2. 文件系统独立:通过 chroot 系统调用将子目录变成根目录,进程在 chroot 的帮助下可以具有独立的文件系统,对于这样的文件系统进行增删改查不会影响到其他进程;
  3. 资源可限制:通过 Cgroup 来限制其资源使用率。

什么是镜像?

容器具有一个独立的文件系统,因为使用的是系统的资源,所以在独立的文件系统内不需要具备内核相关的代码或者工具,我们只需要提供容器所需的二进制文件、配置文件以及依赖即可。

我们将容器运行时所需要的所有的文件集合称之为容器 镜像

一个镜像就相当于是一个模板,一个容器就像是一个具体的运行实例,镜像具有 一次构建、到处运行 的特点。

容器 VS 虚拟机

VM:利用 Hypervisor 虚拟化技术来模拟 CPU、内存等硬件资源,在宿主机上建立的一个 Guest OS

容器 虚拟机
内核 共享宿主内核 独立
隔离效果 差(进程级) 好(系统级别)
占用资源 少(MB) 多(GB)
启动速度 快(秒级) 慢(分钟级)
彦祖老师 wechat