简单地讲,可以将
Docker
容器理解为一种轻量级的沙盒( sandbox )。
每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。 很多时候,甚至直接把容器当作应用本身也没有任何问题。
常见的 LAMP (Linux+Apache+MySQL+PHP )组合来构建网站 。 按照传统的做法,首先需要安装 Apache 、MySQL 和 PHP以及它们各自运行所依赖的环境;之后分别对它们进行配置(包括创建合适的用户、配置参数等);经过大量的操作后,还需要进行功能测试,看是否工作正常;如果不正常,则进行调试追踪,意味着更多的时间代价和不可控的风险。可以想象,如果应用数目变多,事情会变得更加难以处理。
如果一旦需要服务器迁移,往往需要对每个应用都进行重新部署和调试。 这些琐碎而无趣的“体力活”,极大地降低了用户的工作效率。 究其根源,是这些应用直接运行在底层操作系统上,无法保证同一份应用在不同的环境中行为一致。 而 Docker 提供了一种更为聪明的方式,通过容器来打包应用、解藕应用和运行平台 。这意味着迁移的时候,只需要在新的服务器上启动需要的容器就可以了,无论新旧服务器是否是同一类型的平台 。 这无疑将帮助我们节约大量的宝贵时间,并降低部署过程出现问 的风险。
Virtual Machine Manager,VMM
,以及Hypervisor
)的支持, Docker 是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低 。Dockerfile
,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。
基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的虚拟机技术即属于这个范畴) 。 前者一般指的是一些模拟设备或诸如 Wine 这样的软件,后者又可以细分为几个子类:
VMware Workstation , Xen, KVM
;paravirtualization
)。部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改。传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层 。 Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级 。