Docker&Container
什么是Docker&Container?
Docker是什么呢?简单点说,Docker就是一个Container的管理工具。
Container是什么呢?通俗的说,Container就是一个更轻量级的虚拟机,但是这个虚拟机没有操作系统和设备(操作系统是共享的)。
Container
一个没有操作系统和设备的虚拟机怎么会如此火爆呢?不是因为container技术本身有多牛逼(虽然这个技术确实挺牛逼的),而是因为container技术目前解决了软件行业的最大问题之一:应用的共享,配置管理和维护(还有应用的隔离,效率等等,后面再讲),不管是在物理机环境还是云环境。
白话点说,就是有个container技术,你无论在云环境,还是其它环境安装一个SAP系统都和在appstore上安装一个微信差不多简单。
那Container如何做到实现应用的部署和隔离呢?它把应用和应用关联的lib库都装在container里面,这个container可以在某个操作系统上跑,而container内的东西和container外的东西是隔离的。大家很快会想到,这不就是虚拟机吗?Container和虚拟机看上去差不多,但是还是有些不同的。 和虚拟机相比,container不仅更轻量,而且配置简化了很多(不用考虑操作系统和设备的配置)。这样做有2个好处,一个是写应用的人不用管操作系统的事了(我只会写JAVA,不懂Linux,没关系,你把JAVA相关的配置搞好就好了),因为应用都在container里面。另一个好处是,你的container既可以部署在笔记本的操作系统上,也可以部署到云环境,只要操作系统一样,其它区别都没关系。并且不需要安装,解压等等(这个类似于虚拟机,但是虚拟机要考虑虚拟机容器的不同,而对于container,只要操作系统一样就行了)。从配置管理来看,Container可以做增量的管理(这个就不展开了)。
刚才是从应用共享和部署的角度看container技术。从更大的影响来讲,container技术会影响我们整个软件的开发和管理方式,我拿汽车做一个类比,我们过去的企业级软件(或者叫复杂软件),软件生产的很多工作都是装配和调试,由于IT系统配置相关的复杂性(和汽车相似,一大堆零部件),软件的管理和维护也非常复杂,软件的发布会牵涉到一大堆部门,软件的开发,集成,和其它工具的集成,还有运维,测试等等。由于软件本身是需要改进和升级的,在这种基于装配和调试的生产方式下,软件的管理和维护工作不仅复杂而且工作量大。而基于container和Docker技术,未来应用软件的主要工作会转变为整个部件的替换,装配工作在开发阶段就一次完成了。管理工作的复杂性必然大大降低。软件产品的工业化水平也会大大提高。
另一方面,站在程序员的角度,过去软件的管理和共享,主要是在代码层面,例如github,未来的管理和共享,是在应用层面,类似于google app store。程序员和最终用户的距离会非常近。最终用户也有可能自己搭建SAP这样的系统,这种变化的影响会非常深远。
另外,从效率的角度,container也可以更有效地利用机器资源,这对于云计算的服务商来说,是至关重要的。
本节摘自: http://m.blog.csdn.net/u012601664/article/details/39547319
Docker
Docker是什么?
Docker是一个工具,它致力于为任何应用程序创建分发版本而简化封装流程,将其部署到各种规模的环境中,并将敏捷软件组织的工作流程和响应流水化。
我们很难把Docker的好处一一举例。如果用得好,Docker能在多个方面为组织,团队,开发者和运营工程师带来帮助。从宿主系统的角度看,所有应用程序的本质是一样的,因此这就决定了Docker让架构的选择更加简单。这也让工具的编写和应用程序之间的分享变得更加容易。这世上没有什么只有好处却没有挑战的东西,但是Docker似乎就是一个例外。以下是一些我们使用Docker能够得到的好处:
-
使用开发人员已经掌握的技能打包软件
许多公司为了管理各种工具来为它们支持的平台生成软件包,不得不提供一些软件发布和构建工程师的岗位。像 rpm、mock、 dpkg 和 pbuilder 等工具使用起来并不容易,每一种工具都需要单独学习。而 Docker 则把你所有需要的东西全部打包起来,定义为一个文件。 -
使用标准化的镜像格式打包应用软件及其所需的文件系统
过去,不仅需要打包应用程序,还需要包含一些依赖库和守护进程等。然而,我们永远不能百分之百地保证,软件运行的环境是完全一致的。这就使得软件的打包很难掌握,许多公司也不能可靠地完成这项工作。常有类似的事发生,使用ScientificLinux的用户试图部署一个来自社区的仅在Red Hat Linux上经过测试的软件包,希望这个软件包足够接近他们的需求。如果使用Dokcer只需将应用程序和其所依赖的每个文件一起部署即可。Docker的分层镜像使得这个过程更加高效,确保应用程序运行在预期的环境中。 -
测试打包好的构建产物并将其部署到运行任意系统的生产环境
当开发者将更改提交到版本控制系统的时候,可以构建一个新的Docker镜像,然后通过测试,部署到生产环境,整个过程中无需任何的重新编译和重新打包。 -
将应用软件从硬件中抽象出来,无需牺牲资源
传统的企业级虚拟化解决方案,例如VMware,以消耗资源为代价在物理硬件和运行其上的应用软件之间建立抽象层。虚拟机管理程序和每一个虚拟机中运行的内核都要占用一定的硬件系统资源,而这部分资源将不能够被宿主系统的应用程序使用。而容器仅仅是一个能够与Linux内核直接通信的进程,因此它可以使用更多的资源,直到系统资源耗尽或者配额达到上限为止。
Docker不是什么?
Docker可以解决很多问题,这些问题是其他类型的传统工具专门解决的。那么Docker在功能上的广度就意味着它在特定的功能上缺乏深度。例如,一些组织认为,使用Docker之后可以完全摈弃配置管理工具,但Docker真正强大之处在于,它虽然能够取代某些传统的工具,但通常与它们是兼容的,甚至与它们结合使用还能增强自身的功能。下面将列举一些Docker还未能完全取代的工具,如果与它们结合起来使用,往往能取得更好的效果。
本节摘自: https://c.m.163.com/news/a/CR3FEG520511BOVJ.html?spss=newsapp&spsw=1