6 利用Docker .NET应用程序模板制作您的容器应用程序(第2部分)

在最后一篇文章中,我们用各种模板进行了设置。现在我们需要让他们工作起来了。

环境变量绑定跨镜像

用户可以通过引用镜像的环境变量或容器值来创建跨镜像环境变量绑定。例如,在Apache HTTP容器中使用的插件引用了ASP.NET容器的容器私有IP地址BalancerMembers = BalancerMember http:// {{aspnet-mvc | container_private_ip}}:5004 - 其中ASP.NET Hello MVC容器的容器IP自动检索并引入到Apache HTTP配置文件中。

以下是支持的环境变量值列表:

{{字母数字| 8}}:创建一个随机的8个字符的字母数字字符串。这对创建随机密码非常有用。

{{图片名称| ip}}:允许您输入容器的主机IP地址作为环境变量的值。这对于允许中间件层与数据库建立连接是非常有用的。

{{图片名称| container_hostname}}或{{Image Name | container_ip}}:允许您输入容器的名称作为环境变量的值。可以使中间件层建立与数据库的安全连接(不暴露数据库端口)是非常有用的。

{{图片名称| container_private_ip}}:允许您输入容器的内部IP作为环境变量的值。这对于允许中间件层建立与数据库的安全连接(不暴露数据库端口)是非常有用的。

{{图片名称| port_Port Number}}:允许您输入容器的端口号作为环境变量的值。这对于允许中间件层与数据库建立连接是非常有用的。在这种情况下,指定的端口号需要是内部端口号 - 即不是分配给容器的外部端口。例如,{{PostgreSQL | port_5432}}将被转换为实际的外部端口,可以使中间件层与数据库建立连接。

{{图片名称|环境变量名称}}:允许您将镜像的环境变量的值输入到另一个镜像的环境变量中。这里的用例是无止境的 - 因为大多数多层应用程序都会有跨镜像依赖性。

使用插件和主机参数来部署高可用的Docker Java应用程序

在HyperForm中创建应用程序模板时,host参数指定要用于容器部署的主机。如果您在创建群集时选择了Weave作为网络层。这样,您可以确保跨不同主机(或区域)的应用程序服务器群集具有高可用性,并且您可以遵守关联性规则以确保数据库在单独的主机上运行。以下是主机参数支持的值:

host1,host2,host3等:在数据中心(或群集)内随机选择一个主机进行容器部署。

IP地址1,IP地址2等:允许用户指定用于容器部署的实际IP地址。

主机名1,主机名2等:允许用户指定用于容器部署的实际主机名。

通配符(例如“db-”或“app-srv-”):指定要在主机名内使用的通配符。

使用插件生命周期阶段进行Docker服务发现

HyperForm中的服务发现框架提供了事件驱动的生命周期阶段,执行定制脚本来重新配置应用程序组件。在扩展可能需要重新配置负载均衡器或可能需要重新平衡副本集的群集时,这是至关重要的。

您会注意到Nginx和Apache HTTP插件在不同的阶段或事件中得到执行:

当Nginx或Apache HTTP容器被创建时:在这种情况下,应用服务器的容器IP被注入到默认的配置文件中,以便于负载平衡到正确的服务。

当ASP.NET应用程序服务器集群扩展或扩展时:在这种情况下,应用程序服务器的更新后的容器IP将被注入到默认配置文件中,以便将负载平衡到正确的服务。

当ASP.NET应用程序服务器停止或启动时:在这种情况下,应用程序服务器的更新的容器IP被注入到默认的配置文件中,以便对正确的服务进行负载平衡。

因此,这里的服务发现框架通过跟踪容器IP和环境变量值以及服务(通过在特定事件或阶段执行正确的脚本)来进行服务注册。

