DockerでJava Webアプリケーションの検証環境を構築する

Tomcatで動かすJavaアプリをテストする環境が作りたくて、Dockerfileのサンプルを作ってみた。

#
# VERSION 0.0.1
#
 
FROM ubuntu:12.10
MAINTAINER horimislime "horimislime@gmail.com"
 
# Setup
RUN apt-get install -y software-properties-common debconf-utils
RUN add-apt-repository -y ppa:webupd8team/java
RUN apt-get update
 
# Java7
RUN echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get install -y oracle-java7-installer
 
# Tomcat
RUN apt-get install -y tomcat7
ENV JAVA_HOME /usr/lib/jvm/java-7-oracle/jre
 
RUN rm -r /var/lib/tomcat7/webapps/ROOT
ADD ./SNAPSHOT.war /var/lib/tomcat7/webapps/ROOT.war
 
EXPOSE 8080
CMD /etc/init.d/tomcat7 start && wait && tail -f /var/lib/tomcat7/logs/catalina.out

docker build -t horimislime/tomcat . とかすれば実行環境のイメージが出来上がる。

中身

Dockerfile晒せばもう終わりなんだけど、ちょっとだけハマった部分もあるのでメモ。

まず、oracle java7のインストール方法。

aptリポジトリを追加して、oracle-java7-installerパッケージをインストールするだけなんだけど、imageのビルド中にライセンス承諾画面が出るので、これを回避するための手続きが必要。

RUN echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections
ENV DEBIAN_FRONTEND noninteractive

ここらへんの解決方法は前のエントリにもメモした。
Linuxパッケージのインストール時に出る承諾画面を飛ばす方法 - from world import goodies

Tomcatをインストールした後は、ADDでDockerfileと同じ階層に配置したwarファイルをwebapps下に配置するようにしている。

ADD ./SNAPSHOT.war /var/lib/tomcat7/webapps/ROOT.war

同じコンテナに対してアプリを何回もデプロイしたければ、SSHを通してscpできるようにした方がよさそう。

最後にTomcat起動方法。

CMD /etc/init.d/tomcat7 start && wait && tail -f /var/lib/tomcat7/logs/catalina.out

DockerfileにCMDを記述しておくと、docker runしたときにここで指定したコマンドが実行されるようになる。
注意しておくのは、initスクリプトのように正常に実行したらステータス0で終了するようなコマンドを実行すると、ステータスが返った時点でコンテナも終了してしまう事。なのでstartと同時にcatalina.outをtailするようにしている。

流れはざっとこんな感じ。あとはdocker run -d -t [タグ名]するだけで即座に検証環境が立ち上がる。構築手順も1ファイルで管理できて手軽!