概要
- WAR を作成
- Dockerfile を作成する
- Code Engine にデプロイする
WAR の準備
サンプルとしてこんなWebアプリを用意しておきます。
今回はJSPを配置しただけのものです。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1><%=new java.util.Date()%></h1>
<ol>
<li>OK</li>
</ol>
</body>
</html>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>hello-maven-webapp</groupId>
<artifactId>hello-maven-webapp</artifactId>
<version>1.0.0.0</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.9.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
mvn package コマンドでビルドすると target ディレクトリに hello-maven-webapp-1.0.0.0.war が生成されます。
Docker Build の準備
適当なフォルダ(例:hello-ibm-codeengine-tomcat)を作成して、そこに作成済みのWAR(例:hello-maven-webapp-1.0.0.0.war)をコピーしてください。また空のテキストファイルとして Dockerfile を作成し、以下のように編集してください。
ベースとなるTomcatは8.5にしておりますが、お好みのバージョンやリリースで作ってください。
FROM tomcat:8.5-jdk15-openjdk-slim
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
WORKDIR ${CATALINA_HOME}
COPY hello-maven-webapp-1.0.0.0.war webapps/hello-maven-webapp-1.0.0.0.war
Code Engine の準備
プロジェクトを作成しておきます。
ここでは「demoapp」という名前でプロジェクトを作成してあります。
一つのプロジェクトに対し、複数のアプリケーションをデプロイすることができます。
Code Engine CLI の操作
前提
IBM Cloud CLI (ibmcloudコマンド) を事前に準備しておく必要があります
Getting started with the IBM Cloud CLI
https://cloud.ibm.com/docs/cli?locale=ja
Installing the stand-alone IBM Cloud CLI
https://cloud.ibm.com/docs/cli?topic=cli-install-ibmcloud-cli&locale=ja
→ インストーラーはこちら https://github.com/IBM-Cloud/ibm-cloud-cli-release/releases/
Code Engine CLI プラグインもインストールしておきます
Code Engine CLI プラグインのインストール
https://cloud.ibm.com/docs/codeengine?topic=codeengine-install-cli#install-cli-plugin
→ Code Engine CLI プラグインのインストールコマンドはこちら
$ ibmcloud plugin install code-engine
CLIからログイン
>ibmcloud login
SSO が適用されている場合は --sso オプションを付けます
> ibmcloud login --sso
複数の組織に紐づいている場合、「ターゲット」を選択します。
>ibmcloud login --sso
API エンドポイント: https://cloud.ibm.com
リージョン: jp-tok
https://xxx.xxx.iam.cloud.ibm.com/identity/passcode からワンタイム・コードを取得して、続行します。
デフォルトのブラウザーで URL を開きますか? [Y/n] > Y
ワンタイム・コード >
認証中です...
OK
アカウントを選択:
1. XXX (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)
2. YYY (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) <-> 2222222
3. ZZZ (cccccccccccccccccccccccccccccccc) <-> 3333333
数値を入力してください> 3
ターゲットのアカウント ZZZ <-> 3333333
API エンドポイント: https://cloud.ibm.com
Region: jp-tok
ユーザー: xxx@xxx.com
アカウント: ZZZ (cccccccccccccccccccccccccccccccc) <-> 3333333
リソース・グループ: リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用して ください
CF API エンドポイント:
組織:
スペース:
ターゲットリソースの指定
>ibmcloud target -g default
↑のコマンドを実行しておかないと「ターゲットになっているリソース・グループがありません。'ibmcloud target -g RESOURCE_GROUP_NAME' を実行してください。」と叱られます。
プロジェクトのLIST
Code Engine のWeb画面で作っておいたプロジェクトを表示します。
>ibmcloud ce project list
プロジェクトを取得中...
OK
名前 ID 状況 有効 選択済み タグ 領域 リソース・グループ 経過時間
demoapp XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX active true false jp-tok default 39m
デプロイ対象のCode Engineプロジェクトを指定する
どのプロジェクトのアプリをデプロイするのか、を指定します。
>ibmcloud ce project select --name demoapp
ビルド・デプロイコマンドの実行
ここが一番重要です。
最後にWebアプリのURLが表示されます。
>ibmcloud ce application create --name demo --build-source .
アプリケーション 'demo' を作成中...
パス「.」からアップロードするファイルのパッケージ化...
ビルド実行 'demo-run-NNNNN-NNNNNNNNN'を送信中...
イメージ 'private.jp.icr.io/ce--XXXXX-XXXXXXXXXXX/app-demo:NNNNNN-NNNN-XXXXX' を作成しています ...
ビルド実行が完了するのを待機しています...
ビルド実行状況: '実行中'
ビルド実行が正常に完了しました。
ビルド実行の状況を確認するには、'ibmcloud ce buildrun get -n demo-run-NNNNN-NNNNNNNNN' を実行してください。
アプリケーション 'demo' が作動可能になるのを待機しています。
構成 'demo' は、リビジョンが準備完了になるのを待機しています。
入口はまだ調整されていません。
ロード・バランサーが準備完了になるのを待機しています。
アプリケーション状況を確認するには、'ibmcloud ce application get -n demo' を実行してください。
OK
https://demo.XXXXXXXX.jp-tok.codeengine.appdomain.cloud
>
アプリを開いてみる
URL「demo.XXXXXXXX.jp-tok.codeengine.appdomain.cloud/hello-maven-webapp-1.0.0.0/index.jsp」を開いてみます。無事にJSPがコンパイルされて日付が動的に表示されるのを確認できたらOKです。
以上です。
ひとこと
簡単なことは簡単にできたほうがよいです。
参考になるかもしれないページ
Deploying your app from local source code with the CLI
https://cloud.ibm.com/docs/codeengine?topic=codeengine-app-local-source-code
Getting started with IBM Cloud Code Engine
https://cloud.ibm.com/docs/codeengine#app-hello
CLI を使用したローカル・ソース・コードからのアプリのデプロイ
https://cloud.ibm.com/docs/codeengine?topic=codeengine-app-local-source-code
Deploying and scaling applications
https://cloud.ibm.com/docs/codeengine?topic=codeengine-deploy-app-tutorial