Alpine linux で Tomcat 用の超軽量 Docker コンテナを構築する

Alpine Linux は何とベースサイズが 5 MB の超軽量の Docker イメージを用意できます。 通常 Docker コンテナはロールごとにコンテナを準備する運用となりますが、 複数コンテナを管理する場合、どうしても開発環境などで容量の問題がでてきてしまいます。
また、docker pull などコンテナの操作に容量の分だけ時間がかかってしまうので、 より効率良く開発を進めるためには、可能な限りコンテナを軽量にする必要があります。

以下は Tomcat7, Java8, JDBC Driver のみをセットアップした Dockerfile となります。 これで大体 117 MB くらいです。大体 70% 以上は削減できるかと思います。

FROM alpine:3.4

MAINTAINER sample

ENV TOMCAT_MAJOR=7 \
    TOMCAT_VERSION=7.0.69 \
    TOMCAT_HOME=/opt/tomcat \
    CATALINA_HOME=/opt/tomcat \
    CATALINA_OUT=/dev/null \
    MYSQL_JDBC_VERSION=5.1.39 \
    POSTGRESQL_JDBC_VERSION=9.4.1207

RUN mkdir -p /opt && \
    apk upgrade --update && \
    apk add --update openjdk8-jre curl && \
    curl -jksSL -o /tmp/apache-tomcat.tar.gz http://archive.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR}/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz && \
    tar -C /opt -xvzf /tmp/apache-tomcat.tar.gz && \
    ln -s /opt/apache-tomcat-${TOMCAT_VERSION} ${TOMCAT_HOME} && \
    rm -rf ${TOMCAT_HOME}/webapps/* && \
    curl -jksSL -o /tmp/mysql-connector-java.tar.gz http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${MYSQL_JDBC_VERSION}.tar.gz && \
    tar -C /tmp -xvzf /tmp/mysql-connector-java.tar.gz && \
    cp /tmp/mysql-connector-java-${MYSQL_JDBC_VERSION}/mysql-connector-java-${MYSQL_JDBC_VERSION}-bin.jar /opt/tomcat/lib/ && \
    curl -jksSL -o /opt/tomcat/lib/postgresql-${POSTGRESQL_JDBC_VERSION}.jar http://jdbc.postgresql.org/download/postgresql-${POSTGRESQL_JDBC_VERSION}.jar && \
    apk del curl && \
    rm -rf /tmp/* /var/cache/apk/*

EXPOSE 8080
ENTRYPOINT [ "/opt/tomcat/bin/catalina.sh", "run" ]