dockerでtomcat環境を構築してJavaアプリケーションをデプロイする
公開: 2023/08/12
スッキリわかるサーブレット&JSPを参考にして学習を進めていく中で、Tomcatの起動・停止が面倒になったのとローカルを汚したくないという理由でdockerでTomcat環境を構築することにした。
環境
- Docker: 20.10.11
- Java: 16.0.1
- Tomcat: 10.0.14
ディレクトリ構成
web-app
├── docker
│ └── Dockerfile
├── docker-compose.yaml
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── webapp
│ │ └── HelloServlet.java
│ └── webapp
│ ├── WEB-INF
│ │ └── web.xml
│ ├── index.jsp
└── target
├── classes
│ └──...
├── generated-sources
│ └── annotations
├── maven-archiver
│ └── pom.properties
├── maven-status
│ └── ...
├── web-app
│ ├── ...
└── web-app.war
Dockerfile
Dockerfileはシンプルでtomcatのイメージを指定して、ローカルにあるwar
ファイルをコンテナにコピーしてあげるだけ。
tomcatコンテナ内では以下の環境変数が使用できる。
CATALINA_BASE: /usr/local/tomcat
CATALINA_HOME: /usr/local/tomcat
CATALINA_TMPDIR: /usr/local/tomcat/temp
JRE_HOME: /usr
CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
FROM tomcat: 10.0.14
COPY ../taget/web-app.war $CATALINA_HOME/webapps/
docker-compsoe
docker/Dockerfile
を使用してイメージをビルドし、コンテナを起動する。いちいちビルドし直すのは面倒だったので、volumes
を指定している。
version: '3'
services:
tomcat:
build:
context: .
dockerfile: docker/Dockerfile
volumes:
- ./target/web-app.war:/usr/local/tomcat/webapps/web-app.war
ports:
- "8080:8080"
起動テスト
docker-compose up -d
コマンドでコンテナを起動し、localhost:8080/web-app
にアクセスするとindex.jsp
の内容が画面に表示される。
今回は以下のようなフォームを作成した。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="formservlet" method="post">
<label for="name">Name:</label><br>
<input type="text" id="name" name="name"><br><br>
<label for="email">Email:</label><br>
<input type="email" id="email" name="email"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
表示画面
終了する際はdocker-compose down
を実行。
dockerでtomcat環境を構築することができた👍