デフォルトのPlay FrameworkでDockerfileだけでDockerイメージを作る健忘録。
sbt-native-packagerとかsbt-dockerとかの設定とsbt実行が面倒くさかった人向け。開発時は、特にDocker使ってないけど、アプリケーションデプロイのときにだけDockerを使う人には良さそうなやり方です。 JDK 1.8.0_144、Play Framework 2.6.11、 sbt 1.1.0 で検証済み。
まずはPlayFrameworkプロジェクトの作成。JDKとsbtは入っている前提。
cd ~/workspace/testapp
sbt new playframework/play-scala-seed.g8
でプロジェクト作成。作成時の入力は、
name [play-scala-seed]: testapp
organization [com.example]: org.soichiro
play_version [2.6.11]: 2.6.11
sbt_version [1.0.4]: 1.0.4
scalatestplusplay_version [3.1.2]: 3.1.2
以上でプロジェクトを作ったとする。
vim Dockerfile
で以上のファイルを作成。
FROM openjdk:8u151-jre-stretch
ENV PROJECT_NAME testapp
ENV VERSION 1.0-SNAPSHOT
ENV SECRET QUStej67ubRe
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY target/universal/${PROJECT_NAME}-${VERSION}.zip ./
RUN unzip ${PROJECT_NAME}-${VERSION}.zip
WORKDIR /usr/src/app/${PROJECT_NAME}-${VERSION}
RUN chmod a+x bin/${PROJECT_NAME}
CMD rm -rf RUNNING_PID && bin/${PROJECT_NAME} -Dapplication.secret=${SECRET}
EXPOSE 9000 9000
シークレットや環境変数、オプションなどは適宜調整してのこと。
これを使ってデプロイ用パッケージの作成とDockerのビルドを行う。
sbt dist && docker build -t your_account_name/testapp .
以上でパッケージの作成とDockerのビルドは完了する。
Successfully tagged your_account_name/testapp:latest
とイメージができればOK。
docker images
でも確認する。
docker run -d --name testapp -p 9000:9000 your_account_name/testapp
以上で起動して、 http://localhost:9000/ で動作確認をして問題なければOK。
docker exec -it testapp /bin/bash
で logs/application.log のログの確認などできるが、 docker logs ${コンテナID}
とかで見たほうが楽。別途ログを保存したいとかある時は別な方法を設定のこと。
docker stop testapp
で終了可能。
docker start testapp
で再起動できる。以上、ミドルウェアの利用やデプロイでDocker便利です。最高。