前回はTomcatのDockerイメージ(公式)にHTMLだけ追加してオリジナルのDockerイメージを作る…というのをやったので、今回はJavaも追加して動的アプリケーションを作っちゃおう~と思いました。前回作ったDockerイメージにJavaクラスを追加してindex.htmlをちょっと修正したらいけるだろう…と思っていたのですが、なんだか無理そうなのでEclipse先生とかjersey(JavaでREST APIを作るためのフレームワーク)様の力を借りたいと思います。
ざっくり手順
1)事前準備(各種ツールのダウンロード)
2)とりあえずEclipseで動くプロジェクトを作る
3)プロジェクトをWARでエクスポートしてDockerで動かす
使ったもの
Docker Desktop for Windows
Windows PowerShell
Eclipse
1)事前準備
それぞれ以下の公式サイトからダウンロード
Docker Desktop for Windows
Windows PowerShell
Eclipse ※JavaのFull Editionを入れました
2)とりあえずEclipseで動くプロジェクトを作る
①Mavenプロジェクトの作成
・Eclipseを立ち上げて「ファイル→新規→Mavenプロジェクト」をクリック
・デフォルト・ワークスペース・ロケーションの使用にチェックのまま「次へ」をクリック
・アーキタイプはgroupId=org.glassfish.jersey.archetypes/ArtifactId=jersey-quickstart-webappを選択して「次へ」をクリック
・任意のグループID、アーティファクトID、バージョン(デフォルトでOK)、パッケージを設定する
・作成されたプロジェクトを右クリックして「プロパティ」を選択→「Javaのビルドパス」を選択して実行環境をJavaSE-11に設定しておく
※バージョンがズレていると実行時にエラーでうまくいかなくなるので注意→詳細はこちら参照
これでサンプルプログラムつきのMavenプロジェクトができたので、サンプルプログラムをベースにしてJavaとJSPを作成する
②Javaクラスの作成
デフォルトでMyResource.javaが作成されているので、それを真似てWelcomeResource.javaを作成
package ukaf.simple2;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
@Path("welcome")
public class WelcomeResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getMsg(@QueryParam("name") String name) {
System.out.println(name);
return "Welcome " + name + " !!";
}
}
③index.jspの作成
デフォルトのindex.jspに少し追記(5行目)
<html>
<body>
<h2>Jersey1 RESTful Web Application!</h2>
<p><a href="webapi/myresource">Jersey resource</a>
<p><a href="webapi/welcome?name=YOURNAME">Go to welcome-page</a>
<p>Visit <a href="http://jersey.java.net">Project Jersey website</a>
for more information on Jersey!
</body>
</html>
④ビルド~テスト
・プロジェクトを右クリックして「実行→Mavenビルド」を選択
・コンソールタブにBUILD SUCCESSが表示されたことを確認したら、サーバタブを選択
・Tomcat10_java16を右クリックして「開始」を選択
・起動後、以下のURLにアクセスをする
http://localhost:8080/simple2
→Jersey resourceをクリックするとデフォルト作成されていたリソース(/myresource)を呼び出す
→Go to welcome-pageをクリックすると自作したリソース(/welcomeresource)を呼び出す
http://localhost:8080/simple2/webapi/myresource
画面に「Got it!」と表示される
http://localhost:8080/simple2/webapi/welcome?name=YOURNAME
画面に「Welcome YOURNAME !!」と表示される
3)プロジェクトをWARでエクスポートしてDockerで動かす
①WARを作成
・Eclipse上でプロジェクトを右クリックして「エクスポート」を選択
・「WARファイル」を選択
・任意の保存先を指定して「完了」をクリック
②Dockerfileを作成
・WARの保存先と同じ場所にDockerfileを新規作成(拡張子はなし)
・以下のように記述
FROM tomcat:latest
COPY simple2.war $CATALINA_HOME/webapps/
WORKDIR $CATALINA_HOME
$CATALINA_HOMEは/usr/local/tomcat
CMD ["catalina.sh","run"]
③ビルド~テスト
Windows PoweShellでDockerfileとWARの保存先まで移動して、以下を実行
docker build . -t welcome:1.0
docker run -it --rm -p 8880:8080 welcome:1.0
完了後、以下のURLにアクセス、2)④と同じ結果を得られることを確認
http://localhost:8880/simple2/
http://localhost:8880/simple2/webapi/myresource
http://localhost:8880/simple2/webapi/welcome?name=YOURNAME
以上です!
参考
Mavenプロジェクト作成
https://qiita.com/kamegu3/items/e492dacdb71a3f3a8c94
DockerでWARファイルを実行
https://qiita.com/tatematsu-k/items/2bdd2808a66f5cbd16ca