Docker最全教程——从理论到实战(二)

容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。

本篇教程持续编写了2个星期左右,只是为了大家更好地了解、理解和消化这个技术,能够搭上这波车。

你可以关注我们的公众号“magiccodes”给我们留言,也可以加入我们的QQ群(85318032)一起讨论,我们希望能够多多交流,多多分享。

如果觉得不错,请多多点赞或者请我们喝杯咖啡,你们的支持是我们前进的最大动力!


640?wx_fmt=png

640?wx_fmt=png


Docker的主要应用场景


简化配置

虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。


简单的来说,容器镜像打包完成后,它就是个独立的个体了,丢到哪里都能跑,而无需针对各个平台去独立配置。

640?wx_fmt=jpeg


代码流水线(Code Pipeline)管理

前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

640?wx_fmt=png


提高开发效率

不同的开发环境中,我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境,二是我们想快速搭建开发环境。


使用Docker非常简单的就能够实现这两点,而且哪怕是开发环境的机器配置一般的情况下搭建多个生成服务应用。一台一般配置服务器或开发机也能轻松的跑起多个Docker应用,而无需额外增加机器配置。因为Docker有个非常NB的特性,拥有虚拟化的特性,而几乎没有额外的开销。

640?wx_fmt=png


隔离应用

很多情况下,我们需要在一台服务器上运行多个不同的应用,比如上面提到的提高开发效率的场景等。


我们经常需要考虑三点,一是因为要降低成本而进行服务器整合,二是将一个整体式的应用拆分成松耦合的单个服务(比如微服务架构),三是还需要考虑应用之间的兼容性。而对于Docker来说,支持起来就非常简单了。同一台机器,我可以同时运行N个Docker web应用,托管到不同的Web服务器(Kestrel、Ngnix、Tomcat),而无需担心他们会搞起3Q大战,也无需担心我的开发机器会跑不起来。

640?wx_fmt=jpeg


整合服务器

正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。


这就意味着资源得到更有效的利用——可以做更多衣服,而且还没有边角料,成本还更低。

640?wx_fmt=jpeg


调试能力

Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。

640?wx_fmt=jpeg


多租户环境

在多租户的应用中,它可以避免关键应用的重写。比如IoT(物联网)的应用中,开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。


使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。


就如同我们现在写了一个不支持多租户的业务程序,而实际的业务中经常会出现需要支持多租户或者有新客户需要使用的场景,这是我们通常的简单做法是——部署一套新的代码。当站点达到一定量的适合,要么重写程序,要么维护人员Game over。


快速部署

在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。


你可以在服务器中或云端创建销毁资源而无需担心重新启动带来的开销。通常情况下,服务器的资源利用率只有30%,而通过使用Docker并进行有效的资源分配可以提高资源的利用率。

640?wx_fmt=png


市场实际反馈和调查

我们来看一份2016年用户调查结果。

Docker为软件供应链提供了应用程序开发的敏捷性,可控性和可移值性

640?wx_fmt=jpeg

- 用户如何使用 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 正在给应用交付带来很多可以量化的提升

640?wx_fmt=jpeg

如图所示:

  • 93% 的 Docker 用户已经在开发过程中获得了益处

  • 85% 的 Docker 用户已经在运维过程中获得了益处

  • 57% 的 Docker 用户见证了运维环境管理的提升

  • 45% 的 Docker 用户已经提高了软件发布的频率

大约一半的受访者表示已经采用了持续集成(CI)和 DevOps,并且希望把这些实战经验应用到生产环境的持续交付中。剩下的受访者则准备尽快跟上步伐,尽快尝试 DevOps 和持续集成。另外,据调查显示,用户使用 Docker 发布应用的频率平均提升了 13 倍。


Docker 对混合云策略至关重要,它使得用户可以根据需求自由选择私有和公有环境

640?wx_fmt=jpeg

如图所示:

  • 80% 的用户表示 Docker 已经是云策略的一部分

  • 60% 的用户则正在计划使用 Docker 将业务迁移到云端。

  • 41% 的用户希望实现跨环境的应用移植

  • 35+% 的用户希望避免被云供应商绑定

通过容器来交付的应用可以在任何基础设施之上灵活迁移,同时这些基础设施又可以提供不同层次的应用管理方式,而当业务在多个服务供应商之中寻求混合云或全云模式时,又可以完美避免被平台捆绑。


对于按需部署或部署到云环境,Docker 提供了独一无二的选择。 80% 的用户表示 Docker 已经成为他们云策略的一部分,超过 35% 的用户使用 Docker 来避免被云服务供应商绑定。


Docker 实现了微服务架构,也让遗留的单体应用转变为现代应用

640?wx_fmt=jpeg

