Docker的企业级部署

Docker现在十分热门。这个开源项目向全世界展示了软件容器化的力量。引用维基百科的话,“Docker使用Linux内核的资源隔离功能,允许独立的容器在一个Linux实例中运行,避免了启动和维护虚拟机的开销。” 这到底意味着什么?这意味着操作系统级别的虚拟化现在变得简单而且更加实用,我们可以以通过更加直观,可管理的和经济高效的方式构建应用程序。

怎么来实现?微服务。

这些小型独立应用程序组件专用于单个进程,通过定义良好的API与其他微服务松耦合,形成一个易于扩展和管理的组合系统。对于由微服务组成的原生云应用,Docker通常是处于核心地位,因为它提供了构建,运输和运行Linux容器的绝佳方式。

我可以在一个典型的工作站上构建一个应用程序组件的概念,然后将相同的组件移到生产中,而不会发生根本的变化,这是非常有吸引力的。Datadog最近发表的关于Docker应用的研究的文章中包含了一些有趣的结果。即使在IBM,也有几个团队正在使用Docker来达到自己的目的。

传统的VM管理程序与Linux容器的比较

从架构的角度来看,微服务是简单的—但实际上,这种方法是一个复杂的折衷。容器平台的广泛使用意味着需要管理更多元数据,并控制更多变量(持久存储,端口映射,容器名称,网络等)。与集成和维护相比,挑战变得可管理的和具有可见性。而且,大多数组织并没有在容器上花费过多,因为他们在其他地方投资过多。当你手上有一个古老的,单一的应用程序时,重新开始显得花费过多了。

许多开发商希望现在采用Docker,但只能作为当前体系结构的扩展,因为它们的主要重点是尽量以最不干扰的方式为现有的云应用程序提供支持。这些开发商面临着扩展现有流程以容纳容器的挑战,同时仔细地将其架构转换为云本地化架构。

单一的微服务是简单,但是整个架构方法会导致管理,可见性和协调等方面的复杂性。

正如我所说,微服务是未来,但他们也将复杂性从系统的整体架构重定向到系统周围的配置和数据。管理这所有的微服务是发商开始感到痛苦的地方,当他们不得不与传统的架构和交付管道集成时,这种痛苦会变得更加复杂。十二因子应用程序的核心原则之一是严格的将配置与代码分离。如果你坚持这个原则,那么对容器业务的需求就要大得多。

容器流程工具

一般来说,有两套容器编排工具:运行时编排,即处理容器执行操作方面的工具; 并通过推广模式部署业务流程。

容器的运行时编排工具包括KubernetesApache Mesos,它们提供了canary(金丝雀)部署,双向扩展和滚动更新(无停机时间)。这些是广泛使用的很好的工具。

容器的部署编排工具不太常见。Docker Compose减轻了开发者的很多痛苦,但一些组织要求更多。Rancher看起来很有希望,但是它并不适用于传统的IT架构。等等,如果你的应用组件没有在容器中运行?那么那些希望随着时间推移而发展的组织呢?这是当今大多数“企业”发展安排,当然他们也需要编排工具。事实上,他们需要的工具不仅支持微服务和传统架构,而且还需要一个适当的转换策略。

UrbanCode Deploy是终极DevOps框架。该工具有潜力巩固整个企业的不同的自动化,并集中管理整个企业。UrbanCode Deploy通过集中式部署,职责分离,环境清单可见性和快速回滚来补充Docker数据中心的价值。UrbanCode Deploy还可以跨目标运行时管理属性和环境变量,从而减轻推广模型中每个微服务的管理不同配置的麻烦。

2015年3月,UrbanCode Deploy的第一套Docker插件发布了。通过Docker的Docker自动化插件,Docker容器就像任何其他应用程序组件一样。这是在UrbanCode Deploy中建模容器的最简单也是最自然的方法。Docker自动化插件也是容器和传统IT混合使用的系统。最近,我们的IBM的天才团队也发布了一个Docker Compose插件。使用Docker Compose插件,UrbanCode Deploy中的组件单独映射到您的应用程序的Docker Compose文件。这意味着更好地支持仅由微服务和较少重复性工作组成的应用程序。

