在OpenShift上部署Java EE微服务

我昨天用WildFly Swarm在博客上发布了有关简单JAX-RS微服务的博客。 您学习了如何使用Maven构建一个所谓的“胖子”,还使用Maven Docker插件对我们的微服务进行了Docker化并在Docker Machine上本地运行。 这是在本地测试事物的好方法。 到目前为止,缺少的是将其投入生产。 让我们看一下在OpenShift Origin上运行昨天的示例所需的步骤。

企业Java开发人员为什么要关心?

但是首先,让我们简要地探讨为什么Enterprise Java开发人员甚至应该关心所有这些。 关于最近的炒作和嗡嗡声,我有些疑惑。 当然,它们构成了一个有趣的运动场,您可以花费数小时来下载容器图像并在笔记本电脑上运行它们。 但是到目前为止,将它们投入生产是一个挑战。 Nigel的博客文章很好,关于Docker中不推荐使用的功能 。 它还有另一个宝石:一段称为“企业影响力”。 主要报价是:

“我敢肯定,这类事情总是在很酷的时髦公司[...]中完成的,但是绝对不会在生锈的老公司[...]中完成。”

(奈杰尔·波顿)

我绝对可以支持。 企业开发人员,架构师和项目经理正在采用慢得多且保守的方法来采用所有这些技术。 他们正在寻找成功管理基础架构和项目的方法。 所有这些技术都将进入我们的日常工作中,但它们将以更易于管理的方式出现。 因此,我们只是在做作业,对所有这些进行自我教育,并评估可以帮助我们的解决方案。 但是足够的一般思想; 让我们开始部署和扩展Java EE应用程序。

先决条件

安装并运行OpenShift Origin,并按照以下步骤在Docker容器中构建WildFly Swarm JAX-RS微服务 。 因为这是示例,所以我将进一步部署和扩展。

注意:我同时使用OpenShift项目中的all-in-vm和Fabric8项目提供的Vagrant映像,它们可以互换。它们的工作原理几乎相同,并且都依赖于OpenShift Origin。 .f8,例如代码或示例之一中的https://vagrant.f8:8443,则可以使用localhost或其他可互换的主机映射。)

什么是OpenShift起源?

OpenShift Origin是Red Hat分布式应用程序系统OpenShift的上游开源版本。 我们启动了这个项目,以提供一个平台,开发团队可以在该平台上构建和管理基于Docker和Kubernetes的云本机应用程序。 您可以在Github上找到源代码 ,我们知道您有改善OpenShift Origin的好主意。 因此,请袖手旁观, 加入我们的社区 。

掌握所有集成技术有很多知识。 但是社区正在努力使这对我们(企业Java开发人员)尽可能地易于理解和管理。 为了给您OpenShift的简要概述,这是所有工作原理的简单示意图:

起源概述

如果您一直在关注有关Docker和Kubernetes的最新话题,那么您会在这里看到很多常见的部分。 请求通过客户端进入,并在路由层结束。 它被分发到服务,并命中了一个容器,该容器在容器中运行我们的Docker映像之一。 吊舱由复制控制器控制。 当然,还有很多事情要做,但这应该是您现在需要了解的全部知识,以便对整个事情有一个初步的了解。

另一个更详细的概述为您提供了我们今天将要使用的零件的更精确的概念。

来源概览2

尤其是现在,集成的Docker注册表,映像流,部署配置和路由到我们的服务特别重要。

基础知识–管理界面和客户端工具

设置无用信息框并将其启动后,可以通过浏览到以下地址来访问基于Web的管理:https:// localhost:8443。 多合一虚拟机没有配置安全性。 这意味着将使用“全部允许”身份提供者。 您可以使用任何非空的用户名和密码登录。 “管理员”用户是具有所有权限的管理用户。 使用“ admin / admin”登录可让您充分使用Origin。 基于Web的管理非常适合查看日志文件和整体情况。 它(尚未)功能齐全,并且不允许您进行调整或更改。 首先,您需要使用命令行工具:“ oc”。 与网络管理类似,您还必须登录到OpenShift:

oc login https://localhost:8443

还提示您输入用户名和密码(admin / admin),并显示项目列表:

