一、虚拟机与容器架构图

左侧是虚拟机的架构。可以看出,有4个操作系统(Operating System) ,分别是 Host Operating System 和 3个 Guest Operating System。每个虚机中都有一个独立的Kernel。

右侧为容器架构,很明显图中只有一个操作系统,即只有一个独立的Kernel。

Kernel: 

简单来讲Kernel 就是连接操作系统(OS)和硬件(Hardware)的一个中间组件。大概个架构图如下:

二、什么是虚拟机 

虚拟机(VM)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。简单讲是可以实现在一台物理计算机上模拟多台计算机运行任务。

操作系统(OS)及其应用程序从单个主机服务器或主机服务器池共享硬件资源。每个VM都需要自己的底层操作系统,并且硬件是虚拟化的。管理程序(hypervisor)或虚拟机监视器是创建和运行VM的软件,固件或硬件,位于硬件和虚拟机之间,完成server的虚拟化。

流行的VM:

优点:

  • 虚拟机管理程序,可以集中功能高效地管理所有虚拟环境。

  • 一台主机,通过安装不同系统环境的虚拟机、与运行单独的实体服务器相比是经济的。

  • 虚拟机与主机操作系统隔离,是进行实验和开发应用程序的安全场所

缺点:

  • 虚拟机的大小最少为数GB。不仅要运行操作系统的完整副本,还运行操作系统需要运行的所有硬件的虚拟副本。如只在其运行单个应用程序,这无疑增加大量的RAM和CPU周期消耗。

  • 可移植性差。在迁移虚拟机时,必须同时迁移应用程序和操作系统。

因此、容器技术发展起来。

三、什么是容器

容器是一种进程沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace)、控制组(Cgroups)、切根(chroot)、联合文件系统(Union-capable file system)等技术把资源、文件、设备、状态和配置划分到一个独立的空间。

  • Namespace (进程命名空间): 来规定可以使用什么资源

  • Cgroups (控制组) : 来规定可以用多少资源:如CPU,内存, 网络等

  • chroot(切根):改变某进程的根目录,使这个程序不能访问该目录之外的其他目录,增进系统的安全性,限制使用者能做的事。

  • Union-capable file system(联合文件系统): 把不同文件联合到一个挂载点的文件系统服务

通俗点的理解就是一个装应用软件的箱子,箱子里面有软件运行所需的依赖库和配置。开发人员可以把这个箱子搬到任何机器上,且不影响里面软件的运行。

容器是将操作系统虚拟化,而VM虚拟化一个完整的计算机。 容器是在操作系统之上,每个容器共享OS内核,执行文件和库等。共享的组件是只读的,通过共享OS资源能够减少复现OS的代码,意味着一台server仅安装一个OS可以运行多个任务。容器是非常轻量的,仅仅MB水平并且几秒即可启动。相比容器,VM需要几分钟启动。容器仅需OS、支撑程序和库文件便可运行应用,这意味着可以在同一个server上相比VM运行2-3倍多的应用,并且,容器能帮助创建一个可移植的,一致的开发测试部署环境。

容器类型:

Linux容器(LXC)

最初的Linux容器技术是Linux容器,通常称为LXC。是一种Linux操作系统级虚拟化方法,用于在单个主机上运行多个隔离的Linux系统。

Docker

最初是作为一个构建单应用程序LXC容器的项目,向LXC引入了一些变化,使容器更易于使用和灵活使用。它后来变成了自己的容器运行时环境。在较高的层次上,Docker是一个可以高效创建,发布和运行容器的Linux实用程序。

Kubernetes

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes目前逐渐占据更多容器营地。可能随着时间的推移成为容器阵营的头号大哥。

优点:

  • 启动速度快、占用资源少。

  • 更快的app开发部署。

  • 减少和简化安全更新。

  • 更少的代码传输,移植。

缺点:

  • 不安全。没有虚拟机相同的安全性和稳定性。由于容器共享主机的内核,因此不能像虚拟机一样完全隔离。而容器是进程级的隔离,一个容器可以通过影响宿主机内核的稳定性来影响其他容器。

  • 不利于调整,性能优化。一旦容器执行了任务,就会关闭并删除其中的所有数据。如果希望数据保留下来,则必须使用"数据卷"进行保存,这需要在主机上进行手动配置。

四、VM与容器的选择

差异:

虚拟机 容器
重量级轻量级
硬盘使用GB级硬盘使用MB级
性能接近原生级性能较低
每个VM都在自己的操作系统中运行所有容器共享主机操作系统
硬件机虚拟化OS虚拟化
启动时间以分钟为单位启动时间以毫秒为单位
需要分配所需内存需要更少内存
完全隔离,安全进程级隔离、不太安全
表现有限本地表现

取决于具体需求

  • 当需要在服务器上运行多个应用程序或需要管理各种操作系统时,VM是运行需要所有操作系统资源和功能的应用程序的更好选择。

  • 当最大的优先事项是最大化在最少数量的服务器上运行的应用程序数量时,容器是更好的选择。

最理想的是:以VM的灵活性和容器的最小资源需求协同工作,为环境提供最大的功能。

容器让用户应用用更少的硬件更高效地运行。在另一方面,服务器和云空间的主要使用虚拟机。

参考链接:

虚拟机(Virtual Machine)和容器(Container)的区别 - 简书

虚拟机与容器 的 区别 - 知乎

容器技术简述 - 知乎

容器和虚拟机到底有啥区别?_kevin_tech的博客-CSDN博客

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