openshift java_在OpenShift上部署Java应用程序的快速指南

在本文中,我将向您展示如何在OpenShift(Minishift)上部署应用程序,将它们与其中暴露的其他服务连接起来,还是使用由OpenShift提供的其他一些有趣的部署功能。OpenShift构建在Docker容器和Kubernetes容器集群协调器之上。

运行Minishift

我们使用Minishift在本地机器上运行单节点OpenShift集群。安装MiniShift之前的唯一要求是安装虚拟化工具。我使用Oracle VirtualBox作为管理程序,所以我应该将 --vm-driver参数设置 为virtualbox 在我的运行命令中。

$ minishift start --vm -driver = virtualbox --memory = 3G

运行Docker

事实证明,您可以轻松地重用由Minishift管理的Docker守护进程,以便直接从命令行运行Docker命令而无需任何额外的安装。要实现这一点,只需在启动Minishift后运行以下命令。

@FOR / f “tokens = * delims = ^ L”%i IN('minishift docker-env')DO @call%i

运行OpenShift CLI

在开始Minishift任何实践练习之前,需要使用的最后一个工具是CLI。它在命令下可用oc。要在命令行上启用它,请运行以下命令:

$ minishift oc-env

$ SET PATH = C:\ Users \ minkowp \ .minishift \ cache \ oc \ v 3 .9.0 \ windows;%PATH%

$ REM @FOR / f “tokens = *”%i IN('minishift oc-env')DO @call%i

或者,您可以使用端口8443下提供的OpenShift Web控制台。在我的Windows机器上,默认情况下,它是在地址192.168.99.100下启动的。

构建示例应用程序的Docker镜像

我准备了用于呈现OpenShift部署过程的两个示例应用程序。这些简单的Java和Vert.x应用程序提供了一个HTTP API并将数据存储在MongoDB中。我们需要用这些应用程序构建Docker镜像。源代码在分支openshift的GitHub上可用。这里有一个示例Dockerfile 。account-vertx-service

FROM openjdk:8-jre-alpine

ENV VERTICLE_FILE account-vertx-service-1.0-SNAPSHOT.jar

ENV VERTICLE_HOME / usr / verticles

ENV DATABASE_USER mongo

ENV DATABASE_PASSWORD mongo

ENV DATABASE_NAME db

EXPOSE 8095

COPY target / $ VERTICLE_FILE $ VERTICLE_HOME /

WORKDIR $ VERTICLE_HOME

入口点[“sh”,“-c”]

CMD [“exec java -jar $ VERTICLE_FILE”]

转到 account-vertx-service目录并运行以下命令以从上面可见的Dockerfile构建一个映像。

$ docker build -t piomin / account-vertx-service。

应执行相同的步骤customer-vertx-service。之后,您将创建两个图像,两个图像都是相同的版本latest,现在可以在Minishift上进行部署和运行。

准备OpenShift部署描述符

在使用OpenShift时,我们应用程序部署的第一步是创建一个YAML配置文件。该文件包含有关部署的基本信息,例如用于运行应用程序(1)的容器,扩展(2),响应事件驱动自动部署的触发器(3),或者在平台上部署Pod的策略(4)。

kind: "DeploymentConfig"

apiVersion: "v1"

metadata:

name: "account-service"

spec:

template:

metadata:

labels:

name: "account-service"

spec:

containers: # (1)

- name: "account-vertx-service"

image: "piomin/account-vertx-service:latest"

ports:

- containerPort: 8095

protocol: "TCP"

replicas: 1 # (2)

triggers: # (3)

- type: "ConfigChange"

- type: "ImageChange"

imageChangeParams:

automatic: true

containerNames:

- "account-vertx-service"

from:

kind: "ImageStreamTag"

name: "account-vertx-service:latest"

strategy: # (4)

type: "Rolling"

paused: false

revisionHistoryLimit: 2

部署配置可以oc像使用其他资源一样使用该命令进行管理。您可以使用该 oc apply命令创建新配置或更新现有配置 。

$ oc apply -f account-deployment.yaml

你可能会有点惊讶,但这个命令不会触发任何构建,也不会启动这个窗格。实际上,您只创建了deploymentConfig描述部署过程的类型资源。您可以使用其他一些oc命令来启动此过程,但首先,让我们仔细查看应用程序所需的资源。

注入环境变量

正如我之前提到的,我们的示例应用程序使用外部数据源。他们需要打开与现有MongoDB实例的连接,以便存储使用应用程序公开的HTTP端点传递的数据。这里是我们的 MongoVerticle类,它负责与MongoDB建立客户端连接。它使用环境变量来设置安全证书和数据库名称。

publicclassMongoVerticleextendsAbstractVerticle {

@Override

publicvoidstart() throwsException {

ConfigStoreOptionsenvStore=newConfigStoreOptions()

.setType("env")

.setConfig(newJsonObject().put("keys", newJsonArray().add("DATABASE_USER").add("DATABASE_PASSWORD").add("DATABASE_NAME")));

ConfigRetrieverOptionsoptions=newConfigRetrieverOptions().addStore(envStore);

ConfigRetrieverretriever=ConfigRetriever.create(vertx, options);

retriever.getConfig(r-> {

Stringuser=r.result().getString("DATABASE_USER");

Stringpassword=r.result().getString("DATABASE_PASSWORD");

Stringdb=r.result().getString("DATABASE_NAME");

JsonObjectconfig=newJsonObject();

config.put("connection_string", "mongodb://"+user+":"+password+"@mongodb/"+db);

finalMongoClientclient=MongoClient.createShared(vertx, config);

finalAccountRepositoryservice=newAccountRepositoryImpl(client);

ProxyHelper.registerService(AccountRepository.class, vertx, service, "account-service");

});

}

}

MongoDB在OpenShift预定义的Docker镜像目录中提供。只需单击“目录”选项卡中的“MongoDB”图标,即可轻松将其部署到Minishift实例上 。如果您在部署设置期间未提供您的用户名和密码,它们将自动生成。所有属性都可用作部署环境变量,并存储为,其中是部署的名称。

secrets/mongodbmongodb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值