如何在企业中部署Docker

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

如何做到这点? 答案是微服务

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

“我可以在一个典型的工作站上构建一个应用程序组件,然后将相同的组件移植到产品中,而不用做基础性的改动”,这是一个非常有吸引力的概念。Datadog最近发表了 关于Docker应用的研究 ,其中包含了一些有趣的结果。甚至在IBM公司,也有几个团队正在使用Docker来达到自己的目的。

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

从架构的角度,微服务看似简单 - 但实际上,这种方法是 一种复杂的权衡方式。容器平台的广泛使用意味着需要管理更多元数据,以及控制更多变量(比如持久存储,端口映射,容器名称,网络等)。相比于集成和维护,容器的管理和可见性成为更大的挑战。而且,大多数公司机构并不能“奢侈地”在容器技术上全身心投入,因为他们在其他地方投资过多。当你手上有一个古老的,庞大的应用程序时,重新绘制这个“画板”代价太高了。

现在许多开发商希望采用Docker,但Docker只能作为当前架构的扩展,因为开发商主要关注的是以最少产生干扰的方式为现有的云应用程序提供支持。随着时间的逝去,在小心地将其架构转换为原生云架构的同时,这些公司机构也都面临着扩展现有流程以及转向适应容器技术的挑战。

单一的微服务很简单,但是作为一个整体,这种架构方法会出现管理,可见性和协调等各种复杂问题。

正如我所说,微服务是未来的趋势,但他们也将问题的复杂之处从系统的整体架构变为系统相关的配置和数据。管理这所有的微服务将会是公司机构组织开始感到头疼的地方,并且当他们不得不与传统的架构和交付管道整合集成时,这种痛苦会变得更加复杂。十二因子应用程序的核心原则之一就是配置与代码的严格分离。只要你坚持这个原则,那么你就更需要整合容器化技术。

容器编排工具

一般来说,有两套容器技术编排方法:一种是运行时编排,比如处理容器执行操作方面的工具; 另一种则是通过促销模式部署容器编排。

容器的运行时编排工具包括像是 KubernetesApache Mesos 等,它们提供了轻巧的部署,在双向扩展和滚动更新(不停机情况下)方面有较强的伸缩性。这些都是广泛使用的优良工具。

容器的部署编排工具不太常见。尽管 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上 有一个 官方的WordPress的Docker镜像。我们将和它与MySQL一起使用,MySQL也运行在容器中(这里也有 官方镜像 )。

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

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

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

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

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

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

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

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

这个应用程序中的两个组件也必须使用 容器链接进行链接。因为我通常不希望修改开箱即用的模板流程,所以我建议复制library / wordpress组件下的Deploy流程,并将其作为副本粘贴。然后,您可以重命名该副本以部署w /链接到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=密码 -d mysql
docker run --name wordpress-app --link wordpress-db:mysql -p  8080:80 -d wordpress

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

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

就是这样!现在,针对你的某个环境请求部署WordPress流程。我注意到一个额外的警告是library/ wordpress的“fpm”版本工作有点不同,所以现在你可以回避这些。否则,如果一切顺利,现在你应该有一个正在运行的WordPress实例来玩弄了:

如果您有任何问题和评论,欢迎提出。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Debian社区

Linux 容器 vs 虚拟机 — 谁更胜一筹

自从 Linux 上的 容器 变得流行以来,了解 Linux 容器和虚拟机 之间的区别变得更加棘手。本文将向您提供详细信息,以了解 Linux 容器和虚拟机之间...

16220
来自专栏大魏分享(微信公众号:david-share)

原生KVM虚拟化方案"管理平台"配置步骤(RHV-M Appliance)

浅谈2016年的虚拟化市场 本文正式开始之前,先阐述一个观点,即RHV/RHEV是基于KVM原生的虚拟化解决方案, 为什么这么说呢? 首先,KVM严格意义上讲不...

46640
来自专栏云计算

OpenShift的容器镜像(第1部分):目标

本文来源于2017 EMEA (Europe, the Middle East and Africa,欧洲,中东和非洲) 红帽技术交流会议的会议记录,与会者包括...

29460
来自专栏点点滴滴

关于Windows系统安装(一)

12260
来自专栏Java工程师日常干货

docker化你的java应用(上)前言走进docker

在各种技术大会(互联网架构,云计算等等),哪都少不了docker的身影。docker为啥这么火?因为它解决了大部分企业的痛点:快速的持续集成,服务的弹性伸缩,部...

13510
来自专栏云计算D1net

想要使用容器技术 这5类遗留工具就应该被淘汰

充分利用容器并不只是安装Dockers和激活容器应用程序那么简单。你需要改进的同样还有监控方法、安全性能等。 这么做的理由是,容器并不只是对你过去工作中使用到的...

35680
来自专栏非著名程序员

Android NFC 技术解析,附 Demo 源码

近期由于项目需求,对 Android NFC 技术进行了一定的了解和深入,整合了一些网络、书籍资料,此文章仅作为自己的学习笔记。 NFC 是 Near Fiel...

43470
来自专栏北京马哥教育

Linux 容器 vs 虚拟机 —— 谁更胜一筹

自从Linux上的容器变得流行以来,了解Linux容器和虚拟机之间的区别变得更加棘手。本文将向您提供详细信息,以了解Linux容器和虚拟机之间的差异。 Linu...

30940
来自专栏FreeBuf

如何打造一款可靠的WAF(Web应用防火墙)

之前写了一篇《WAF防御能力评测及工具》,是站在安全运维人员选型WAF产品的角度来考虑的(优先从测试角度考虑是前职业病,毕竟当过3年游戏测试?!)。本篇文章从W...

39450
来自专栏IT大咖说

揭秘携程内部海量CRN项目解决方案

摘要 随着公司内部CRN项目的日益增多,越来越多的业务部门开始意识到,是否可以将CRN的项目直接运行在浏览器上,以免去他们在H5和SEO上的额外开发。甚至有的W...

44050

扫码关注云+社区

领取腾讯云代金券