应用程序通常是指将一系列包和配置文件的部署成一个实时可运行的环境。
应用程序通常是指一系列运行在操作系统中的服务,例如一个数据库服务器或一个http服务器,但是他们也可以部署在提供该服务的其他任意环境中,例如一个虚拟机或者一个物理机
运用应用程序的主要缺点是该应用程序本身,实时运行环境,以及base os的一些更新都有可能损坏该应用。例如,一个os的跟新可能包括数个依赖的更新,包括一些由多个编程语言共同的基础库。而一些不兼容的更新则会直接影响到该运行的应用程序。
再者,如果还有另外一个程序和其共享相同的操作系统和一些相同的库,其中一个应用程序一些库的更新则会影响其他程序。
所以,如果一个公司开发一个标准的应用程序,在运行环境的任何维护都需要一系列测试去保证任何OS相关的更新不会影响的应用。
基于应用程序的复杂度, 回归测试就会变得复杂和庞大。有时甚至,任何正常的更新都需要停止整个服务。正常,这意味着有着高可用feature的环境可以降低downtime的影响,增加了部署过程的复杂度。
这个维护会变得非常复杂,任何部署和更新都会变得复杂。
相应的,一个系统管理员可以使用容器,在单个操作系统上一些隔离的部分。容器提供了许多和虚拟机相同的优点,例如安全,存储,网络隔离。这些便利需要更少的硬件资源和更快去启动和停止。他们也隔离库和实时运行环境(例如CPU和存储)去减少任宿主机操作系统的更新所带来的影响
容器化所带来的不仅仅是提高了效率,弹性和可服用性,同时也带来了应用和平台的可移植性。目前,已有许多容器供应商, 例如Rocket, Drawbridge and LXC。目前最主要的供应商是Docker.
容器最主要的优点如下:
1. 低硬件的覆盖率
2. 用OS内部的功能去创建一个隔离的环境(基于命令空间和cgroups技术)。与虚拟机管理程序相比,这个方法减少了CPU的数量和内存。在一个VM里面运行程序是从运行环境中创造隔离的一种方法。但是这个服务也比较重量级。
隔离环境使宿主os和其他应用的变化都不同影响容器。因为容器需要的库为容器所独属,应用可以无中断的运行。例如,每个应用都可以独占容器的库。一个容器的更新不会影响到其他容器。
3.快速部署
部署容器是非常快的,因为没有必要去安装整个底层的操作系统。通常,去支持隔离,需要在宿主机或者虚拟机上安装一个新的操作系统,任何一个更新都需要重启整个OS。而使用容器技术,则仅仅需要重启容器而,不会影响到任何在宿主机的服务。
4.多环境部署
在传统使用单一主机部署场景中,任何环境的差异都会潜在的影响到应用。而使用容器,
差别和不兼容都会减少,因为我们在使用同一个容器的镜像。
5.服用性
相同的容器可以被多个应用复用而不需要重新部署一个完整的OS。一个数据库的容器可以位一个应用程序创建一系列表格,也可以快速销毁和重建,而不需要去运行一堆任务。另外,同一个数据库容器可以被生产环境去部署应用。 通常,一个应用程序包含所有的依赖服务(数据库,消息队列,文件系统)被封装在一个容器内。然而,容器的特性和敏捷需要会让这个方法很有挑战性。在这些例子重,一个多容器的部署也很可行。另外,需知一些应用的一些动作可能不适合作容器化。例如,程序访问底层硬件信息,内存,文件系统和设备等由于容器本身的限制可能导致的失败。
最后,容器促进的是小服务的开发,因为他们提供轻量级可信赖的环境去创建和运行可被部署到生产或者开发环境重而非复杂的多套环境的生产环境和开发环境。
而容器的硬件资源的隔离则由一个重量级的服务来支撑。