技术原理

什么是码头集装箱?–使用Docker容器化应用程序

成为一个合格的专业

,好吧,我希望你读过我以前在Docker上的博客,在那里我介绍了Docker的基本知识。在这里,在这个Docker容器博客中,我将讨论什么是Docker容器以及它是如何工作的。我们主要关注Docker的实际操作和用例。

我列出了Docker容器博客的主题:

为什么我们需要Docker容器?Docker容器是如何工作的?Docker容器的用例为什么我们需要Docker容器?”

“我仍然记得很清楚,我在做一个项目。在那个项目中,我们遵循微服务架构。对于那些不知道什么是微服务的人,不用担心,我会给你们介绍一下。

微服务背后的想法是,当某些类型的应用程序被分解成更小的、可组合的、协同工作的部分时,它们变得更容易构建和维护。每个组件都是单独开发的,然后应用程序只是其组成组件的总和。

考虑下面的示例:

Online Shopping App - Docker Container - Edureka

在上图中有一个在线商店,为用户帐户、产品目录提供单独的微服务,订单处理和购物车。

这个架构有很多好处:

即使你的一个微服务失败,你的整个应用程序也基本不受影响。它更容易管理

还有许多其他好处,在本文中我将不详细介绍微服务。但是,很快我也会写一些关于微服务的博客。

在这个架构中,我们使用的是CentOS虚拟机。这些虚拟机是通过编写长脚本来配置的。好吧,配置那些vm并不是唯一的问题。

开发这样的应用程序需要在一台机器上启动几个微服务。因此,如果要启动其中的五个服务,则需要在该计算机上安装五个vm。考虑下面的图表:

Several Virtual Machines - Docker Container - Edureka

另一个问题很常见,我知道你们中的很多人都会遇到这个问题。应用程序在开发人员的笔记本电脑中工作,但不在测试或生产中。这可能是因为没有保持一致的计算环境。考虑下面的图表:

Dev VS Prod - Docker Container - Edureka

除此之外还有很多其他的问题,但是我觉得,这些问题已经足够让我向您解释Docker容器的需求了。

了解Docker容器如何比虚拟机

更好,所以,想象一下,如果我给所有vm提供8gb的RAM,并且我有5个微服务在不同的虚拟机上运行。在这种情况下,这些vm将需要40gb的RAM。好吧,现在我要求主机的配置非常高,在我的主机中应该有将近44GB的RAM。显然,对于这样的架构来说,这不是一个可持续的解决方案,因为,我在这里浪费了很多资源。

很好,我有很多资源要浪费,但我的软件交付生命周期(SDLC)仍然存在不一致的问题。我必须在测试和prod环境中配置这些vm。在这个过程中,有些软件没有在测试服务器中更新,开发团队正在使用该软件的更新版本。这会导致冲突。

如果我使用100个虚拟机,那么配置每个虚拟机将花费大量时间,同时它也容易出错。

现在,让我们了解什么是Docker容器,它是如何工作的,以及它是如何解决我的问题的。

什么是Docker容器

“Docker是一个通过使用容器使创建、部署和运行应用程序更容易的工具。

您可以创建Docker容器,这些容器将包含应用程序或微服务所需的所有二进制文件和库(在我的例子中)。所以您的应用程序存在于一个容器中,或者您已经容器化了您的应用程序。现在,同样的容器可以在测试中使用

Docker Architecture - Docker Container - EdurekaDocker容器是虚拟机的轻量级解决方案,它使用主机操作系统。最棒的是,你不必预先分配任何RAM到Docker容器,它会在需要的时候接受它。所以,对于Docker容器,我不必担心资源的浪费。

现在让我们了解Docker容器是如何工作的。

Docker容器是如何工作的下面的图表基本上是,一种使用Docker的方法。我假设你对Docker映像和Dockerfile有个概念。

Docker Use-Case - Docker Container - Edureka

伙计们,我知道这个图看起来有点复杂,但相信我,它不是那么复杂。下面是对图表的解释,即使在你觉得很难理解之后,你可以评论你的疑问,我会尽快解决这些问题。

