从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)