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…

2021牛客暑期多校训练营3 C-Minimum grid(二分图)

C-Minimum grid 如果第iii行最大值是aaa&#xff0c;第jjj列最大值是ccc&#xff0c;我们需要第iii行单独有一个格子权值是aaa&#xff0c;而且第jjj列单独有一个格子权值是bbb&#xff0c;不过如果第iii行最大值和第jjj列最大值是都是aaa&#xff0c;那么我们只需让第iii行第…

牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2&#xff0c;请找到 o1 和 o2 的最近公共祖先节点。 题解&#xff1a; 我们想想最近公共祖先节点满足什么要求&#xff1f;&#xff1f; o1和o2分别位…

P4249-[WC2007]剪刀石头布【费用流】

正题 题目链接:https://www.luogu.com.cn/problem/P4249 题目大意 nnn个点的竞赛图有的边已经确定了方向&#xff0c;要求给剩下的边确定一个方向使得图的三元环最多。 1≤n≤1001\leq n\leq 1001≤n≤100 解题思路 竞赛图如果三个点不能构成三元环有一个性质就是恰好有一个点…

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…

最短路模板:dij,spfa与floyd

图论技能get&#xff01; 一个超强大的建图网站 最短路问题 1.dij算法 用于单源最短路 仅适用于没有负边权的情况 初始化dis数组为inf&#xff0c;dis【起点】0&#xff1b; tool&#xff1a;priority-queue&#xff08;按dis升序&#xff09; 先把起点放进队列 每次取出排头…

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…

牛客题霸 [ 岛屿数量] C++题解/答案

牛客题霸 [ 岛屿数量] C题解/答案 题目描述 给一个01矩阵&#xff0c;1代表是陆地&#xff0c;0代表海洋&#xff0c; 如果两个1相邻&#xff0c;那么这两个1属于同一个岛。我们只考虑上下左右为相邻。 岛屿: 相邻陆地可以组成一个岛屿&#xff08;相邻:上下左右&#xff09;…

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;罪过罪过。看了…

图论:dij算法优化:双端队列及详细证明

dij原来的写法请移步这里 首先&#xff0c;让我们举一个洛谷中的情境 这题中&#xff0c;我们可以二分mid答案&#xff0c;小于等于mid的边权是0&#xff0c;大于的是1&#xff0c;再计算最短路是否<k&#xff1b; 那么在这样边权只有0和1的时候&#xff0c;dij算法是否可以…

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-…

P6775-[NOI2020]制作菜品【贪心,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P6775 题目大意 nnn种原材料&#xff0c;第iii个有did_idi​个&#xff0c;mmm道菜品都需要kkk个原料而且每道菜最多只能用两种材料。 要求构造方案使得满足条件。 1≤n≤500,n−2≤m≤5000,1≤k≤5000,(∑i1ndi)mk1\leq n\l…

牛客题霸 [螺旋矩阵] C++题解/答案

牛客题霸 [螺旋矩阵] C题解/答案 题目描述 给定一个m x n大小的矩阵&#xff08;m行&#xff0c;n列&#xff09;&#xff0c;按螺旋的顺序返回矩阵中的所有元素。 题解&#xff1a; 其实就是模拟过程&#xff0c;先往左走&#xff0c;走到头向下走&#xff0c;到头后向左走…

递推:Ybtoj: D.4 序列个数

传送门 这题需要使用数形结合的思想 用一个矩形表示序列&#xff0c;若(i&#xff0c;j)点为1&#xff0c;表示第i个数是j 比如&#xff1a; 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 表示的序列是&#xff1a;41235 显然每行和每列都只能有一个1 回到本题&#xf…

codeforces280 C. Game on Tree(期望)

C. Game on Tree 单独考虑每个点对答案的贡献。 删除一个点的方案是删除它或者它的祖先&#xff0c;那么对答案的贡献是1depu\frac 1 {\text{dep}_u}depu​1​ #include<cstdio> #include<vector>int n; std::vector<int> g[100005]; int dep[100005]; vo…

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

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

P2350-[HAOI2012]外星人【线性筛】

正题 题目链接:https://www.luogu.com.cn/problem/P2350 题目大意 给出NNN质因数分解之后的结果&#xff0c;求每次Nφ(N)N\varphi(N)Nφ(N)&#xff0c;多少次后N1N1N1。 N∏i1mpiqi,1≤m≤2000,1≤pi≤105,1≤qi≤109N\prod_{i1}^mp_i^{q_i},1\leq m\leq 2000,1\leq p_i\le…

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

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

强连通分量:洛谷P3387 模板:缩点

传送门 顾名思义&#xff0c;模板awa #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <iostream> #include <string> #include <queue> #include <vector> #define ll long long usi…