一个开发人员将首先在Docker文件中编写项目代码,然后从该文件构建一个图像。此图像将包含整个项目代码。现在,你可以运行这个Docker镜像来创建任意数量的容器。这个Docker镜像可以上传到Docker hub上(它基本上是你的Docker镜像的云存储库,你可以保持它的公共或私有)。这个Docker镜像在Docker hub上,可以由其他团队(如QA或Prod.

)拉动,这不仅可以防止资源浪费,还可以确保开发人员笔记本电脑中的计算环境也可以在其他团队中复制。我觉得现在,我不需要告诉你们为什么我们需要Docker。

这是使用Docker的一种方法,我猜你们一定很好奇我是如何使用Docker来解决我的微服务问题的。让我给你一个相同的概述。

Docker Example - Docker Container - Edureka

下面是图表的解释:

首先,我们在一个Dockerfile中编写复杂的需求。然后,我们把它推到GitHub上。之后我们使用了一个CI服务器(Jenkins)。这个Jenkins服务器将把它从Git中拉下来,并构建准确的环境。这将用于生产服务器和测试服务器。我们将它部署到测试环境中(它是指在将软件完全部署到生产环境中之前,出于测试目的将软件部署到服务器上)。基本上,我们把我们在开发、测试和生产阶段所拥有的东西都卷起来了。

可以说,Docker让我的生活变得轻松了。

好吧,这就是我公司的故事,让我们看看印第安纳大学的案例研究。Docker如何解决他们的问题。

印第安纳大学案例研究:

印第安纳大学是印第安纳州的一个多校区公立大学系统,美国。

问题声明

他们正在使用自定义脚本在虚拟机中部署应用程序。

Problem Statement Indiana University - Docker Container - Edureka

他们的环境是为其基于Java的传统应用程序优化的。他们不断增长的环境涉及到不仅仅是基于java的新产品。为了给他们的学生最好的体验,大学需要开始更新应用程序。

大学希望改进他们设计应用程序的方式,通过为他们的应用程序移动到一个基于微服务的架构。

Microsevice vs Monolithic - Docker Container - Edureka

对学生的数据,如ssn和学生健康数据需要安全。

解决方案:

所有的问题都由Docker数据中心(DDC)解决,考虑下面的图表:

Solution Indiana University - Docker Data Center - Edureka.

DockerTrusted Registry—它存储Docker映像。

UCP(Universal Control Plane)Web UI—有助于从单个位置管理整个集群。使用UCP web UI部署服务,使用存储在DTR(Docker Trusted Registry)中的Docker映像。

IT运营团队利用通用控制平面在主机上提供Docker安装的软件,然后部署它们的应用程序,而不必执行一系列手动步骤来设置它们的所有基础结构。

UCP和DTR集成使用他们的LDAP服务器快速提供对应用程序的访问。

我希望你们已经阅读了以前的博客来学习Docker的基本知识。

现在,我将向你解释如何使用Docker Compose进行多容器应用。

Docker动手:

我假设你已经安装了Docker。我将在这篇文章中使用Docker Compose,下面我对Docker Compose做了一个小介绍。

Docker Compose:它是一个定义和运行多容器Docker应用程序的工具。使用Docker Compose,您可以使用Compose文件配置应用程序的服务。然后,使用一个命令,您可以从配置中创建并启动所有服务。

假设您在不同的容器中有多个应用程序,并且所有这些容器都链接在一起。所以,您不想逐个执行这些容器。但是,您需要用一个命令运行这些容器。这就是Docker Compose进入画面的地方。使用它,您可以使用一个命令在不同的容器中运行多个应用程序。i、 docker compose up.

示例:假设您在YAML文件中有不同的容器,一个运行web应用程序,另一个运行postgres,另一个运行redis。这就是所谓的docker compose文件,从那里你可以用一个命令运行这些容器。

Docker Compose Example - Docker Container - Edureka让我们再举一个例子:

假设你想发布一个博客,因为你将使用CMS(内容管理系统),而wordpress是使用最广泛的CMS。基本上,你需要一个WordPress的容器,你需要一个MySQL的后端容器,这个MySQL容器应该链接到WordPress容器。我们还需要一个Php Myadmin容器,它将链接到MySQL数据库,基本上,它是用来访问MySQL数据库的。