为了避免我们遗忘,UrbanCode Deploy还有大量的其他插件,基本上可以让开发商对每个平台以同样的方式进行自动化构建。如果应用程序的任何组件都是Docker容器,则在应用程序进程内部署是透明的。正如我所说的,UrbanCode Deploy是终极的DevOps框架。

我的计划是编写一系列有关“微服务管理”的博客文章,阐述使用IBM UrbanCode Deploy使用Docker Datacenter的价值。IBM本身现在对Docker做了很多工作,所以我可能会写很多有趣的东西。在这个最初的评论中,我将重点介绍基础知识。特别是IBM UrbanCode Deploy的Docker源代码和Docker自动化插件。现在来安装这些

一个简单的WordPress教程

我们首先在UrbanCode Deploy中建模我们的应用程序。 在Docker Hub上有一个官方的Docker镜像。我们将使用MySQL以及运行在容器中的MySQL(它的官方镜像)。

首先,使用随Docker自动化插件安装的Docker Template组件模板创建components library/wordpress和library/mysql。这是代表UrbanCode Deploy中的Docker容器(即名称空间/存储库)的组件的标准命名约定。将源配置类型设置为Docker导入器。这里是我的library/mysql的组件配置的屏幕截图:

导入这两个组件的版本。与UrbanCode Deploy中的大多数组件版本不同,Docker镜像的版本不会复制到CodeStation(该复选框将被忽略。Docker源插件将轮询注册表并使用状态导入所有版本标记。单击“版本”子选项卡上的两个组件的“导入新版本”,并查看导入过程的输出。它看起来应该像这样:

在版本子选项卡上,现在应该为每个组件列出几个版本。每个版本对应于Docker镜像库中的一个版本标签:

很好!我们已经定义了组件并创建了一些版本。现在,让我们在UrbanCode Deploy中创建应用程序,以及其环境和环境资源。用我们的两个组件和几个环境创建一个名为WordPress的新应用程序,如下所示:

我的LOCAL环境的资源层次结构如下所示:

为其他环境创建一个类似的层次结构。我们可以在所有环境中使用一个Docker守护进程,也可以让守护进程分布在多个代理上。一旦为特定环境创建了资源,将其添加为相关应用程序环境的基本资源:

如果我点击上面的LOCAL资源组,我将被带到资源组本身。然后如果我切换到配置选项卡,我可以在本地环境中设置特定于资源的属性。例如:

docker.opts属性由组件模板进程引用。因为我 在我的Mac上使用Docker Machine和boot2docker虚拟机,所以我必须向Docker客户端发送几个选项才能正常访问守护进程(docker-machine config <machine-name> 将输出这些选项)。您可能还记得,其他属性在组件配置中被引用。请注意,如果未定义这些属性,则部署过程可能会失败。

这个应用程序中的两个组件也必须使用容器链接进行链接。因为我通常不希望修改开箱即用的模板流程,所以我建议复制library/wordpress组件下的Deploy流程,并将其作为副本粘贴。然后,您可以重命名该副本以部署w/Link到MySQL或类似的东西。通过编辑“运行Docker容器”步骤的属性并添加一个链接指令到“运行选项”字段来修改此复制过程的设计,如下所示:

现在,查看Docker Hub上的两个Docker镜像存储库的描述。注意这些镜像使用的环境变量。我可以创建环境属性定义来对应这些,根据需要标记它们,甚至设置默认值。例如,在library/mysql组件中,我在组件配置中创建了以下环境属性定义:

这个属性必须被提供给library/mysql组件的docker run命令。与我们如何复制和编辑library/wordpress的部署过程类似,在library/mysql下创建部署过程的副本,对其进行重命名,然后编辑“运行Docker容器”步骤的“运行选项”字段,以将此环境变量作为选项:

我们就快完成了。最后一部分是构建和测试应用流程。如果我要手动启动这些容器,命令是:

docker run --name wordpress-db -e MYSQL_ROOT_PASSWORD=password -d mysql
docker run --name wordpress-app --link wordpress-db:mysql -p 8080:80 -d wordpress

运行这些命令后,我应该可以在localhost:8080(其中localhost是托管Docker引擎的计算机)中运行WordPress。我们将使用这些命令作为构建应用程序的基础。创建一个名为“部署WordPress”的新应用,并转到流程设计器。从组件面板中拖出安装组件,然后释放,将组件更改为library/mysql,组件进程为Deploy w/Password(或您选择的任何名称)以及安装MySQL的步骤名称,然后单击“确定”。在library/wordpress 中重复,如图所示:

最后,连接从开始到完成这几个步骤并保存该过程。这是一个相对简单的应用程序,应该看起来像这样:

就是这样!现在,请针对您的某个环境请求部署WordPress流程。注意一个额外的警告是library/wordpress的“fpm”版本工作状况有点不同,所以现在要避免这些。如果没有警告,一切顺利,你应该有一个正在运行的WordPress实例来操作:

如果您有任何问题,请留下意见和问题。

本文的版权归 Nikoace 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大葡萄元元

测试要走高冷路线,如何完美测试产品?

Android 开发者要测试应用发个APK安装包即可,但是对于iOS来说想要参与App的测试一直都很复杂。不过自从发现一个测试平台,帮助开发者一键上传应用生成短...

601
来自专栏EAWorld

自动化工具后起之秀Ansible的部署实践

从早期手动加脚本的部署方式,到后来自动化工具(chef, puppet, saltstack, ansible等)的出现,再到如今DevOps的盛行,企业应用部...

5724
来自专栏FreeBuf

十大跨浏览器测试工具

在多个平台上测试多种浏览器不但是很困难的 – 它几乎不可能的,因为没有那些好的测试工具。今天,我们就为大家提供很多涉及到跨浏览器测试的选择,并且告诉你那些“顶级...

1756
来自专栏IT米粉

Mac上开发.Net遇到的坑

核心依然是在Windows上开发.Net程序,只需要安装虚拟机即可,推荐使用Parallels Desktop,价格不贵,淘宝有大量半价销售,可以使用融合模式。...

42411
来自专栏云计算

如何在企业中部署Docker

微服务组成的原生云应用程序,Docker通常是核心,因为它提供了构建,运输和运行Linux容器的绝佳方式。

3719
来自专栏李明的专栏

CDB 迁移问题汇总

最近与相关的行业架构师接触发现,对CDB的迁移大家伙很感兴趣,现就提出的十一个相关问题进行了如下汇总。

2700
来自专栏西枫里博客

启用CDN后,QQ互联登录出现异常的问题。

博客群里的网友都说网站真实IP没隐藏有巨大的被D风险。隐藏网站真实IP最简单的办法就是做内容分发网络,用户在访问网站的时候是访问就近的CDN节点,ping出来的...

932
来自专栏张善友的专栏

Windows 7社区发布活动 -- Windows 7兼容性概述

今天在深圳的Windows 7社区发布活动讲了Session 2 -- Windows 7兼容性概述。今天参会的人员达到60多个,大家也非常积极的讨论。我的Se...

1666
来自专栏性能与架构

linux 木马清理过程

服务器出现异常,完全无法访问,ssh登陆都极其缓慢 解决过程 top 查看系统状态,发现 load average 平均负载值非常高,再看排名第一的进程,...

2716
来自专栏IT大咖说

如何利用开源DevOps工具完成云上的自动运维

内容概况 云计算的特点是开箱即用,可以随时的扩缩容,不用考虑硬件的损坏问题,也有丰富的云服务和云平台供我们选择。在本次演讲中,黎山通过实际应用场景为我们讲述了基...

3667

扫码关注云+社区