Skip to content

Commit

Permalink
Merge pull request #278 from garycoady/wip/docker-expose
Browse files Browse the repository at this point in the history
Support EXPOSE [port] ... for Docker
  • Loading branch information
muuki88 committed Jun 23, 2014
2 parents 2492d88 + 6dde86f commit 1381686
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 8 deletions.
26 changes: 18 additions & 8 deletions src/main/scala/com/typesafe/sbt/packager/docker/DockerPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import sbt._
trait DockerPlugin extends Plugin with UniversalPlugin {
val Docker = config("docker") extend Universal

private[this] final def makeDockerContent(dockerBaseImage: String, dockerBaseDirectory: String, maintainer: String, daemonUser: String, name: String) = {
Dockerfile(
private[this] final def makeDockerContent(dockerBaseImage: String, dockerBaseDirectory: String, maintainer: String, daemonUser: String, name: String, exposedPorts: Seq[Int]) = {
val dockerCommands = Seq(
Cmd("FROM", dockerBaseImage),
Cmd("MAINTAINER", maintainer),
Cmd("ADD", "files /"),
Expand All @@ -18,12 +18,21 @@ trait DockerPlugin extends Plugin with UniversalPlugin {
Cmd("USER", daemonUser),
ExecCmd("ENTRYPOINT", "bin/%s" format name),
ExecCmd("CMD")
).makeContent
)

val exposeCommand: Option[CmdLike] = {
if (exposedPorts.isEmpty)
None
else
Some(Cmd("EXPOSE", exposedPorts.mkString(" ")))
}

Dockerfile(dockerCommands ++ exposeCommand: _*).makeContent
}

private[this] final def generateDockerConfig(
dockerBaseImage: String, dockerBaseDirectory: String, maintainer: String, daemonUser: String, normalizedName: String, target: File) = {
val dockerContent = makeDockerContent(dockerBaseImage, dockerBaseDirectory, maintainer, daemonUser, normalizedName)
dockerBaseImage: String, dockerBaseDirectory: String, maintainer: String, daemonUser: String, normalizedName: String, exposedPorts: Seq[Int], target: File) = {
val dockerContent = makeDockerContent(dockerBaseImage, dockerBaseDirectory, maintainer, daemonUser, normalizedName, exposedPorts)

val f = target / "Dockerfile"
IO.write(f, dockerContent)
Expand Down Expand Up @@ -53,6 +62,7 @@ trait DockerPlugin extends Plugin with UniversalPlugin {
daemonUser := "daemon",
publishArtifact := false,
defaultLinuxInstallLocation := "/opt/docker",
dockerExposedPorts := Seq(),
dockerPackageMappings <<= (sourceDirectory) map { dir =>
MappingsHelper contentOf dir
},
Expand All @@ -65,9 +75,9 @@ trait DockerPlugin extends Plugin with UniversalPlugin {
contextDir
},
dockerGenerateConfig <<=
(dockerBaseImage, defaultLinuxInstallLocation, maintainer, daemonUser, normalizedName, target) map {
case (dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, target) =>
generateDockerConfig(dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, target)
(dockerBaseImage, defaultLinuxInstallLocation, maintainer, daemonUser, normalizedName, dockerExposedPorts, target) map {
case (dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, exposedPorts, target) =>
generateDockerConfig(dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, exposedPorts, target)
}
))
}
1 change: 1 addition & 0 deletions src/main/scala/com/typesafe/sbt/packager/docker/Keys.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ trait DockerKeys {
val dockerPackageMappings = TaskKey[Seq[(File, String)]]("docker-package-mappings", "Generates location mappings for Docker build.")

val dockerBaseImage = SettingKey[String]("dockerBaseImage", "Base image for Dockerfile.")
val dockerExposedPorts = SettingKey[Seq[Int]]("dockerExposedPorts", "Ports exposed by Docker image")
}

object Keys extends DockerKeys {
Expand Down

0 comments on commit 1381686

Please sign in to comment.