容器
容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方运行。比如我们在自己本地的电脑上开发好应用后,把应用打包到容器内。然后就可以在不做任何改动的情况下在生产系统的虚拟机、物理服务器、云主机上运行。
容器不光指我们熟悉的Docker容器,还包含CoreOS的rkt等容器。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含Docker、CoreOS、Google在内的若干公司共同成立了一个叫Open Container Initiative(OCI)的组织,其目的是制定开放的容器规范。因为多种容器都是基于规范进行实现的,所以开发者可以无缝在各种容器实现之间的换,比如我之前使用的是Docker容器,但是后面如果切换到rkt容器,是很容易的事情。
虚拟机
虚拟化是云计算的基础。其使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的CPU、内存、IO硬件资源,但逻辑上虚拟机之间是相互隔离的。物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
容器VS虚拟机
容器由两部分组成:
- (1)应用程序本身;比如我们发布一个web应用,那么这里指web应用程序本身
- (2)应用的依赖: 比如应用程序需要的库(比如web应用依赖的配置文件以及依赖的jar包等)或其他软件容器在Host操作系统的用户空间中运行,与操作系统的其他进程隔离
传统的虚拟化技术,比如VMWare、KVM、Xen,目标是创建完整的虚