2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Tomcat with Docker 入門

Posted at

背景

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/.warxxxx の部分です.
/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公式イメージを使用した場合の解説記事が見つからなかったため,書いてみました.

誰かの役に立てたなら幸いです.

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?