容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。
本篇教程持续编写了2个星期左右,只是为了大家更好地了解、理解和消化这个技术,能够搭上这波车。
你可以关注我们的公众号“magiccodes”给我们留言,也可以加入我们的QQ群(85318032)一起讨论,我们希望能够多多交流,多多分享。
如果觉得不错,请多多点赞或者请我们喝杯咖啡,你们的支持是我们前进的最大动力!
目
录
目
录
Docker的主要应用场景
简化配置
虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
简单的来说,容器镜像打包完成后,它就是个独立的个体了,丢到哪里都能跑,而无需针对各个平台去独立配置。
代码流水线(Code Pipeline)管理
前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。
提高开发效率
不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。
使用Docker非常简单的就能够实现这两点,而且哪怕是开发环境的机器配置一般的情况下搭建多个生成服务应用。一台一般配置服务器或开发机也能轻松的跑起多个Docker应用,而无需额外增加机器配置。因为Docker有个非常NB的特性,拥有虚拟化的特性,而几乎没有额外的开销。
隔离应用
很多情况下,我们需要在一台服务器上运行多个不同的应用,比如上面提到的提高开发效率的场景等。
我们经常需要考虑三点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(比如微服务架构),三是还需要考虑应用之间的兼容性。而对于Docker来说,支持起来就非常简单了。同一台机器,我可以同时运行N个Docker web应用,托管到不同的Web服务器(Kestrel、Ngnix、Tomcat),而无需担心他们会搞起3Q大战,也无需担心我的开发机器会跑不起来。
整合服务器
正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。
这就意味着资源得到更有效的利用——可以做更多衣服,而且还没有边角料,成本还更低。
调试能力
Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。
多租户环境
在多租户的应用中,它可以避免关键应用的重写。比如IoT(物联网)的应用中,开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。
使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。
就如同我们现在写了一个不支持多租户的业务程序,而实际的业务中经常会出现需要支持多租户或者有新客户需要使用的场景,这是我们通常的简单做法是——部署一套新的代码。当站点达到一定量的适合,要么重写程序,要么维护人员Game over。
快速部署
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。
你可以在服务器中或云端创建销毁资源而无需担心重新启动带来的开销。通常情况下,服务器的资源利用率只有30%,而通过使用Docker并进行有效的资源分配可以提高资源的利用率。
市场实际反馈和调查
我们来看一份2016年用户调查结果。
Docker为软件供应链提供了应用程序开发的敏捷性,可控性和可移值性
- 用户如何使用 Docker?
90% 的用户使用 Docker 进行应用开发
65% 的用户使用 Docker 进行敏捷开发
58% 的用户将 Docker 用于生产
48% 的用户使用 Docker 控制应用环境
41% 的用户使用 Docker 实现应用的可移植性
- Docker 的业务覆盖:
78%:网页应用
75%:网页 API
70%:应用服务端
42%:传统数据库
27%:分布式数据库
13%:大数据
Docker 带来的敏捷性(响应速度和灵活性)吸引了越来越多的开发者。他们不仅能知道容器内部到底跑了什么,也能进一步理解 Docker 如何加速了软件开发进程。另外,41% 的用户表示应用的可移植性是他们决定使用 Docker 的关键因素。
通过 DevOps 的实践,Docker 正在给应用交付带来很多可以量化的提升
如图所示:
93% 的 Docker 用户已经在开发过程中获得了益处
85% 的 Docker 用户已经在运维过程中获得了益处
57% 的 Docker 用户见证了运维环境管理的提升
45% 的 Docker 用户已经提高了软件发布的频率
大约一半的受访者表示已经采用了持续集成(CI)和 DevOps,并且希望把这些实战经验应用到生产环境的持续交付中。剩下的受访者则准备尽快跟上步伐,尽快尝试 DevOps 和持续集成。另外,据调查显示,用户使用 Docker 发布应用的频率平均提升了 13 倍。
Docker 对混合云策略至关重要,它使得用户可以根据需求自由选择私有和公有环境
如图所示:
80% 的用户表示 Docker 已经是云策略的一部分
60% 的用户则正在计划使用 Docker 将业务迁移到云端。
41% 的用户希望实现跨环境的应用移植
35+% 的用户希望避免被云供应商绑定
通过容器来交付的应用可以在任何基础设施之上灵活迁移,同时这些基础设施又可以提供不同层次的应用管理方式,而当业务在多个服务供应商之中寻求混合云或全云模式时,又可以完美避免被平台捆绑。
对于按需部署或部署到云环境,Docker 提供了独一无二的选择。 80% 的用户表示 Docker 已经成为他们云策略的一部分,超过 35% 的用户使用 Docker 来避免被云服务供应商绑定。
Docker 实现了微服务架构,也让遗留的单体应用转变为现代应用
如图所示:
65% 的组织面对遗留应用这一难题
59% 的组织受到遗留应用和基础设施僵化的影响
44% 的组织正在使用微服务架构
39% 的组织让遗留应用焕发新生
Docker 使得微服务架构的快速发展成为可能,同时它也将传统的业务迁移到容器环境中,以此使得应用程序变得更加可移植。使用微服务架构进行交付是 Docker 的关键优势!
Docker改变了什么?
综上所述,Docker到底改变了什么?笔者是这么理解的:
Docker改变了云服务,使云服务的共融共通的理想逐步成为了可能。并且Docker 已经是云策略的一部分,许多开发者正在计划使用 Docker 将业务迁移到云端。另外,为了避免被云服务供应商绑定,Docker成为很多开发者的首选。
Docker改变了产品交付,为产品的整个生命周期提供了一整套的解决方案和流程。
Docker改变了开发方式,提供了简化的环境配置、封装的运行环境以及统一的环境。并且提供了快速部署的方式。
Docker改变了测试,多版本测试变得极为方便,快速构建测试环境也变得更加简单并且无需开发人员干预或者搭建。
Docker改变了运维,环境的一致性让运维变得更加简单,同时热更新的支持让运维不再需要半夜加班部署更新,更新可以随时进行。当出现重大问题时,还能快速回滚到指定版本。
Docker改变了架构,自动化扩容支持让架构变得更加简单,分布式系统也更加易于搭建和支持。同时遗留的单体应用也很易于转变为现代应用。
总之,在某种程度上,Docker改变了产品开发中的一些游戏规则。虽然Docker是一项技术,但是它也带来了新的思维,新的流程和工作方法,Docker在推动行业的发展,Docker已经在改变世界,并且在逐步的变为事实……
上期内容
Docker最全教程——从理论到实战(一)
长按识别二维码,了解更多精彩内容
如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
QQ群:
编程交流群<85318032>
产品交流群<897857351>