Authentication required for https://vagrant.f8:8443 (openshift)
Username: admin
Password:
Login successful.Using project "default".
You have access to the following projects and can switch between them with 'oc project <projectname>':* default (current)* openshift* openshift-infra

现在,您可以在OpenShift中进行一些管理了。

公开内部Docker注册表

如果我们想在OpenShift中运行dockerized应用程序,而docker-hub中没有该应用程序,则需要将其推送到OpenShift Docker Registry。 默认情况下,它不是外部公开的,因此首先要做的是通过Route在OpenShift Docker Registry中公开该构建。

oc create -f registry-route.json

json文件包含路由的定义,并签入我的Github存储库。 确保根据需要调整第8行中的主机名 。 为了使该示例正常工作,我在Windows上的主机文件中添加了以下映射:

172.28.128.4 registry.vagrant.f8

成功创建路由后,您所要做的就是相应地设置环境(在关注我的介绍性博客文章时,您已经完成了此操作。这只是在提醒您):

set DOCKER_HOST=tcp://vagrant.f8:2375

创建一个项目和一个用户

让我们为我们的示例创建一个新项目。 由于名称空间的原因,我们将在用户名和图像名之后精确命名项目:在本示例中为“ myfear”。

oc new-project myfear --description="WildFly Swarm Docker Image on OpenShift v3" --display-name="WildFly Swarm Project"

描述和显示名称是可选的,但可以使其在Web界面中看起来更好。

起源项目

让我们通过简单地登录为以下用户来创建用户“ myfear”:

c login https://vagrant.f8:8443 -u myfear

调整示例

我们需要从昨天的示例中更改pom.xml的某些部分。 首先,我们需要告诉Docker Maven插件,它应该使用运行在Registry.vagrant.f8:80的私有注册表。 想知道为什么不是5000端口? 因为,我们通过OpenShift公开了服务,而HAProxy通过端口80公开了该服务。取消注释pom.xml中的两行 :

<docker.host>tcp://vagrant.f8:2375</docker.host>
<docker.registry>registry.vagrant.f8:80</docker.registry>

并通过oc客户端工具获取用户myfear的登录令牌:

$oc whoami -t

这将输出如下内容:

ykHRzUGGu-FAo_ZS5RJFcndjYw0ry3bskMgFjqK1SZk

现在,在pom的<authConfig>元素中更新令牌。 基本上就是这样。

建立并推动形象

该图像已经在我之前的博客文章中构建,但是让我们在这里再次做它:

mvn clean install docker:build

现在将映像推送到我们的OpenShift Docker Registry:

mvn docker:push

它将输出将映像推送到registry.vagrant.f8:80 / myfear / swarm-sample的过程。

在OpenShift上运行Docker映像

现在,我们仅使用常规方法在OpenShift上启动新的Docker映像:

oc new-app --docker-image=myfear/swarm-sample:latest

观察发生了什么:OpenShift实际上在幕后创建了一些资源,以便处理部署和运行此Docker映像。 首先,它创建了一个服务,该服务标识它将代理和负载平衡的一组Pod。 服务分配IP地址和端口对,访问时将重定向到适当的后端。您关心服务的原因是,它们基本上充当Pod和需要使用内部运行Pod的任何事物之间的代理/负载平衡器。 OpenShift环境。 使用describe命令获取有关从我们的映像创建的OpenShift的完整描述:

oc describe service swarm-sample

哪个输出:

Name:                   swarm-sample
Namespace:              myfear
Labels:                 app=swarm-sample
Selector:               app=swarm-sample,deploymentconfig=swarm-sample
Type:                   ClusterIP
IP:                     172.30.25.44
Port:                   8080-tcp        8080/TCP
Endpoints:              172.17.0.5:8080
Session Affinity:       None
No events.

到目前为止,我们缺少的一件事是通过路线的外部映射。 您还记得我们为Docker Registry做的事情吗? 这是到目前为止的下一步也是最后一步。

oc expose service swarm-sample --hostname=wildfly-swarm.vagrant.f8

您可能已经猜到了,我们还需要在主机文件中映射主机名:

172.28.128.4    wildfly-swarm.vagrant.f8

