什么是Docker?它是如何解决业务难题的?

Docker是一个开发人员容纳和轻松发布软件的平台。它有助于消除配置环境以运行软件的开销,实质上是将环境与代码一起运送。

  我们通常使用装运容器类比来解释。货运公司负责将集装箱从A运输到B,他们不关心您放入集装箱的货物,但他们确实关心您是否以正确的格式将货物交给他们。

  将您的开发人员视为将软件打包到容器的创造者。他们构建的内容可能会因特殊库、优化或配置而变得复杂。一旦他们准备好运送的软件,就该把它交给一家知道如何从A到B的货运公司。幸运的是,现在它采用标准化格式,DevOps可以轻松地将其转移到生产中。他们甚至可以自动化这个过程,以便将来更容易。

  在本文中,我们将举例说明Docker的业务用例,概述如何构建Docker化的微服务,使用Amazon的弹性容器服务(ECS),并概述使用Docker能带来的的商业利益。

  Docker和微服务架构的用例

  假设您的Web应用程序有一个资源密集型的用户注册页面。在每月月初新用户会蜂拥而至。为了处理负载,您的服务器基础结构正在几个大型负载平衡服务器上运行(如下所示)。不幸的是,这种处理规模一年中只有12天。这意味着您的公司将为大部分时间都没有使用的资源付费。

  

  现在,假如一个关键功能在注册过程中发生了变化:出于法律原因,用户需要被置于二级报告系统中。目前,您的注册代码隐藏在应用程序的剩余部分中,将此修复程序移至生产意味着整个系统的完全重新部署。开发人员和基础设施将在本周末加班工作,以执行这一更新。最糟糕的是,这仅仅是一个相对较小的变化!

  在Docker化的世界中,这是小case。注册过程可以与主应用程序分离,并使用滚动更新推送到生产环境。你可以星期一做,甚至不需要把网站关闭。无人不为之喝彩,因为这意味着软件可以快速安全地投入生产。

  为了达到这一点,开发人员可以通过构建REST服务来启动解耦注册过程。一旦Web前端和注册服务的代码分离,它们就可以进行Docker化。开发人员可以将所有代码、库和配置打包到DockerImages中并移交给DevOps。DockerSwarm,AmazonECS或RedHat的OpenShift等集群工具将使DevOps能够托管Docker容器。他们可以用这些系统在需求高时扩大规模,在需求低时缩小规模。以经济有效的方式利用资源又反过来解决了我们的第一个问题。

  使用Docker和微服务架构解决可扩展性和解耦代码

  让我们用我们的示例项目来说明这个容器化的基础设施。此代码包含Web前端和注册后端。您可能会注意到这些被分成两个单独的代码仓库。没关系,在面向服务的体系结构中,这些服务相互了解的越少越好。

  在下图中,我们可以看到生活在AmazonECS群集内的Web和注册容器。用户注册请求将到达Web前端,然后可以向任何注册服务询问进行响应。

  

  让我们开始克隆示例项目。

  确保安装了Docker和Gradle,以便我们可以构建项目和图像。

  

  您可以运行以下命令来查看Docker引擎中的图像。

  

  请注意,我们现在有两个图像加上它们构建的基本图像。只是为了好玩,让我们启动网络应用程序并访问。获取DockerWeb映像并将其作为在本地虚拟机上运行的容器启动。

  

  我们让托管机器访问8080端口上的容器。使用以下命令,我们现在可以看到它正在运行。

  

  使用亚马逊的弹性容器服务

  要真正了解这些Docker图像的优势,我们需要一个可扩展的基础架构来运行它们。出于本演示的目的,AmazonECS会做得很好。要将图像输出到Amazon云,您需要安装AWS命令行界面。

  亚马逊提供了一个很棒的向导来帮助简化这个过程。在其中,您将执行以下操作

  创建一个Docker存储库来托管您的图像

  将图像上传到云端(见下文)

  创建运行映像的EC2实例集群

  将您的图像分组到服务Service中

  要将Docker图像推送到云端,您需要先登录。

  

  上面的命令生成一个“dockerlogin”,它将Docker主机指向远程仓库。这将授予对每个AWS账户附带的默认AWS注册表的访问权限。

  

  请注意,上述注册表可以包含许多存储库。存储库包含图像的版本。对于此项目,您将需要两个存储库。一个用于我们的Web图像,一个用于注册图像。

  为了将图像发送到远程仓库,需要对其进行适当标记。像这样使用您的AWS仓库的URL。

  

  现在让我们将它们推送到AWS。

  

  使用Docker容器扩展ECS

  在上一节中,您使用向导创建了一个EC2实例群集。我们创建了两个代码仓库来保存我们的图像并将其上传到那里。我们来看一下。

  

  您还可以看到我的群集在其已完成状态下有3台服务器,其上运行4个Docker镜像(参见上图)。

  

  上面还列出了我们从群集配置的服务。服务允许您对Docker容器进行分组并指定选项,例如您想要多少个选项,以及如何平衡它们之间的流量。

  

  如果您正确配置了LoadBalancer,则可以在浏览器中访问它。请求将分发到群集中的活动容器数。

  

  这是我们建立的注册服务的手动请求。回想一下,该服务在端口8081上运行,以免与端口8080上的注册服务冲突。LoadBalancer负责将所有这些隐藏起来。我们可以通过端口80从注册服务获得结果。

  

  Docker的未来

  这个快速概述仅涉及Docker和微服务架构如何用于为您的团队和产品进行重大改进。以下是采用此架构时可以看到的一些明显的好处。

  1.降低成本

  2.加快发展

  3.更快,更一致的部署

  4.松散耦合的代码和团队

  5.更易于维护和扩展

  6.更可靠的基础设施

  如果您希望在更大的环境中利用Docker,那么我们建议您考虑使用SpringNetflix和OpenShift等解决方案。这些解决方案适用于更大的Docker生态系统,可以使部署和开发更加轻松。

        本文转载自数据星河平台:https://www.bdgstore.com.cn/portal/article/index/id/179.html

