Dockerの公式Tomcatイメージを使う

mabushiisign

今回、公式のTomcatのDockerイメージを使ってみた。

公式URLはこちら

イメージの取得

まずは、イメージを落とします。バージョンは、lastestを使わずちゃんと指定しましょう。今使っているバージョンが分からなくなります。

$ docker pull tomcat:7.0.85-jre8
7.0.85-jre8: Pulling from library/tomcat
c73ab1c6897b: Pull complete 
1ab373b3deae: Pull complete 
b542772b4177: Pull complete 
0bcc3741ab14: Pull complete 
421d624d778d: Pull complete 
26ad58237506: Pull complete 
90a5e00634c6: Pull complete 
8baa304f616f: Pull complete 
9c737e212569: Pull complete 
3efcc0fabee8: Pull complete 
eb8df65e3f30: Pull complete 
03927c7a9d96: Pull complete 
Digest: sha256:c6924b36c98f11d3cb76e29a7a8302678452498bc604cf97ba2f3c92bb7a2f24
Status: Downloaded newer image for tomcat:7.0.85-jre8

warのデプロイ

デプロイしたいwarは、volumesで/usr/local/tomcat/webapps/に配置します。
docker-composeではこんな感じでokです。

    volumes:
      - './app/xxx.war:/usr/local/tomcat/webapps/xxx.war'

やりたいこと

単純なアプリであれば、シンプルなのですが、
今回使ったのは環境別にプロパティファイルを切り替えられるようにwarの中に環境依存の物を含めていません。

なので、今回は
/usr/local/tomcat/classes/フォルダを作ってここにプロパティファイルを格納して、起動時にclasspathに設定して読み込ませようとしました。
が、やり方に手こずりました。

プロパティファイルの格納

これはwarと同じく、volumesで配置します。
docker-composeではこんな感じでokです。

    volumes:
      - './app/classes:/usr/local/tomcat/classes'

classpathとJavaオプションの指定方法

これに苦労しました。
docker-composeでenvironmentでCLASSPATH、JAVA_OPTSに指定すれば起動時のcatalina.shに使われるかと思ってましたが、実際には使われませんでした。
公式サイトをみても全然載っていない。ですが、通常のtomcatと同様にsetenv.shに書けばいいと気づき以下のようにして対応しました。
setenv.sh

1#!/bin/bash
2
3CLASSPATH=/usr/local/tomcat/classes
4CATALINA_OPTS='-Dfile.encoding=UTF-8'

volumesの指定は、こんな感じ。

    volumes:
      - './app/setenv.sh:/usr/local/tomcat/bin/setenv.sh'

結果

こうすることで、無事に設定することができました。
あとは、ログもホストにマッピングするなどして永続化はした方が良いです。

ABOUT ME
mabushiisign
mabushiisign
B'zとdoaとミスチルと登山が好きな40代のプログラマです。 普段は、SIer企業で働いています。
記事URLをコピーしました