一般来说,我们编写好的应用程序,需要部署在响应的服务器中,而服务器则是一台安装了OS操作系统的计算机。
在该计算机中,运行我们的应用程序,通过网络对外提供服务。期间我们的应用程序在不停的使用服务器计算机的软件
和硬件,来满足它的计算和运行。
在介绍Docker之前,我们先来介绍一下容器技术。
而目前的互联网行业,越来越多的应用服务、微服务以及分布式服务,应运而生,而让那么多的服务每一个都运行在
一个独立的服务器中,显然需要很高的硬件以及运营成本,所以大多数企业选择了使用“容器”来解决多应用部署的问题。
那么,什么是容器呢?
一、什么是容器
容器技术其实就是一种虚拟化方案,与传统的虚拟机不同,传统的虚拟机,是通过中间层,将一台或者多台独立的机器虚拟运行于物理硬件之上,而容器则是直接运行于操作系统之上的用户空间。因此,容器虚拟化,也被成为操作系统虚拟化。
由于依赖于操作系统的特性,所以容器只能运行与底层操作系统相同或相似内核的操作系统。
而Docker使用的操作系统,正是依赖于Linux内核的Namespace和CGroups等特性,所以Docker上只能运行Linux类型的系统,而不能运行Windows系统,这也正是容器相对于虚拟机系统,在系统灵活性上的劣势。
二、容器技术的优点
上图左边是运行在一台机器上的两台虚拟机,右边是运行在一台机器上的两个容器。从图中可以看出,容器需要使用的磁盘空间比虚拟机要少。因为当使用虚拟机部署应用时,不但包含了应用和其依赖的库,还需要包含一个完整的操作系统,原本只需要几十MB的应用,却需要动辄几十GB的操作系统来支持。而右边的容器,只需要包含应用程序和其依赖的库,资源占用大大减少。
另外,虚拟机需要模拟硬件的行为,对内存和CPU的损耗也相当得大。所以,同样配置的服务器,使用容器技术,比使用虚拟机能够提供更多的服务能力,服务更多的用户。
那么,容器有那么多的优点,为什么直到Docker的出现,才成为大家关注的重点呢?一个重要的原因就是容器技术的复杂性。容器本身就比较复杂吗,它依赖于Linux内核的很多特性,而且它不易安装,也不容易管理和实现自动化。而Docker就是为了改变这一点而出现的。
三、什么是Docker
Docker的Logo是一只载满了集装箱的鲸鱼:
Docker自己是这样说鲸鱼的:The logo is a Whale carrying a stack of containers. It is on its way to deliver those to you.它托着许多集装箱。我们可以把宿主机当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。鲸鱼或许代表着创始人Solomon Hykes眼中的互联网愿景,就像20世纪50年代集装箱颠覆了全球物资运输方式一样,它将会颠覆信息运输方式,让货物在互联网的火车、汽车、轮船之间畅通无阻。
Docker是一个能够将开发的应用程序,自动部署到容器的开源引擎。它使用go语言编写,其GitHub的地址为:https://github.com/docker/docker
Docker在2013年初,由dotCloud(也就是现在的Docker公司)发布,基于Apache2.0开源授权协议。
Docker有什么特别之处呢?它在虚拟化的容器环境中,增加了程序部署引擎,该引擎的目标,就是提供一个轻量、快速的环境,能够运行开发者程序,并能方便高效的将应用程序从开发者的环境,部署到测试环境,然后再部署到生产环境。
四、Docker的目标
(1)提供简单、轻量的建模方式
Docker十分容易上手,用户只需要几分钟,就可以将自己的程序“Docker化”。大多数Docker容器只需要不到1秒的时间,即可运行起来。由于去除了管理程序的开销,Docker容器拥有非常高的性能,同时,同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
(2)职责的逻辑分离
使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的,就是要加强开发人员写代码的开发环境,与应用程序要部署的生产环境的一致性。
(3)快速高效的开发生命周期
Docker的目标之一,是缩短代码从开发、测试到部署、上线运行的周期,让我们的应用程序具备可一致性。在容器中开发,以容器的形式交付和分发,这样,开发、测试、生产都使用相同的环境,也就避免了额外的调试,以及部署上的开销。这样就能有效的缩短产品的上线周期。
(4)鼓励使用面向服务的架构
Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用模型。在这种模型下,应用程序或服务,都可以表示为一系列内部互联的容器,从而使分布式部署、扩展和调试应用程序都变得非常简单。这就像我们在开发中的“高内聚、低耦合、单一任务”的思想。这样就能避免在同一服务器上部署不同服务时,
可能带来的服务之间的互相影响。这样在运行过程中,出现问题,也比较容易定位问题的所在。
五、Docker的使用场景
(1)使用Docker容器开发、测试、部署服务
因为Docker本身非常轻量化,所以本地开发人员可以构建、运行并分享Docker容器。容器可以在开发环境中创建,然后再提交到测试,最终进入生产环境。
(2)创建隔离的运行环境
在很多企业应用中,同一服务的不同版本,可能服务于不同的用户。而使用Docker,非常容易创建不同的生产环境来运行不同的服务。
(3)搭建测试环境
由于Docker的轻量化,所以开发者很容易利用Docker在本地搭建测试环境,用来测试程序在不同系统下的兼容性,甚至是搭建集群系统的测试。而学生也很容易利用Docker来搭建学习开发的环境。
(4)构建多用户的平台即服务(PaaS)基础设施
(5)提供软件即服务(SaaS)应用程序
(6)高性能、超大规模的宿主机部署
目前AWS(亚马逊云平台)、Windows Azure(微软云计算操作系统)等公有云服务,都提供了对Docker的支持,使开发者可以借助云平台,利用Docker搭建PaaS、SaaS等服务。
同时,也有开发者,在使用Open Stack和Docker结合,提供PaaS、SaaS的服务,使Docker在云计算服务领域,有着非常广阔的前景。
---------------------
【转载】
作者:光仔December
原文:https://blog.csdn.net/acmman/article/details/83212634
|
|