原文地址:http://blog.51cto.com/13957185/2315810

时间: 2024-10-12 20:11:34

什么是Docker?它是如何解决业务难题的?的相关文章

大数据数据分析-数据分析师八大能力培养,解决业务问题和管理数据开发

Python.R.Hadoop.Java.Spark.C++.SQL.Linux.Hive等数据科学工具和编程语言是企业对数据人才的一致要求,一些如统计分析.数据结构以及决策树理论概念和算法也在企业对数据人才的要求之列,各位想找大数据相关工作,可留点心呐!好好学理论,认真练技术,高薪不再远.R和Python是数据科学从业者两把利剑, 数据分析师八大能力培养,解决业务问题和管理数据开发项目数据分析师八大能力培养,解决业务问题和管理数据开发项目数据分析师八大能力培养,解决业务问题和管理数据开发项目数

软件开发心得体会--万一我们遇到不可解决的难题

      进入软件行业已经快十年了,从最初的懵懂的青年我已经熬成了近乎一个大叔.在将近十年的工作过程中,遇到过无数的问题,而在每一次成功跨越每个问题时我都会有一种深深的征服感与幸福感藏在心里,因为我知道在这个行业我又前进了一步,也因为现实中的高人无处不在,所以也只有把征服每个问题过后的喜悦藏在心里.在经历每个问题被征服的背后,心态是无比重要的,超过了一切,甚至技术. 1. 确认问题来源 如果遇到一个难以解决的问题,一定要先从自己的代码入手,逐个字母去检查且每一个细节都不要放过,有时自己起的变量

if/while/for 、解决数学难题 、 Python实例

if/while/for enumerate() 方法的语法:enumerate(sequence, [start=0])sequence -- 一个序列.迭代器或其他支持迭代对象.start -- 下标起始位置.列出索引 对应 值 If条件判断 if 判断条件: 执行语句 elif 判断条件: 执行语句 else: 执行语句 While 判断条件: 执行语句 break 跳出循环 continue 跳到下一次循环 解决数学难题 乘法口诀九宫格ABCD乘9=DCBA,A=? B=? C=? D=

docker实战系列之docker 端口映射错误解决方法

错误: Error response from daemon: Cannot start container web: iptables failed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 32797 -j DNAT --to-destination 172.17.0.30:5000 ! -i docker0: iptables: No chain/target/match by that name. 解决办法:重建docker0网络恢

轻流五大「业务场景」解决方案,助您解决企业管理难题

亲爱的轻流用户们,今天给大家带来一份轻流的业务场景解决方案大合集,看看在进销存管理.客户关系管理.工程项目管理.售后管理.外包服务管理等场景下,轻流是如何解决令您头疼的业务管理难题的吧! 一:轻流 × 进销存管理 轻流进销存管理方案,可以通过完全的自定义流程实现采购.库存.项目.客户.内部管理的流程化.数据化及智能化,轻松解决了传统标准化的ERP软件难以适用于每家公司实际业务场景的问题. 实时的在线Excel,权限更明晰的进销存 通过业务流程自动化实现库存实时汇总,每一笔消耗均可溯源,从根源节省

docker端口映射失败解决方法

报错: Error response from daemon: driver failed programming external connectivity on endpoint prickly_turing (081405caf9fe991605f89d0ada69f3cbbd54e0526b9a85fa9b8ea6619e5161ee): iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 888

【Docker】Windows下docker环境搭建及解决使用非官方终端时的连接问题

https://www.cnblogs.com/Detector/p/9354539.html 背景 时常有容器方面的需求,经常构建调试导致测试环境有些混乱,所以想在本地构建一套环境,镜像调试稳定后再放到测试环境中. Windows Docker 安装 安装docker toolbox 博主的电脑是win7,安装的时候使用的是阿里云的docker toolbox镜像. 这里有必要介绍一下docker toolbox,它 是一个工具集,它主要包含以下内容: Docker CLI 客户端,用来运行d

docker启动报错解决及分析(Cannot create container for service *******: cannot mount volume over existing file, file exists /var/lib/docker/overlay2/)

现象: Cannot create container for service *******: cannot mount volume over existing file, file exists /var/lib/docker/overlay2/************/merged/etc/php/7.0/fpm/php.ini 之前的也出现过这种情况,没记录,时间长了也忘了怎么解决了 记录一下,传播一下 我在用docker-compose启动的时候,报这个错 说直白了,原因就在于我们启

修改 docker image 安装目录 (解决加载大image时报错:"no space left on device" )

问题原因:出现此问题一般是 docker 根目录空间不足导致 解决方法:重新指定docker image 安装目录,当然确保你新指定的目录有足够的空间. 方法步骤: ##查看 docker 的根目录 [[email protected] k8s]# docker info | grep -i "docker root dir" WARNING: You're not using the default seccomp profile Docker Root Dir: /var/lib/