从dockerfile开始播放框架应用程序

我想在Dockerfile中启动一个play framework 2应用程序。

让我们假设我的播放项目rest在Ubuntu的/ myapp目录中。 当我手动启动它时,我只会说:

cd /myapp sbt run 

如何从sbt run的CMD命令sbt run sbt?

运行sbt run必须来自/ myapp目录。 如何告诉CMD命令sbt run应该从该目录运行?

你可以连接两个语句:

 FROM ubuntu ... more Dockerfile commands... CMD cd /myapp && sbt run 

您还可以使用Dockerfiles的WORKDIR命令(请参阅http://docs.docker.io/reference/builder/#workdir )为您的CMD命令设置工作目录。 但我从来没有用过这个(没有具体的原因…):

 FROM ubuntu ... more Dockerfile commands... WORKDIR /myapp CMD sbt run 

仔细看看sbt-native-packager的新实验dockerfunction 。

您应该能够通过几个简单的步骤从您的游戏应用程序构build一个docker容器。 添加一个维护者和暴露的端口

 import NativePackagerKeys._ // with auto plugins this won't be necessary soon name := "play-2.3" version := "1.0-SNAPSHOT" lazy val root = (project in file(".")).enablePlugins(PlayScala) scalaVersion := "2.11.1" libraryDependencies ++= Seq( jdbc, anorm, cache, ws ) // setting a maintainer which is used for all packaging types maintainer := "Nepomuk Seiler" // exposing the play ports dockerExposedPorts in Docker := Seq(9000, 9443) 

然后运行

 sbt docker:publishLocal docker run -p 9000:9000 play-2-3:1.0-SNAPSHOT 

更新 – 1.x版本

使用sbt-native-packager 1.x(在play 2.4.x中也是如此)默认情况下启用docker(因为play会启用JavaServerAppPackaging插件)。

如果您没有播放应用程序,则启用docker

 enablePlugins(JavaAppPackagingPlugin) maintainer := "Nepomuk Seiler" // note that the Docker scope is gone! dockerExposedPorts := Seq(9000, 9443)