我们完成了。 为什么我没有使用json文件创建路由? 因为我想向您展示,只要图像为端口使用正确的EXPOSE定义,它就会更容易,因此ocpose命令可以完成此工作而不必弄乱json。 这是相同的结果。

浏览至:http://wildfly-swarm.vagrant.f8/rs/customer并查看输出:

{"text":"WildFly Swarm Docker Application on OpenShift at http://wildfly-swarm.vagrant.f8/rs/ - Hostname: swarm-sample-1-7mmd7"}

主机名是容器,容器在其上运行。

翻译自: https://www.javacodegeeks.com/2015/10/deploying-java-ee-microservices-on-openshift.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rocketmq 订阅组_必须先理解的RocketMQ入门手册,才能再次深入解读

推荐阅读一下下2020年后想跳槽&#xff1f;MQ、ZK、Nginx、Kafk等分布式技术你都掌握了&#xff1f;阿里架构师推荐学习的《RabbitMQ实战指南》&#xff0c;渣渣的你都看过吗&#xff1f;RocketMQ入门手册RocketMQ是一个分布式、队列模型的开源消息中间件&#xff0c;前身是Met…

.net数据源控件绑定mysql_理解asp.net中DropDownList编辑数据源,绑定数据库数据。...

一、理解asp.net绑定数据库终于学习到了连接数据库部分的内容&#xff0c;杨中科老师视频看起来挺轻松的&#xff0c;如果是高清版就更ok了。我发现我学习新的编程语言会有一个特点&#xff0c;都想要赶紧学习数据库&#xff0c;数据就是一切&#xff0c;有了数据才能操作一切的…

jetty代理jetty_如何在Jetty中使用SPDY

jetty代理jettySPDY是Google提出的一种新协议&#xff0c;是针对网络的新协议。 SPDY与HTTP兼容&#xff0c;但尝试通过压缩&#xff0c;多路复用和优先级降低网页负载。准确地说&#xff0c;快速的目标是&#xff1a;&#xff08; http://dev.chromium.org/spdy/spdy-whitepap…

将Java EE与jOOQ结合使用的初学者指南

Java EE附带了自己的持久性API&#xff1a;JPA。 当您想要将RDBMS实体&#xff08;表/关系&#xff09;映射到Java实体&#xff08;类&#xff09;时&#xff0c;JPA最强大&#xff0c;主要遵循1&#xff1a;1映射策略。 其背后的想法是&#xff0c;业务逻辑通常并不像关系代数…

mysql备份需要停应用吗_对于含有innodb表的实例进行文件拷贝备份时必须停mysql实例吗...

展开全部在实际环境中&#xff0c;62616964757a686964616fe59b9ee7ad9431333361313261时不时需要备份恢复单个或多个表(注意&#xff1a;这里除非明确指定&#xff0c;所说的表一律指InnoDB表)&#xff0c;而对于innodb引擎恢复单个表需要整体的恢复&#xff0c;xtrabackup也可…

Apache Camel 2.16发布–十大亮点

Apache Camel 2.16于上周五发布。 这篇博客文章是我尝试在此新版本中进行前10名&#xff08;加1作为奖励&#xff09;的亮点。 1.动态到 来自骆驼用户的最常见的常见问题是如何将消息发送到端点&#xff0c;uri应该使用消息中的动态值&#xff08;例如标头&#xff09;。 在…

[原创软件]体验组批量加分工具

软件主要功能&#xff1a; 从excel批量导入用户QQ、昵称、年龄信息批量粘贴用户QQ或昵称进行筛选批量添加积分软件界面截图&#xff1a; 开发环境及语言&#xff1a; c#.NET Framework 4.0Visual Studio 2015更新日志&#xff1a; v1.2&#xff08;2016.9.30&#xff09; 增加格…

java 线性表的表示和实现_线性表中顺序表的的理解和实现(java)

线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素&#xff0c;这种表示也称作线性表的顺序存储结构或顺序映像。通常&#xff0c;称这种存储结构的线性表为顺序表。特点是&#xff1a;逻辑上相邻的数据元素&#xff0c;其物理次序上也是相邻的。顺序表…

akka连接是什么_什么是Akka?

