背景
自从微服务(Microservice)的出现,出于业务的需要,IT应用模型不断的变革。开发模式从瀑布式到敏捷开发;开发、运维和测试互相配合的devops思想;应用程序架构从单体模型到分层模型再到微服务;部署方式也从面向物理机到虚拟键再到容器;应用程序的基础架构从自建机房到托管再到云计算,等等。这些变革使得IT技术应用的效率大大提升,同时却以更低的成本交付更高质量的产品。
尤其是以Docker为代表的容器技术的出现,终结了devops中交付和部署环节因环节、配置及程序本身的不同而造成的动辄几种甚至十几种部署配置的困境,将它们统一在容器镜像(image)之上。这就是我在工作中遇到最先遇到的困境,同时也是我开始研究容器技术的契机。
如今,越来越多的企业或组织开始开始选择以镜像文件为交付载体。容器镜像之内直接包含了应用程序及其依赖的系统环境、库、基础程序等,从而能够在容器引擎上直接运行。
容器技术概述
容器是一种轻量级、可移植、自包含的软件打包技术,它使得应用程序可以在几乎任何地方以相同的方式运行。
容器有应用程序本身和它的环境依赖(库和其他应用程序)两部分组成,并在宿主机(Host)操作系统的用户空间中运行,但与操作系统的其他进程互相隔离,他们的实现机制有别于VMWare、KVM、Xen等实现方案的虚拟化技术。
由于同一个宿主机上的所有容器都共享其底层操作系统(内核空间),这就使得容器在体积上要比传统的虚拟机小很多。另外,启动容器无须启动整个操作系统,所以容器部署和启动的速度更快,开销更小,也更容易迁移。事实上,容器赋予了应用程序超强的可移植能力。
容器技术的优势
- 开发方面:“一次构建、到处运行”(Build Once, Run Anywhere)。容器意味着环境隔离和可重复性,开发人员只需为应用创建一个运行环境,并将其打包成容器便可在各种部署环境上运行,并与它所在的宿主机环境隔离。
- 运维方面:“一次配置,运行所以”(Configure Once, Run Anything)。一旦配置好标准的容器运行时环境,服务器就可以运行任何容器,这使得运维人员的工作变得更高效、一致和可重复。容器消除了开发、测试、生产环境的不一致性。