如图所示:

  • 65% 的组织面对遗留应用这一难题

  • 59% 的组织受到遗留应用和基础设施僵化的影响

  • 44% 的组织正在使用微服务架构

  • 39% 的组织让遗留应用焕发新生

Docker 使得微服务架构的快速发展成为可能,同时它也将传统的业务迁移到容器环境中,以此使得应用程序变得更加可移植。使用微服务架构进行交付是 Docker 的关键优势!


Docker改变了什么?

综上所述,Docker到底改变了什么?笔者是这么理解的:

  • Docker改变了云服务,使云服务的共融共通的理想逐步成为了可能。并且Docker 已经是云策略的一部分,许多开发者正在计划使用 Docker 将业务迁移到云端。另外,为了避免被云服务供应商绑定,Docker成为很多开发者的首选。

  • Docker改变了产品交付,为产品的整个生命周期提供了一整套的解决方案和流程。

  • Docker改变了开发方式,提供了简化的环境配置、封装的运行环境以及统一的环境。并且提供了快速部署的方式。

  • Docker改变了测试,多版本测试变得极为方便,快速构建测试环境也变得更加简单并且无需开发人员干预或者搭建。

  • Docker改变了运维,环境的一致性让运维变得更加简单,同时热更新的支持让运维不再需要半夜加班部署更新,更新可以随时进行。当出现重大问题时,还能快速回滚到指定版本。

  • Docker改变了架构,自动化扩容支持让架构变得更加简单,分布式系统也更加易于搭建和支持。同时遗留的单体应用也很易于转变为现代应用。

总之,在某种程度上,Docker改变了产品开发中的一些游戏规则。虽然Docker是一项技术,但是它也带来了新的思维,新的流程和工作方法,Docker在推动行业的发展,Docker已经在改变世界,并且在逐步的变为事实……

640?wx_fmt=jpeg

上期内容

Docker最全教程——从理论到实战(一)


长按识别二维码,了解更多精彩内容

640?wx_fmt=jpeg

如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


QQ群:

编程交流群<85318032> 

产品交流群<897857351> 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图论模板详解:存图

图论千万条&#xff0c;存图第一条 1.邻接矩阵 用一个矩阵x[i][j]表示i到j的路径 优点&#xff1a;代码方便&#xff0c;易于去重 缺点&#xff1a;空间复杂度爆炸 优化&#xff1a;二维vector&#xff08;但是会变慢&#xff09; 2.链式前向星 &#xff08;抄资料毫不掩饰&a…

eShopOnContainers 知多少[4]:Catalog microservice

引言Catalog microservice&#xff08;目录微服务&#xff09;维护着所有产品信息&#xff0c;包括库存、价格。所以该微服务的核心业务为&#xff1a;产品信息的维护库存的更新价格的维护架构模式如上图所示&#xff0c;本微服务采用简单的数据驱动的CRUD微服务架构&#xff0…

2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or(异或+差分)

I-Kuriyama Mirai and Exclusive Or KeHe题解 diabolusexnihil题解 不过diabolusexnihil大佬的题解有一部分写错了应该是&#xff1a;每次分裂标记bl,ib_{l,i}bl,i​需要给数组[l2i−1,l2i)⊕2i−1[l2^{i-1},l2^i)\oplus2^{i-1}[l2i−1,l2i)⊕2i−1然后标记分裂成bl,i−1,bl2…

P5748-集合划分计数【EGF,多项式exp】

正题 题目链接:https://www.luogu.com.cn/problem/P5748 题目大意 求将nnn的排列分成若干个无序非空集合的方案。 输出答案对998244353998244353998244353取模。 1≤n≤105,1≤T≤10001\leq n\leq 10^5,1\leq T\leq 10001≤n≤105,1≤T≤1000 解题思路 就是求划分数 分成ii…

ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1

一、前言最近一两个星期&#xff0c;加班&#xff0c;然后回去后弄自己的博客&#xff0c;把自己的电脑从 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10&#xff0c;原本计划的学习 Vue 中生命周期的相关知识目前也没有任何的进展&#xff0c;嗯&#xff0c;罪过罪过。看了…

2021牛客暑期多校训练营4 B-Sample Game(概率DP)

B-Sample Game ding_ning123大佬题解 注&#xff1a;上述题解图片来自ding_ning123大佬题解 Code #include<bits/stdc.h> using namespace std; using lllong long; template <class Tint> T rd() {T res0;T fg1;char chgetchar();while(!isdigit(ch)) {if(ch-…

OrchardCore 如何实现模块化( Modular )和 Multi-Tenancy

一、概述通常我们会在 Startup 类通过 void ConfigureServices(IServiceCollection services) 配置应用的服务。常见的形如 AddXXX 的方法&#xff0c;实际上调用的都是 IServiceCollection 或直接说是 ServiceCollection 的 AddSingleton 等方法。调用ApplicationBuilder 的 R…

