使用容器化的Oracle XE和现有的Oracle XE实例进行Docker Java App部署

背景

如今,许多企业对容器化应用程序堆栈实现应用程序可移植性并加快应用程序部署的前景感到非常兴奋。 但是,我们遇到了许多企业客户,他们仍然担心这种容器化工作如何适应他们现有的工作流程和流程。 在几乎所有与我们交谈过的大型组织中,Oracle数据库仍用于关键任务应用程序。

本着Oracle OpenWorld和JavaOne的精神,我们决定涵盖使用两种数据库设置部署的多层Java应用程序:

  • 具有Nginx(用于负载平衡),Tomat(作为应用程序服务器)和Oracle XE 11g(部署为容器)的 Movie Store应用程序
  • 具有Nginx(用于负载平衡)和Tomat(作为应用程序服务器)的Movie Store应用程序–但这一次连接到Oracle XE 11g现有正在运行的实例

之所以介绍第二个部署选项(即连接到现有的Oracle服务),是因为大多数企业希望首先对其Web和应用程序服务器进行容器化,但是数据库(如Oracle)可能仍需要时间进行容器化。 许多企业可能还没有准备好摆脱在典型的虚拟化基础架构上获得的高级数据库管理功能,而是在等待看到容器化的数据库管理功能成熟。

尽管如此,容器化企业Java应用程序仍然是一个挑战,主要是因为现有的应用程序组合框架无法解决复杂的依赖关系,外部集成或置备后的自动扩展工作流。 此外,容器的短暂设计意味着开发人员必须启动新的容器并在每次版本更新时重新创建复杂的依赖关系和外部集成。

DCHQ具有托管和内部部署版本,可解决所有这些挑战,并通过高级应用程序组合框架简化了企业Java应用程序的容器化,该框架通过跨映像环境变量绑定,可扩展的BASH脚本插件扩展了Docker Compose。可以在请求时间或后置资源时调用,并通过应用程序群集在多个主机或区域上实现高可用性,并支持自动扩展。

设置应用程序后,用户可以监视正在运行的容器的CPU,内存和I / O,获取通知和警报,并执行第二天的操作,例如预定备份,使用BASH脚本插件和Scale的容器更新。进出。 此外,借助Jenkins促进连续交付的即用型工作流使开发人员可以刷新正在运行的应用程序的Java WAR文件,而不会破坏现有的依赖关系和集成。

在此博客中,我们将介绍名为Movie Store的Java应用程序的端到端自动化,该应用程序以两种不同的方式进行部署:

  • 具有Nginx(用于负载平衡),Tomat(作为应用程序服务器)和Oracle XE 11g(部署为容器)的 Movie Store应用程序
  • 具有Nginx(用于负载平衡)和Tomat(作为应用程序服务器)的Movie Store应用程序–但这一次连接到Oracle XE 11g现有正在运行的实例

相同的Java WAR文件将部署在两个不同的应用程序服务器上。 DCHQ不仅可以自动执行应用程序部署,而且还可以与13种不同的云集成在一起,以使用软件定义的网络自动执行群集的配置和自动扩展。 我们将介绍:

  • 使用容器化的Oracle XE和现有的Oracle XE实例为基于Java的电影商店应用程序构建应用程序模板
  • 在SoftLayer上配置基础架构并将现有的Oracle XE主机添加到群集
  • 在SoftLayer群集上部署基于Java的多层电影商店应用程序
  • 监视正在运行的容器的CPU,内存和I / O
  • 触发构建后,使用Jenkins启用持续交付工作流来更新正在运行的应用程序的WAR文件
  • 向外扩展Tomcat应用服务器集群

使用容器化的Oracle XE和现有的Oracle XE实例为基于Java的电影商店应用程序构建应用程序模板

