Spring MVC WEBアプリを Docker 環境で起動する
目的
Spring MVC WEBアプリを Docker 環境で起動して理解を深めます。
実現すること
ローカル (Ubuntu) の Docker 環境 (Docker Desktop) で Spring MVC WEBアプリの Docker コンテナを起動します。
開発環境
- Windows 11 Home 22H2 を使用しています。
- WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。
WSL (Microsoft Store アプリ版)
> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47
Ubuntu
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Java JDK ※ 最小構成 Java JDK の導入と Hello World!
$ java -version
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment (build 11.0.17+8-post-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 11.0.17+8-post-Ubuntu-1ubuntu222.04, mixed mode, sharing)
Maven ※ 最小構成 Maven の導入と Hello World!
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.17, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Docker Desktop
Version 4.16.3 (96739)
$ docker --version
Docker version 20.10.22, build 3a2c30b
$ docker-compose --version
Docker Compose version v2.15.1
※ この記事では基本的に Ubuntu のターミナルで操作を行います。
"Hello World" を表示する手順
Spring MVC WEBアプリの作成
最小構成 Spring MVC WEBアプリの Hello World! を参照してください。
プロジェクトフォルダに移動
※ ~/tmp/hello-spring-mvc をプロジェクトフォルダとします。
$ cd ~/tmp/hello-spring-mvc
ビルド
ビルド
※ target/hello-spring-mvc.war が作成されます。
$ mvn clean install
docker-compose.yml (Docker) の作成
$ vim docker-compose.yml
ファイルの内容
version: '3'
services:
app:
image: jetty:10.0.13-jre11-alpine
ports:
- "8080:8080"
volumes:
- ./target:/var/lib/jetty/webapps
※ポイント
- ホスト側の /target/hello-spring-mvc.war を Docker コンテナ側の /var/lib/jetty/webapps にマウントします。
ディレクトリ・ファイル構成
$ tree
.
├── docker-compose.yml
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── springmvc
│ │ ├── WebApplication.java
│ │ ├── config
│ │ │ └── WebMvcConfig.java
│ │ └── controller
│ │ └── HelloWorldController.java
│ └── resources
│ └── templates
│ └── hello.html
Docker 環境で起動
Docker Compose の確認
$ docker-compose --version
Docker Compose version v2.15.1
コンテナ起動
$ docker-compose up -d
[+] Running 2/2
⠿ Network hello-spring-mvc_default Created
⠿ Container hello-spring-mvc-app-1 Started
※ Docker Desktop を確認するとコンテナとして起動しています。
WEBブラウザで確認
※ 8080 で 404 - Not Found の場合、ポート 8080 が使用されている(※その残骸などの)可能性があります。
http://localhost:8080/hello-spring-mvc/hello
WEBブラウザに "Hello World!" と表示することが出来ました。
[おまけ] Docker イメージを作成する手順
Dockerfile を使用して Docker イメージを作成します。
Dockerfile 作成
$ vim Dockerfile
ファイルの内容
FROM jetty:10.0.13-jre11-alpine
COPY target/*.war /var/lib/jetty/webapps/app.war
EXPOSE 8080
Docker イメージをビルド
$ docker build -t app-hello-spring-mvc .
app-hello-spring-mvc イメージが作成されました。
作成したイメージから別のコンテナを起動
$ docker run -p 8080:8080 -d --name app-hello-spring-mvc-1 app-hello-spring-mvc
WEBブラウザで確認
http://localhost:8080/app/hello
WEBブラウザに "Hello World!" と表示することが出来ました。
まとめ
- Ubuntu の 最小構成の Java 開発環境で Spring MVC WEBアプリを Docker 環境にてコンテナとして起動させることが出来ました。