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 条评论
登录 后参与评论

相关文章

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

在容器中部署MySQL和Hadoop集群(内含视频)

前言 之前,笔者发表的《非开发人员看Devops--从一张图谈起》的文章,在不到24小时内,阅读量已经达到1100,说明大家对DevOps和OpenShift此...

3166
来自专栏coding

docker初体验

1041
来自专栏从流域到海域

Docker 编配 ...它是什么意思,为什么你会需要它

原文作者:Cloudify Community

1898
来自专栏腾讯云容器服务团队的专栏

腾讯云 Web 登录 Kubernetes 集群内容器功能实践

以往一旦Kubernetes服务出现问题,用户不得不先登录集群node,然后使用docker exec命令进入容器中查看容器。这个过程费时费力,如果要在不同的容...

4590
来自专栏生信技能树

跟着jimmy学docker系列之第4讲:docker容器资源调度问题(MAC版本)

前面我们复习了docker的用法,而且我还带领大家亲自构建了一个自己的docker容器,也成功的在测试数据集里面运行了,但是前面我说的,我这次搞docker是因...

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

厉害了word哥 | 从两张图看红帽最高深的武功 |OpenShift

世上的高手 世上高手大约有两种: 第一种如下图这为老先生,一辈子纵横江湖数十载,所学武功实用有效,招数简明而力道雄厚,善于“简单粗暴”迅速解决问题。在老爷子的心...

4037
来自专栏运维小白

25.1 Docker简介

Docker介绍 Docker流行的特性:在于快速部署交覆 比如在企业中做开发,还是在线上跑一些服务,跑一些业务,都需要去部署很多的环境,如lnmp,mysq...

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

一个优秀的镜像仓库是什么样的?

1563
来自专栏Seebug漏洞平台

Microsoft Azure 以太坊节点自动化部署方案漏洞分析

作者:sunsama@知道创宇404区块链安全研究团队 时间:2018/07/10

851
来自专栏EAWorld

为什么有了Docker registry还需要Harbor?

目录: 一、Harbor的安全机制 二、Harbor的镜像同步 三、Harbor与K8s的集成实践 四、两个小贴士 五、总结 Habor是由VMWare公司开源...

4165

扫码关注云+社区