插件中的生命周期参数允许您指定执行插件的确切阶段或事件。如果没有指定生命周期,那么通过:

  • on_create:创建容器时执行插件。
  • on_start: 在容器启动后执行插件。
  • on_stop: 在容器停止前执行插件。
  • on_destroy: 在销毁容器之前执行插件。
  • pre_create:在创建容器之前执行插件。
  • post_create:在容器创建并运行后执行插件。
  • post_start [:Node]:在另一个容器启动后执行插件。
  • post_stop [:Node]:在另一个容器停止后执行插件。
  • post_destroy [:Node]:在另一个容器被销毁后执行插件。
  • post_scale_out [:Node]:在另一个容器集群被扩展后执行插件。
  • post_scale_in [:Node]:在另一个容器集群被缩放后执行插件。
  • cron(0 1 1 * *?):根据指定的cron表达式来调度插件。这里是一些cron表达式的例子
  • exec_on_machine:在底层机器上执行插件。此生命周期可以与其他容器生命周期一起使用。例如,exec_on_machine pre_create将在创建容器之前在机器上执行插件。

在云上提供基础架构

保存应用程序后,用户可以将应用程序部署到已经可用的群集(或服务器池),或者在18个不同的云端点(包括HyperGrid,VMware vSphere,OpenStack,CloudStack,Amazon Web Services,Rackspace,Microsoft Azure,DigitalOcean,IBM SoftLayer等等。

有关自动化基础设施配置的详细说明,请参阅此处的详细文档

此博客中记录的演示使用Microsoft Azure资源管理器上的一个预配置虚拟机群集。有关使用可重用的YAML模板在ARM上自动配置虚拟机的说明,请参阅此处的详细文档

在HyperGrid集群上部署ASP.NET应用程序

用户可以在任何可用的群集上部署ASP.NET应用程序。在HyperForm SaaS平台(http://dchq.io)上,在HyperGrid基础架构上设置的公共集群可用于免费的应用程序部署(最多2GB的内存)。此群集仅适用于DEV (开发环境)/ TEST(测试环境)部署,每两到三个月刷新一次。

要在HyperGrid群集上部署应用程序,用户可以导航到“Library”页面,单击“自定义”,然后选择可用的HyperGrid群集:

访问正在运行的容器

应用程序页面上的容器名称旁应该有一个命令提示符图标。 这允许用户通过代理消息队列使用安全通信协议进入容器。 租户管理员可以定义一个白名单命令,以确保用户不会对正在运行的容器进行任何有害的更改。

例如,对于ASP.NET部署,我们使用命令提示符来确保应用程序代码确实位于/app目录下。

部署示意图

监视正在运行的容器的CPU,内存和I/O利用率

一旦应用程序启动并运行,用户可以监视正在运行的容器的CPU,内存和I/O,以在这些度量值超出预定义阈值时收到警报。 特别是在执行功能和负载测试时。

用户可以执行历史监视分析并将问题关联到容器更新或构建部署。 这可以通过点击统计链接来完成。 可以选择自定义日期范围来查看历史上的CPU,内存和I/O的状况。

查看历史服务器状态

用新镜像替换(重新部署)容器

对于希望通过重建包含应用程序代码的Docker镜像容器模型的开发人员来说,HyperForm提供了一个自动化的容器替换工作流程,该工作流程将注册表中的最新镜像替换为最新的。

要设置容器重新部署(或替换)配置文件,用户可以从“操作”菜单中选择“容器重新部署配置文件”。

重建容器

然后,用户可以选择其中一个存储的Docker注册表,并输入替换正在运行的容器时应使用的图像的名称。 要注册Docker Hub,Nexus,Artifactory或Quay帐户,用户选择Cloud Providers并单击+选择Docker注册表。

扩展ASP.NET应用程序

如果正在运行的应用程序变成资源受限,则用户可以扩展应用程序以满足日益增长的负载。 此外,例如,用户可以在营业时间内安排规模,在周末期间安排规模。

要将ASP.NET容器的集群从一个扩展到两个,用户可以单击正在运行的应用程序的Actions菜单,然后选择Scale Out。 然后,用户可以指定群集的新大小,然后单击“立即运行”。

为负载均衡器(即Nginx或Apache HTTP)配置的服务自动加载插件,以将新的应用服务器的容器IP注入到默认的配置文件中,用来配置负载均衡。

应用程序时间线可用于跟踪对应用程序进行审计和诊断的每个更改。 这可以通过正在运行的应用程序的页面底部的可展开菜单进行访问。

当容器或主机关闭,或主机或容器的CPU和内存利用率超过定义的阈值时,会警报和通知。

执行插件提供后更新应用程序

如果用户想通过利用ASP.NET动态编译(https://msdn.microsoft.com/en-us/library/ms366723.aspx)对ASP.NET应用程序进行简单的更改,那么自定义脚本插件 可以被调用来进行这样的更新。

依赖于可以用BASH,PowerShell,Perl,Ruby或Python编写的自定义脚本的插件框架支持高级应用程序的部署,并且可以与任何外部服务(包括存储,网络或监控解决方案)快速集成。

要做到这一点,用户必须先到Blueprints> Plug-ins来创建一个插件。

然后从应用程序的页面,用户可以从操作菜单中选择插件运行。

然后,用户可以搜索插件并根据需要修改参数(例如,获取最新的ASP.NET文件的URL)。 由于在此示例中使用了ASP.NET动态编译,因此不需要重新启动容器。 但是,对于需要重新启动容器的更新,则需要“重新启动”。

结论

容纳企业应用程序仍然是一个挑战,主要是因为现有的应用程序组合框架没有解决复杂的依赖关系,外部集成或后期应用程序生命周期管理任务。

HyperForm提供托管和内部部署版本,可解决所有这些挑战,并通过扩展Docker Compose的高级应用程序组合框架简化企业应用程序的集装箱化,从而支持:

可以在超过20个不同生命周期阶段调用的高级插件,以实现服务发现,即时集装箱化和应用程序存储自动化,以及数据注入以支持复杂的应用程序依赖性。

在18个不同的云和虚拟化平台(包括HyperGrid,vSphere,OpenStack,AWS,Rackspace,Microsoft Azure,Google Compute Engine,DigitalOcean,IBM SoftLayer)上运行和管理Docker ASP.NET“Hello MVC”和“Hello Web”等等),请确保您已经完成下面的任意一个前提:

相关的参考资料: 

Docker入门

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在CoreOS集群上使用CloudSlang清理Docker环境

CoreOS是一个Linux发行版,专注于利用Docker容器和服务查询快速启动集群环境。但是,Docker镜像可能占用Docker主机上相当多的磁盘空间。普通...

1000
来自专栏Linux运维学习之路

day10、nfs+rsync全网备份及实时同步

题目要求 注意:博主使用的系统为: [root@web01 ~]# uname -a Linux web01 2.6.32-696.el6.x86_64 #1...

5826
来自专栏西二旗一哥

Ghost - How to change ghost's theme

出来两个包啦。 + 这个时候重新启动你的 Ghost。 如果你是 forever 那么敲这个

1904
来自专栏日常工作总结

Kubernetes中Consul重启自动加入集群实践

近期频繁的容器母机调整导致我们的业务需要多次重启,不得不寻找一种自动重建Consul集群的方式。在网上搜索和学习一番后发现,基本没有针对Kubernetes容器...

2503
来自专栏杂七杂八

Anaconda安装与初步使用

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本...

4745
来自专栏张戈的专栏

利用Centos或RedHat的iso镜像搭建本地yum仓库

这两天工作是用几台 PC 机给开发组搭建本地测试环境:CentOS-6.4-x86_64 + ant + svn。 为了操作简单及系统稳定,全部系统采用最小化安...

3825
来自专栏黑白安全

无需ROOT在手机安装kali工具集

https://github.com/LionSec/katoolin这个链接就是我们要安装的工具

1373
来自专栏小石不识月

如何运用Wercker开发与部署应用程序

Wercker 是一款软件自动化工具,旨在为开发者和企业改善持续集成(CI, Continuous-Integration)和持续交付(CD, Continuo...

1613
来自专栏YouMeek

Python 爬虫基础 — 介绍 + 环境搭建(不含代码级别资料)

3554
来自专栏编程坑太多

『高级篇』docker之DockerSwarm的集群环境搭建(28)

PS:以上就完成高可用的docker swarm的集群环境,其实真心比其他的简单。

1102

扫码关注云+社区