由于没有针对Oracle XE的正式Docker映像,因此我们将使用一个受欢迎的GitHub项目来构建映像( https://github.com/wnameless/docker-oracle-xe-11g )。

登录到DCHQ(托管的DCHQ.io或本地版本)后,用户可以导航到“ 自动 > 图像” ,然后单击+按钮选择Dokerfile(Git / GitHub / GitBucket) 。 然后,我们可以通过指向公共GitHub项目并将新映像推送到我们自己的“私有”存储库(dchq / oracle-xe-11g:latest),来自动创建Oracle XE Docker映像。

然后,用户可以导航至管理 > 模板 ,然后单击+按钮以创建新的Docker Compose模板。

我们将为所需的两个设置使用相同的应用程序模板。 如果我们需要连接到现有的Oracle服务,那么我们要做的就是简单地删除应用程序模板中的数据库条目,并在请求该应用程序的应用程序服务器中提供正确的数据库凭据。

您会注意到Nginx正在调用BASH脚本插件来动态(或在请求时)在default.conf文件中添加应用程序服务器的容器IP。

应用程序服务器(Tomcat)也正在调用BASH脚本插件,以从目录/usr/local/tomcat/webapps/ROOT.war中的外部URL部署Movie Store Java WAR文件。

您会注意到, cluster_size参数使您可以指定要启动的容器数(具有相同的应用程序依赖性)。

您会注意到,我们使用参数Registry_id能够从私有Docker Hub存储库中提取Oracle XE映像。 实际的ID可以通过导航到管理 > 云提供商和回购 ,然后点击(您泊坞中心帐户) 编辑检索。 该ID将在那里复制和粘贴。

host参数允许您指定要用于容器部署的主机。 这样,您可以确保跨不同主机(或区域)的应用程序服务器群集的高可用性,并且可以遵守关联性规则以确保数据库在例如单独的主机上运行。 以下是host参数支持的值:

  • host1,host2,host3等–在数据中心(或集群)中随机选择一个主机进行容器部署
  • <IP地址1,IP地址2等> -允许用户指定用于容器部署的实际IP地址
  • <主机名1,主机名2等> -允许用户指定用于容器部署的实际主机名
  • 通配符 (例如“ db- *”或“ app-srv- *”)–指定要在主机名中使用的通配符

此外,用户可以通过引用另一个图像的环境变量来创建跨图像环境变量绑定。 在这种情况下,我们进行了几个绑定-包括database.url = jdbc:oracle:thin:@ {{Oracle | container_ip}}:1521:{{Oracle | sid}}-在其中解析了数据库容器IP和SID在请求时动态地进行动态更新,并用于确保应用程序服务器可以与数据库建立连接。

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

  • {{字母数字| 8}} –创建一个随机的8个字符的字母数字字符串。 这对于创建随机密码最有用。
  • {{<图像名称> | ip}} –允许您输入容器的主机IP地址作为环境变量的值。 这对于允许中间件层与数据库建立连接最有用。
  • {{<图像名称> | container_ip}} –允许您输入容器的内部IP作为环境变量的值。 这对于允许中间件层与数据库建立安全连接(不暴露数据库端口)最有用。
  • {{<图像名称> | port _ <端口号>}} –允许您输入容器的端口号作为环境变量的值。 这对于允许中间件层与数据库建立连接最有用。 在这种情况下,指定的端口号必须是内部端口号,即不是分配给容器的外部端口。 例如,{{PostgreSQL | port_5432}}将转换为实际的外部端口,该端口将允许中间件层与数据库建立连接。
  • {{<图像名称> | <环境变量名称>}} –允许您将一个图像的环境变量的值输入到另一个图像的环境变量中。 这里的用例是无止境的-因为大多数多层应用程序将具有跨映像依赖关系。

5701731_orig

在SoftLayer上配置基础架构并将现有的Oracle XE主机添加到群集

保存应用程序后,用户可以注册云提供商以自动在13个不同的云端点上配置和自动扩展群集,这些端点包括vSphere(处于试用模式),OpenStack,CloudStack,Amazon Web Services,SoftLayer,Microsoft Azure ,DigitalOcean,HP Public Cloud,IBM SoftLayer,Google Compute Engine等。

首先,用户可以通过导航到“ 管理” >“ 回购和云提供者” ,然后单击“ +”按钮选择“ SoftLayer(IBM)”来注册用于SoftLayer的云提供者(例如 。 需要提供SoftLayer API密钥-可以从SoftLayer面板的“帐户设置”部分中检索该密钥。

4098309_orig

然后,用户可以使用自动扩展策略创建集群,以自动启动新的Cloud Server。 可以通过导航到“ 管理” >“ 集群”页面,然后单击+按钮来完成。 您可以选择一个基于容量的放置策略,在此示例中为期两天,然后将Weave用作网络层,以促进集群中多个主机之间安全,受密码保护的跨容器通信。

8709993_orig

用户现在可以导航到“ 管理” >“ 主机” ,然后单击+按钮以选择SoftLayer ,从而在新创建的群集上配置大量Cloud Server。 选择云提供商后,用户可以选择所需的区域,大小和图像。 可以在新的云服务器上打开端口(例如,对于Docker是32000-59000,对于Weave是6783,对于RabbitMQ是5672)。 然后选择一个集群,然后可以指定云服务器的数量。

4277151_orig

创建集群后,我们可以将已经运行的Oracle XE实例的主机添加到该集群中。 可以通过导航到Manage > Hosts ,然后单击Any Host / VM来完成 。 然后,用户可以提供名称IP,然后选择之前创建的群集。 当用户单击“保存”时,用户需要在Oracle XE主机上执行的屏幕上提供一个自动生成的脚本,以安装DCHQ代理以及Docker和软件定义的网络层。 您会注意到dchq_agent_isntall.sh脚本具有六个参数:

  • 唯一的服务器密钥
  • DCHQ服务器IP /主机名
  • RabbitMQ端口
  • Weave网络的名称(例如weave.local)
  • Weave网络的随机密码
  • 在该Weave网络中注册的第一台服务器的IP

在SoftLayer群集上部署基于Java的多层电影商店应用程序

设置云服务器后,用户可以在新的云服务器上部署基于Docker的多层Java应用程序。

我们将首先使用Oracle XE容器部署Java应用程序。 这可以通过导航到自助服务 ,然后单击“ 自定义”来请求多层应用程序来完成。

用户可以选择环境标签(例如DEV或QE)和在单击“运行”之前创建的SoftLayer群集。

9351382_orig

9949505_orig

为了部署完全相同的应用程序,但是这次连接到现有的Oracle XE实例,我们简单地删除了应用程序模板中的数据库条目,并配置了Tomcat的环境变量,以便它们直接连接到现有的Oracle XE实例。

  • database.url = jdbc:oracle:thin:@ {{Oracle | container_ip}}:1521:{{Oracle | sid}}
  • database.username = {{Oracle |用户名}}
  • database.password = {{{Oracle |密码}}

用户可以选择环境标签(例如DEV或QE)和在单击“运行”之前创建的SoftLayer群集。

901656_orig

9757590_orig

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

一旦应用程序启动并运行,我们的开发人员将监视正在运行的容器的CPU,内存和I / O,以在这些指标超过预定义的阈值时获得警报。 这在我们的开发人员执行功能和负载测试时特别有用。

用户可以执行历史监视分析,并将问题与容器更新或构建部署相关联。 这可以通过单击正在运行的应用程序的“ 动作”菜单,然后单击“ 监视”来完成 。 可以选择一个自定义日期范围以历史查看CPU,内存和I / O。

366892_orig

767823_orig

触发构建时,使用Jenkins启用持续交付工作流以更新正在运行的应用程序的WAR文件

对于希望遵循“不可变”容器模型的开发人员,通过重建包含应用程序代码的Docker映像并在每次应用程序更新时旋转新容器,DCHQ提供了自动构建功能(在Automate > Image Build下 ),允许开发人员自动创建Docker映像来自Dockerfiles或包含Dockerfiles的私有GitHub项目。

但是,许多开发人员可能希望使用最新的Java WAR文件更新正在运行的应用程序服务器容器 。 为此,DCHQ允许开发人员使用Jenkins启用连续交付工作流程。 这可以通过单击正在运行的应用程序的“ 操作”菜单上,然后选择“ 连续交付”来完成 。 用户可以选择已经向DCHQ注册的Jenkins实例,将在Jenkins上生成最新WAR文件的实际Job,然后选择BASH脚本插件来获取此构建并将其部署在运行的应用程序服务器上。 保存此策略后,只要触发构建,DCHQ就会从Jenkins获取最新的WAR文件,并将其部署在运行的应用程序服务器上。

因此,开发人员将始终将最新的Java WAR文件部署在DEV / TEST环境中的运行容器上。

294126_orig

向外扩展Tomcat应用服务器集群

如果正在运行的应用程序受到资源限制,则用户可以扩展应用程序以满足不断增加的负载。 此外,例如,用户可以在工作时间安排向外扩展,在周末安排向外扩展。

要将Tomcat服务器集群从2扩展到4,用户可以单击正在运行的应用程序的“ 操作”菜单,然后选择“ 扩展” 。 然后,用户可以为群集指定新的大小,然后单击“立即运行”

6594973_orig

然后,我们使用BASH插件来更新Nginx的default.conf文件,以便它知道添加的新应用程序服务器。 还可以安排BASH脚本插件来适应用例,例如清理日志或以定义的频率更新配置。 应用程序时间轴可用于跟踪对应用程序所做的每个更改,以进行审核和诊断。

要在正在运行的容器上执行插件,用户可以单击正在运行的应用程序的“ 操作”菜单,然后选择“ 插件” 。 然后,用户可以选择负载平衡器(Nginx)容器,搜索需要执行的插件,并使用切换按钮启用容器重新启动。 该插件的默认参数将动态解析正在运行的Tomcat服务器的所有容器IP,并将它们添加为default.conf文件的一部分。

5334520_orig

应用程序时间轴可用于跟踪对应用程序所做的每个更改,以进行审核和诊断。 可以从正在运行的应用程序页面底部的可扩展菜单中访问它。

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

结论

容器化企业Java应用程序仍然是一个挑战,主要是因为现有的应用程序组合框架无法解决复杂的依赖关系,外部集成或置备后的自动扩展工作流。 此外,容器的短暂设计意味着开发人员必须启动新的容器并在每次版本更新时重新创建复杂的依赖关系和外部集成。

DCHQ具有托管和内部部署版本,可解决所有这些挑战,并通过高级应用程序组合框架简化企业Java应用程序的容器化,该框架可促进跨映像环境变量绑定,可在以下位置调用的可扩展BASH脚本插件。请求时间或事后置备,以及应用程序群集以在多个主机或区域上实现高可用性,并支持自动扩展。

企业现在可以容器化其应用程序的Web和应用程序服务器组件,同时连接到他们正在运行的现有数据库服务。 此外,无需更改Java应用程序的连续交付流程,而是可以轻松地将其插入DCHQ应用程序部署和管理工作流程中。

免费注册在http://DCHQ.io或下载DCHQ内部部署
可以访问现成的多层Java应用程序模板以及应用程序生命周期管理功能,例如监视,容器更新,扩展/扩展和连续交付。

翻译自: https://www.javacodegeeks.com/2015/10/docker-java-app-deployment-with-a-containerized-oracle-xe-and-with-an-existing-oracle-xe-instance.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值