akka连接是什么在深入探讨什么是Akka之前&#xff0c;让我们退后一步来了解并发编程的概念在应用程序开发世界中是如何演变的。 应用程序已从大型的整体程序演变为面向对象的模型。 随着Java EE和Spring框架的出现&#xff0c;应用程序设计演变为更多的基于流程或任务的设计模型…

c java 系统开发_java开发系统内核:使用C语言开发系统应用程序

更详细的讲解和代码调试演示过程&#xff0c;请参看视频用java开发C语言编译器如果你对机器学习感兴趣&#xff0c;请参看一下链接&#xff1a;机器学习&#xff1a;神经网络导论我们的操作系统通过增添内核接口导出机制后&#xff0c;已经可以作为平台&#xff0c;运行应用程序…

抑制java对修饰符的检查_Java 7对抑制异常的支持

抑制java对修饰符的检查在JDK 7中 &#xff0c;向Throwable类&#xff08; Exception和Error类的父类&#xff09;添加了一个新的构造函数和两个新方法。 添加了新的构造函数和两个新方法以支持“抑制的异常”&#xff08;不要与吞咽或忽略异常的不良做法相混淆&#xff09;。 …

编写基于事件的CQRS读取模型

关于事件源和CQRS的讨论似乎通常集中在CQRS上下文中的整体系统架构或领域驱动设计的各种形式。 但是&#xff0c;尽管也有一些有趣的考虑&#xff0c;但读取模型经常被忽略。 在本文中&#xff0c;我们将展示一个通过使用事件流填充视图模型的示例实现。 总览 读取模型的想法…

java else if和switch_如何优雅地优化代码中的的if else和switch

引言一般来说&#xff0c;随着我们项目的迭代以及业务的越来越复杂&#xff0c;项目中的分支判断会原来越多。当项目中涉及到复杂的业务判断或者分支逻辑时&#xff0c;我们就需要考虑是否需要对项目进行重构了&#xff0c;或者if else和switch case是否能够满足当前项目的复杂…

jQuery data

一个简单的Cache (function(){var __cache {},Cache {get: function(__name){return __cache[__name] || undefined;}, set: function(__name, __value){return (__cache[__name] __value)}};this.Cache Cache; })();alert(Cache.get("name")); //undefine…

设计模式(中介者模式-对象去耦)

声明&#xff1a;本系列文章内容摘自《iOS设计模式》 中介者模式 用一个对象来封装一系列对象的交互方式。中介者使个对象不需要显式地相互调用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 何时使用中介者模式 1.对象间的交互虽定义明确然而非…

windows服务器的DDOS防御,

抵御 SYN 攻击 SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞。要实施 SYN 洪水攻击&#xff0c;攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列。这会禁止其他用户建立网络连接。 要保护网络抵御 SYN 攻击&#xff0c;请按照下面这些通用步骤操作&…

java程序运行结果题_2016年关于Java编程与程序运行结果笔试题

2016年关于Java编程与程序运行结果笔试题1.Java编程,打印昨天的当前时刻public class YesterdayCurrent{public void main(String[] args){Calendar cal Calendar.getInstance();cal.add(Calendar.DATE, -1);System.out.println(cal.getTime());}}2.文件读写,实现一个计数器pu…

Hystrix简介– Hello World

在先前的博客文章中&#xff0c;我谈到了需要像Netflix Hystrix这样的库的动机。 在这里&#xff0c;我将跳入一些非常基本的方法来开始使用Hystrix&#xff0c;并在更复杂的用例中进行后续介绍。 你好&#xff0c;世界 以下是“ Hystrix命令”的一个简单的Hello World示例&am…

js base64编码 java 解码_JavaScript字符串的Base64编码与解码

有时文本里包含一些不可打印的符号&#xff0c;而你需要把它们传输到服务器&#xff0c;这时我们会需要用到Base64编码。或者你需要把一个图片内容以文本格式嵌入到网页中&#xff0c;这时你也会用到 Base64 编码。所谓 Base64 是一种基于64个可打印字符来表示二进制数据的方法…

ssh图片上传 java_ssh上传并显示图片

struts部分&#xff1a;attribute"upfileForm"input"/upload/uploadfile.jsp"name"upfileForm"path"/upfile"scope"request"validate"true"type"com.yourcompany.struts.action.UpfileAction">publi…