LoginSignup
5
2

More than 5 years have passed since last update.

DockerでPlay Framework2.4.2を動かしてみた。

Last updated at Posted at 2017-07-04

まえがき

私の所属しているプロジェクトでは、仮想マシンのCentOS上でPlay FrameworkのWebアプリを稼働させています。
これを進化させたいが故に、今回、DockerでのPlay Framework環境構築をしました。

本題

では、作っていきましょう。

■dockerコンテナ内環境

種類 バージョン
OS centos6.7
java jdk-8u60-linux-x64
activator 1.3.5
Play Framework 2.4.2

■ホストディレクトリ構成

  • Docker
    • WEBアプリソース(▲フォルダ)  ※playで稼働するjavaアプリ 詳細は載せません
      • WEBアプリソースファイル郡(▽ファイル)
    • ステージングバッチ(▲フォルダ) ※javaアプリをコンパイルするためのバッチ 
      • start-play-docker.sh(▽ファイル)
    • Dockerfile(▽ファイル)
    • javaインストール用ファイル(▽ファイル)

■dockerfile

dockerfile
FROM centos:centos6.7
MAINTAINER osak

# ユーザー指定
USER root

# yum更新
RUN yum update -y
RUN rpm --rebuilddb;  yum install -y wget unzip tar

# javaインストール
RUN cd /usr/local/src
COPY jdk-8u60-linux-x64.rpm /usr/local/src/
RUN rpm -ivh /usr/local/src/jdk-8u60-linux-x64.rpm

# activatorインストール
RUN wget https://downloads.typesafe.com/typesafe-activator/1.3.5/typesafe-activator-1.3.5.zip
RUN unzip typesafe-activator-1.3.5.zip
RUN mv activator-dist-1.3.5 /usr/local/lib
RUN ln -s /usr/local/lib/activator-dist-1.3.5/activator /usr/bin/activator

# WEBアプリソースをコンテナに配置
COPY WEBアプリソース /usr/local/src/play-docker/

# ステージングバッチをコンテナに配置
COPY /ステージングバッチ/*.sh /usr/local/src/

# ステージングバッチ権限設定
RUN chmod 777 /usr/local/src/start-play-docker.sh

# ステージングバッチ実行
RUN /usr/local/src/start-play-docker.sh

# play ポート解放
EXPOSE 9000 

# コンテナ起動後、コンパイル済みプログラムの呼び出し
CMD /usr/local/src/play-docker/target/universal/stage/bin/play-docker -Dhttp.port=9000

■ステージングバッチ

start-play-docker.sh
#!/bin/sh

SRC_DIR=/usr/local/src
PRJ=play-docker
PRJ_DIR=$SRC_DIR/$PRJ
LOG=$SRC_DIR/start${PRJ}.log
LOG_DIR=$PRJ_DIR/target/universal/stage/logs
LOG_BK_DIR=$SRC_DIR/logs_backup/$PRJ
AP_BATCH=$PRJ_DIR/target/universal/stage/bin/play-docker
PORT=9000

DATE=`date +"%Y-%m-%d %T %z"`
echo "$DATE Start Maintenance Service" | tee $LOG

if [ -d $PRJ_DIR ]
then
    # Backup log files  ===========================================================
    # If backup directory does not exist, create it
    if [ ! -d $LOG_BK_DIR ]
    then
        mkdir -p $LOG_BK_DIR
    fi

    # If log files exist, copy them to backup directory
    if [ -d $LOG_DIR ]
    then
        cd $LOG_DIR
        DATE=`date +"%Y%m%d_%H%M%S"`
        for log in `find . -name "*.log"`
        do
            cp -rfp $log $LOG_BK_DIR/${log%.*}_$DATE.log
            if [ ! "$?" -eq 0 ]
            then
                DATE=`date +"%Y-%m-%d %T %z"`
                echo "$DATE - [ERROR] - Cannot backup log files." | tee -a $LOG
                exit 1
            fi
        done
    fi

    # Do Staging ==================================================================
    cd $PRJ_DIR
    activator clean stage < /dev/null | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K|A]//g" >> $LOG
    if [ "${PIPESTATUS[0]}" -eq 0 ]
    then
        # Start the application ===============================================
        echo "[OK]" | tee -a $LOG
        # $AP_BATCH -Dhttp.port=$PORT > /dev/null &
    else
        echo ""  >> $LOG
        DATE=`date +"%Y-%m-%d %T %z"`
        echo "$DATE - [ERROR] - $PRJ Staging Failed." | tee -a $LOG
        exit 2
    fi
else
    echo ""  >> $LOG
    DATE=`date +"%Y-%m-%d %T %z"`
    echo "$DATE - [ERROR] - $PRJ_DIR not found." | tee -a $LOG
    exit 3
fi

DATE=`date +"%Y-%m-%d %T %z"`
echo "$DATE - [OK] - $0 Finished." | tee -a $LOG
exit 0

■ビルド手順

  1. cd /Docker           ※Dockerfileの配置してあるフォルダに移動
  2. docker build -t 適当なタグ名 .   ※.(カンマ)まで必要です。
  3. docker run -d --name 適当なコンテナ名 -p 19000:9000 適当なタグ名:latest ※ここではホストポート19000を解放

この状態で、ホストの19000ポートに接続すれば、コンテナ内の9000ポートにアクセスできます。

おわりに

今回はここまでとしますが、実際はこのdockerコンテナをAWS上のECSで稼働させました。
その話はまた別の機会で。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2