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ファイルで管理できて手軽!