我如何实际执行上面的例子。

涉及的步骤:安装Docker Compose:安装WordPress:我们将使用正式的WordPress和MariaDB Docker映像。安装MariaDB:它是世界上最流行的数据库服务器之一。它是由MySQL的原始开发者开发的,MariaDB是作为开源软件开发的,作为一个关系数据库,它提供了一个访问数据的SQL接口。安装PhpMyAdmin:这是一个用PHP编写的免费软件工具,旨在通过Web处理MySQL的管理。创建WordPress站点:

让我们开始吧

“Install Docker Compose:”

“先安装Python Pip:”

“sudo apt get Install Python Pip”

Online Shopping App - Docker Container - Edureka1”

现在可以安装Docker Compose:”

“sudo Pip Install Docker Compose”

Online Shopping App - Docker Container - Edureka2”

Install WordPress:”

“创建WordPress目录:”

“mkdir WordPress

Docker Compose File - Docker Container - Edureka

将下面几行代码粘贴到该yaml文件中:

文字出版社:图片:wordpress链接:-wordpress数据库:mysql端口:-8080:80wordpress数据库:图片:mariadb环境:MYSQL_ROOT_密码:edurekaphpmyadmin:图片:corbinu/docker phpmyadmin链接:-wordpress数据库:mysql端口:-8181:80分环境:MYSQL_用户名:rootMYSQL_ROOT_密码:edureka

我知道你想让我解释这段代码,所以我将要做的是,我将取这段代码的一小部分,向你解释发生了什么。

wordpress数据库:环境:...文字出版社:端口:...

第一个端口号是主机上的端口号,第二个端口号是容器内的端口号。因此,此配置将主机端口8080上的请求转发到容器内的默认web服务器端口80。

phpmyadmin:图片:corbinu/docker phpmyadmin-wordpress数据库:mysql-8181:80分环境:MYSQL_ROOT_密码:edureka

通过社区成员corbinu抓取docker phpmyadmin,将其链接到名为mysql的wordpress_db container(意思是从phpmyadmin container内部引用主机名mysql将转发到wordpress_db container),在主机系统的8181端口公开其端口80,最后用我们的MariaDB用户名和密码设置几个环境变量。此图像不会像wordpress图像那样自动从wordpress的dbcontainer环境中获取MYSQL_ROOT_PASSWORD环境变量。实际上,我们必须从wordpress_db容器中复制MYSQL_ROOT_PASSWORD:edureka行,并将用户名设置为ROOT。

现在启动应用程序组:

docker compose up-d

Running Docker Compose - Docker Container - Edureka

这就是您所要做的一切。您可以通过这种方式添加任意数量的容器,并以任何方式将它们链接起来。

现在,在浏览器中,使用您的公共IP或主机名转到端口8080,如下所示:

本地主机:8080

WordPress - Docker Container - Edureka

填写此表单并单击安装WordPress。

WordPress Dashboard - Docker Container - Edureka

完成后,再次访问服务器的IP地址(这次使用端口8181,例如。本地主机:8181). phpMyAdmin登录屏幕将显示:

Online Shopping App - Docker Container - Edureka8”

继续使用在YAML文件中设置的用户名根和密码登录,您将能够浏览数据库。你会注意到服务器包含一个wordpress数据库,其中包含了wordpress安装中的所有数据。

Online Shopping App - Docker Container - Edureka9”

在这里,我结束了Docker容器博客。希望你喜欢这个职位。你也可以查看本系列中的其他博客,这些博客涉及Docker的基本知识。

如果你发现这个Docker容器博客相关,请查看Edureka提供的DevOps培训,Edureka是一家值得信赖的在线学习公司,拥有遍布全球的25万名满意的学习者。Edureka DevOps认证培训课程帮助学习者获得各种DevOps过程和工具的专业知识,如Puppet、Jenkins、Docker、Nagios、Ansible、Chef、Saltstack和GIT,用于在SDLC中自动执行多个步骤。

有问题要问我吗?请在评论部分提到它,我会给你回复的

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
人工智能名片 投稿者
我还没有学会写个人说明!
最近文章
  • * 没有更多文章了
  • 热门搜索

    分类目录