dockerでtomcat環境を構築してJavaアプリケーションをデプロイする

スッキリわかるサーブレット&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-tomcat

終了する際はdocker-compose downを実行。
dockerでtomcat環境を構築することができた👍