专栏首页Docker的企业级部署

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

相关文章

  • 在Docker中开发Java 8 Spring Boot应用程序

    在本文中,我将向您展示如何使用Java 8开发和运行简单的Spring Web应用程序,而无需在本地计算机上安装Java 8。

    Nikoace
  • 将R与Cloudera Impala集成,以实现Hadoop上的实时查询

    Cloudera Impala支持Hadoop数据集上的低延迟交互式查询,这些数据集可以存储在Hadoop分布式文件系统(HDFS)或Hadoop的分布式NoS...

    Nikoace
  • 如何在企业中部署Docker

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

    Techeek
  • Docker容器实战(三) - Docker的自我重新定位

    Docker公司为什么在Docker项目已经取得巨大成功之后,执意走回已经让无数先驱折戟的PaaS路呢?

    JavaEdge
  • Rocket 希望以硬件隔离引领容器市场,Docker说“NO!”

    下一代CoreOS的容器使用基于Intel的硬件隔离来增加安全性。其他容器系统也会如法炮制吗? 编者注:CoreOS是一个基于Linux 内核的轻量级操作系统,...

    静一
  • Docker初步

    Docker提供一个应用程序部署引擎。该引擎的目标就是提供一个轻量、快速的环境,能够应用开发者的程序,并方便快速的将程序从开发者的个人PC上部署到测试环境,然后...

    KEVINGUO_CN
  • 大话Docker系列:打造SDN容器百宝箱(一)

    本专题上一篇介绍了我们为什么需要Docker,那么接下来就是怎么做了。作为SDN领域从业者,如何让Docker服务于SDN,可能是大家比较关心的话题。接下来的几...

    SDNLAB
  • Docker---(2)为什么要用Docker

    作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。 首先,Docker 容器的启动可以在秒级实...

    IT云清
  • 企业从虚拟化向容器化迁徙道路上的十大误区

    过去的一年中,以Docker为代表的容器化技术成了最热门的云计算词汇,而从虚拟化向容器化过渡也成了一件非常时髦的事情,很多企业经不住诱惑纷纷试水Docker。 ...

    静一
  • 浅谈Docker隔离性和安全性

    介绍 相信很多开发者都默认Docker这样的容器是一种沙盒(sandbox)应用,也就是说他们可以用root权限在Docker中运行随便什么应用,而Docke...

    FB客服

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动