从dockerfile启动播放框架应用程序

时间:2014-05-27 20:24:17

标签: sbt docker

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

让我们假设我的play项目位于ubuntu的/ myapp目录中。 当我手动启动时,我只想说:

cd /myapp
sbt run

如何从Dockerfile的CMD命令运行sbt run

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

2 个答案:

答案 0 :(得分:13)

仔细研究新实验docker feature 对于sbt-native-packager。

您应该可以通过几个简单的步骤从Play应用程序构建一个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(以及播放2.4.x)默认情况下启用docker(因为play启用了JavaServerAppPackaging插件)。

如果您没有播放应用程序,请使用

启用docker
enablePlugins(JavaAppPackagingPlugin)

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

答案 1 :(得分:1)

您可以连接两个语句:

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