Tomcat containerにwarをデプロイするDockerfile

tomcat上で動いているアプリをk8s上で稼働させるためにdocker nizeしました。面倒くさいかと思っていましたが、意外と簡単だったので共有します。 以下のようなDockerfileを書けばよいです。

FROM tomcat:9.0.16-jre8-alpine

RUN rm -rf /usr/local/tomcat/webapps/*

COPY tomcat/server.xml /usr/local/tomcat/conf/server.xml
COPY target/awesome.war /usr/local/tomcat/webapps/awesome.war
EXPOSE 8080

CMD ["catalina.sh", "run"]

server.xmlについては、そのままデプロイするとwar名のcontext pathが設定されてしまうため、context pathがルートとなるように以下の設定を追記したserver.xmlで上書きしています。

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">

  <Context path="/" docBase="/usr/local/tomcat/webapps/awesome.war" reloadable="true" />
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
         prefix="localhost_access_log" suffix=".txt"
         pattern="%h %l %u %t &quot;%r&quot; %s %b" />

</Host>

簡単ですが、こんな感じでした