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

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

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

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

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

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

Docker和微服务架构的用例

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

501.png

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

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

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

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

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

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

502.png

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

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

屏幕快照 2018-10-16 上午11.52.00.png

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

屏幕快照 2018-10-16 上午11.52.10.png

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

屏幕快照 2018-10-16 上午11.52.26.png

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

屏幕快照 2018-10-16 上午11.52.43.png

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

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

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

 

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

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

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

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

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

屏幕快照 2018-10-16 上午11.52.53.png

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

屏幕快照 2018-10-16 上午11.53.02.png

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

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

屏幕快照 2018-10-16 上午11.53.25.png

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

屏幕快照 2018-10-16 上午11.53.44.png

使用Docker容器扩展ECS

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

503.png

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

504.png

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

505.png

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

506.png

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

507.png

Docker的未来

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

1. 降低成本

2. 加快发展

3. 更快,更一致的部署

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

5. 更易于维护和扩展

6. 更可靠的基础设施 

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

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

相关文章
|
23天前
|
Serverless 应用服务中间件 开发工具
Serverless 应用引擎产品使用之阿里函数计算中,在本地进行调试,并且需要用到Docker如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
23天前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用之在阿里云函数计算中使用Docker进行部署函数如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
23天前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI 操作报错合集之在本地构建easyrec docker镜像时遇到了无法连接docker服务如何解决
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
23天前
|
Java 测试技术 持续交付
云效产品使用常见问题之通过流水线构建的java代码,在docker文件里拿到失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
23天前
|
弹性计算 Serverless 数据库
ECS安装问题之docker安装如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
23天前
|
Java 关系型数据库 数据库
Seata常见问题之docker运行报错如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
214 0
|
23天前
|
关系型数据库 分布式数据库 PolarDB
PolarDB常见问题之安装gms时出现docker如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
23天前
|
PyTorch 算法框架/工具 Docker
ModelScope问题之odelScope使用了官方的docker的cpu镜像如何解决
ModelScope镜像是指用于在ModelScope平台上创建和管理的容器镜像,这些镜像包含用于模型训练和推理的环境和依赖;本合集将说明如何使用ModelScope镜像以及管理镜像的技巧和注意事项。
|
23天前
|
Java 测试技术 Maven
云效问题之构建docker镜像从容器仓库拉取镜像报错如何解决
云效镜像是指存储在阿里云效服务中的容器镜像,它们可以用于持续集成和持续部署(CI/CD)流程中;本合集将介绍如何在云效平台上管理和使用镜像资源,以及常见的镜像问题和解决办法。
|
Docker 容器
如何解决Docker容器和宿主机时间同步问题
在使用了Docker以后,大家可能遇到的一个问题就是Docker容器的时间和宿主机时间不同步。造成这个问题的主要原因是宿主机设置了时区,而Docker容器并且设置,导致两者相差8小时。 接下来,我们通过在在宿主机和容器里分别执行date命令来看下实际的情况。 在宿主机执行date命令的结果:
33371 0