How to setup Scala Play framework on Docker?
In the previous article we showed you How to setup Scala and SBT on Docker? and in this article we are going to show you how to setup Scala Play framework in docker container.
What is Play framework?
Play Framework makes it easy to build web applications with Java & Scala. Play is based on a lightweight, stateless, web-friendly architecture. Built on Akka, Play provides predictable and minimal resource consumption (CPU, memory, threads) for highly-scalable applications.
Steps for Implementing Docker Compose
There are 3 steps for implementing docker compose:
- Create a Play Scala project using sbt new
- Create a Dockerfile for running commands
- Define services to run applications in docker-compose.yml file
- Start and run project with the help of docker-compose.yml file
1. Create a Play Scala project using sbt new
Run command below to create a new project:
$ sbt new playframework/play-scala-seed.g8
name project as my-app:
This template generates a Play Scala project name [play-scala-seed]:
2. Create a Dockerfile for running commands
Create a file named Dockerfile in the root of project with following content:
# Install Java and set the JAVA_HOME variable FROM openjdk:8 ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk ENV PATH $PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin ENV SBT_VERSION 1.3.3 # Install curl and vim RUN \ apt-get update && \ apt-get -y install curl && \ apt-get -y install vim # Install both scala and sbt RUN \ curl -L -o sbt-$SBT_VERSION.deb https://repo.scala-sbt.org/scalasbt/debian/sbt-$SBT_VERSION.deb && \ dpkg -i sbt-$SBT_VERSION.deb && \ rm sbt-$SBT_VERSION.deb && \ apt-get update && \ apt-get -y install sbt WORKDIR /var/www COPY ./my-app /var/www
Create a new directory for your new application and configure your sbt build script with following in project/plugins.sbt:
// Typesafe snapshots resolvers += "Typesafe Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" // Use the Play sbt plugin for Play projects addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.1")
Create a file build.sbt in the root of project with following content:
name := "my-app" version := "1.0.0-SNAPSHOT" lazy val root = (project in file(".")).enablePlugins(play.sbt.PlayScala)
To ensure the proper sbt version is used, make sure you have the following in
3. Define services to run applications in docker-compose.yml file
Create a file named docker-compose.yml in the root of project with following content:
version: '3.1' services: app: build: context: ./ volumes: - "./:/root/build" - ~/.sbt:/root/.sbt - ~/.ivy2:/root/.ivy2 - ~/.m2:/root/.m2
4. Start and run project with the help of docker-compose.yml file
Run command below to up docker container:
$ docker-compose up
To use sbt commands we need to bash into container using docker-compose command below:
$ docker-compose run --service-ports sbt /bin/bash
Run command below to download dependencies and start the system:
$ sbt run
In a browser, enter http://localhost:9000 to view the welcome page.