Minishiftから引き込まれるOpenShift Originには、WildFlyのImageStreamが含まれています。
これを使うとWARファイルはデプロイできるのですが、Spring Bootアプリケーションでよくあるような、
組み込みTomcatを使用したUber JARの場合とかどうなるのかなぁと…。
調べまわった結果、OpenJDKのImageStreamの定義がこちらにありました。
https://github.com/jboss-openshift/application-templates/tree/master/openjdk
これ、リポジトリを見ると
This project contains OpenShift v3 application templates which support applications based on JBoss Middleware products.
https://github.com/jboss-openshift/application-templates
なので、商用環境とかで使う場合は要ライセンス的な感じですよねぇ。JBoss EAPとかのImageStreamもありますし。
とりあえず、今回はMinishift上で軽く動かしてみるだけで試してみることに。
参考)
Source-to-Image (S2I) / Java
環境
確認した環境は、こちらです。
$ minishift version minishift v1.22.0+7163416 $ minishift status Minishift: Running Profile: minishift OpenShift: Running (openshift v3.9.0+71543b2-33) DiskUsage: 14% of 19G (Mounted On: /mnt/sda1) CacheUsage: 1.946 GB (used by oc binary, ISO or cached images)
サンプルアプリケーション
用意したサンプルアプリケーションは、こちら。
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>hello-app</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring-boot.version>2.0.4.RELEASE</spring-boot.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
src/main/java/com/example/App.java
package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication public class App { public static void main(String... args) { SpringApplication.run(App.class, args); } @GetMapping("hello") public String hello() { return "Hello My Application!!"; } }
これを、どこかしらのGitリポジトリに登録しておきます。
OpenJDKのImageStreamの登録
今回は、このImageStreamの定義のv1.4.15を使ってみることにしました。
https://raw.githubusercontent.com/jboss-openshift/application-templates/ose-v1.4.15/openjdk/openjdk18-image-stream.json
以下のコマンドで、openshift namespaceにImageStreamを登録します。この時、cluster-admin権限のあるアカウントで行ってください。
$ oc create -f https://raw.githubusercontent.com/jboss-openshift/application-templates/ose-v1.4.15/openjdk/openjdk18-image-stream.json -n openshift --as system:admin imagestream "redhat-openjdk18-openshift" created imagestream "java" created
openshift namespaceのImageStreamに、対象のImageStreamが登録されます。
$ oc get is -n openshift | grep -E 'jdk|java' java 172.30.1.1:5000/openshift/java 8,latest About a minute ago redhat-openjdk18-openshift 172.30.1.1:5000/openshift/redhat-openjdk18-openshift 1.0,1.1,1.2 + 2 more... About a minute ago
アプリケーションのデプロイ
あとは、このImageStreamを使って「oc new-app」を実行します。
$ oc new-app [GitリポジトリのURL] -i openshift/java # または $ oc new-app [GitリポジトリのURL] --image-stream=openshift/java
これで、Uber JARなアプリケーションがデプロイできます。