背景
TomcatのDocker imageを使用してJavaServletを使ったサーバーを作りたい!
と思ったけど,Webアプリケーション初心者なのでTomcat公式イメージの使い方がよくわかりませんでした.
同じような問題を抱えている人に届くと嬉しいです.
環境
- MacOS Catalina
- Docker Desktop
Client: Docker Engine - Community
Cloud integration: 1.0.2
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 16:58:31 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:07:04 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
使用したDocker image
- tomcat:8.5.35
Tomcat公式イメージの使い方
runの基本構文
基本的には以下のようにしてdocker runします.
docker run --rm -v /directory/has/.war:/usr/local/tomcat/webapps -p xxxx:8080 tomcat:8.5.35
ここで早くもポイントなのが /directory/has/.war
と xxxx
の部分です.
/directory/has/.war
はwarファイルの入ったディレクトリを,
xxxx
はポートフォワーディングしたいホスト側ポートを表現しています.
Tomcatイメージのデフォルト動作
先程述べたようにwarファイルの入ったディレクトリを /usr/local/tomcat/webapps
にマウントしてあげると,Tomcatさんが勝手にwarファイルを解凍してデプロイしてくれます.(便利ですね)
Tomcatイメージを使った開発
warファイルがあると.つまりアプリが完成している場合についてはお話しました.
しかし,今回の私のようにTomcatイメージを使って開発がしたい人もいるでしょう(いて下さい).
そんなときは以下のようにDocker runしましょう.
docker run -it --rm --name tomcat_test -v /directory/has/.war:/usr/local/tomcat/webapps -p xxxx:8080 tomcat:8.5.35 /bin/bash
先程のコマンドに -it
と /bin/bash
を付け足しました.
これでコンテナの中に入って作業ができます.
このイメージにはデフォルトでJDKが入っていなかったので,以下のようにJDKを後入れすることにします.(Tomcat公式のDockerHubを見ると予めJDKが入っていそうなものもありました)
# apt update -y
# apt install default-jdk
ここまで来ると,後は Docker 固有の問題はおそらく無く,一般的なTomcatの通りに開発できます
Tomcatでのディレクトリ構成
webapps/
└─ WebAppName/
├─ WEB-INF/
│ ├─ classes/
│ └─ lib/
├─ src/
└─ etc.
あたりがよくある構成かと思います.
TomcatでのJavaServletのコンパイル
JavaServletではSource内でアノテーションパターン("@")を使用しているため,xmlは必要ありません.
at WebAppName Dir# javac -cp "/usr/local/tomcat/lib/servlet-api.jar:WEB-INF/lib/*" -d WEB-INF/classes/ src/hogehoge/*.java
このようにすることで,JavaServletライブラリ /usr/local/tomcat/lib/servlet-api.jar
と外部ライブラリ WEB-INF/lib/*
が使えます.
Tomcat 起動
コンパイルが済んだので,Tomcatを起動します.
at tomcat Dir# ./bin/catalina.sh run
まとめ
今回は Tomcat with Docker の入門でした.
UbuntuのイメージにTomcatを後入れして頑張る記事は沢山ありましたが,Tomcat公式イメージを使用した場合の解説記事が見つからなかったため,書いてみました.
誰かの役に立てたなら幸いです.