牛客题霸 [ 最长回文子串] C++题解/答案

牛客题霸 [ 最长回文子串] C题解/答案 题目描述 对于一个字符串&#xff0c;请设计一个高效算法&#xff0c;计算其中最长回文子串的长度。 给定字符串A以及它的长度n&#xff0c;请返回最长回文子串的长度。 题解&#xff1a; 两个方法&#xff1a; 一个是经典暴力&#…

【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

上篇文章我介绍了如何在网关上实现客户端自定义限流功能&#xff0c;基本完成了关于网关的一些自定义扩展需求&#xff0c;后面几篇将介绍基于IdentityServer4&#xff08;后面简称Ids4&#xff09;的认证相关知识&#xff0c;在具体介绍ids4实现我们统一认证的相关功能前&…

T183637-变异距离(2021 CoE III C)【单调栈】

正题 题目链接:https://www.luogu.com.cn/problem/T183637 题目大意 给出nnn个二元组(xi,yi)(x_i,y_i)(xi​,yi​)&#xff0c;求最大的 ∣xi−xj∣min{∣yi∣,∣yj∣}|x_i-x_j|\times min\{|y_i|,|y_j|\}∣xi​−xj​∣min{∣yi​∣,∣yj​∣} 1≤n≤2106,−106≤xi≤106,−…

dfs剪枝:洛谷P2809 hzwer爱折纸

传送门 解析 dfs暴力枚举即可 这题的重点是如何剪枝 不难发现&#xff0c;随着不断处理&#xff0c;纸条只会越来越短&#xff0c;且所有数字总加和不变 我一开始想到了2个条件&#xff1a; 1.当前长度比理想纸条小&#xff0c;return&#xff1b; 2.总加和与理想纸条不等&a…

[译]聊聊C#中的泛型的使用

写在前面今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章&#xff0c;因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译&#xff0c;当然在翻译的过程中发现了一些问题&#xff0c;因此也进行了纠正&#xff0c;当然&#xff0c;原文的地址我放在最…

P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】

前言 话说在LojLojLoj下了个数据发现这题的名字叫fgofgofgo 正题 题目链接:https://www.luogu.com.cn/problem/P5405 题目大意 nnn张卡的权值为1/2/31/2/31/2/3的概率权重分别是px,1/2/3p_{x,1/2/3}px,1/2/3​&#xff0c;然后按照权值每次获得一张未获得的卡&#xff0c;然后…

模板:线段树

文章目录引言思想模板建树单点修改 / 查询区间修改/查询总结练习引言 有一类题目:要求在区间上维护信息&#xff0c;比如带修改区间求和问题。考虑到枚举求和肯定会超时&#xff0c;我们可以通过一些数据结构来维护信息&#xff0c;例如线段树。 它功能强大&#xff0c;支持区…

Docker最全教程——从理论到实战(三)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右&#xff0c;只是为了大家更好地了解、理解和消化这个技术&#xff0c;能够搭上这波车。你可以关注我们的公众号“magiccode…

高并发、低延迟之C#玩转CPU高速缓存(附示例)

写在前面好久没有写博客了&#xff0c;一直在不断地探索响应式DDD&#xff0c;又get到了很多新知识&#xff0c;解惑了很多老问题&#xff0c;最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture&#xff0c;里面有一个术语Mechanical Sympathy&#xff0c;姑且…

RMQ问题:与众不同(st表的高端应用)

解析 预处理 用pre[i]表示以i结尾的最长完美序列起始点&#xff0c;用last[i]表示数字i最后出现的位置 那么可以得到递推式&#xff1a; pre[i]max(pre[i-1],last[x[i]]1);也就是说这个pre要么是受前一位一样的限制&#xff0c;要么是受自己的限制 用f[i]表示以i结尾的最长完…

Docker最全教程——从理论到实战(四)

容器是应用走向云端之后必然的发展趋势&#xff0c;因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。本篇教程持续编写了2个星期左右并且一直在完善、补充具体的细节和实践&#xff0c;预计全部完成需要1到2个月的时间。由于编写的过程中极其费时&#xff0c…

动态规划:openjudge 2.6-3532 最大上升子序列和 解题心得

传送门 题目描述 一个数的序列bi&#xff0c;当b1 < b2 < … < bS的时候&#xff0c;我们称这个序列是上升的。对于给定的一个序列(a1, a2, …,aN)&#xff0c;我们可以得到一些上升的子序列(ai1, ai2, …, aiK)&#xff0c;这里1 < i1 < i2 < … < iK…

边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)

写在前面本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作&#xff0c;本文主要讲解如何开启Docker Remote API&#xff0c;开启Remote API后的权限安全问题。配置Jenkins构建项目&#xff0c;并在云服务器上构建成功。废话不多说&#xff0c;我们一…