Skip to content

Commit 6669278

Browse files
author
Gary Coady
committed
Updated changes for Docker extension to sbt-native-packager
- Trait DockerPlugin should not extend DockerKeys - publishArtifact in Docker is false - do not generate POM/etc. - Tasks for stage do not depend on each other. - Change the CWD in the Docker container to install location. - Adding Docker-specific mappings happens outside mapGenericFilesToDocker - Use defaultLinuxInstallLocation instead of defaultDockerInstallLocation - dockerBaseImage is set outside Docker config, easier to override
1 parent 832d84a commit 6669278

File tree

2 files changed

+19
-17
lines changed

2 files changed

+19
-17
lines changed

src/main/scala/com/typesafe/sbt/packager/docker/DockerPlugin.scala

+13-15
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,18 @@ import Keys._
55
import universal._
66
import sbt._
77

8-
import sbt.Keys.cacheDirectory
9-
import universal.Keys.stage
10-
11-
trait DockerPlugin extends Plugin with UniversalPlugin with DockerKeys {
8+
trait DockerPlugin extends Plugin with UniversalPlugin {
129
val Docker = config("docker") extend Universal
1310

1411
private[this] final def makeDockerContent(dockerBaseImage: String, dockerBaseDirectory: String, maintainer: String, daemonUser: String, name: String) = {
1512
Dockerfile(
1613
Cmd("FROM", dockerBaseImage),
1714
Cmd("MAINTAINER", maintainer),
1815
Cmd("ADD", "files /"),
19-
Cmd("WORKDIR", "%s/bin" format dockerBaseDirectory),
20-
ExecCmd("RUN", "chown", "-R", daemonUser, ".."),
16+
Cmd("WORKDIR", "%s" format dockerBaseDirectory),
17+
ExecCmd("RUN", "chown", "-R", daemonUser, "."),
2118
Cmd("USER", daemonUser),
22-
ExecCmd("ENTRYPOINT", name),
19+
ExecCmd("ENTRYPOINT", "bin/%s" format name),
2320
ExecCmd("CMD")
2421
).makeContent
2522
}
@@ -42,32 +39,33 @@ trait DockerPlugin extends Plugin with UniversalPlugin with DockerKeys {
4239
}
4340

4441
inConfig(Docker)(Seq(
45-
mappings <<= (mappings in Universal, defaultDockerInstallLocation) map { (mappings, dest) =>
42+
mappings <<= (mappings in Universal, defaultLinuxInstallLocation) map { (mappings, dest) =>
4643
renameDests(mappings, dest)
47-
},
48-
mappings <++= dockerPackageMappings
44+
}
4945
))
5046
}
5147

5248
def dockerSettings: Seq[Setting[_]] = Seq(
49+
dockerBaseImage := "dockerfile/java",
5350
sourceDirectory in Docker <<= sourceDirectory apply (_ / "docker"),
5451
target in Docker <<= target apply (_ / "docker")
5552
) ++ mapGenericFilesToDocker ++ inConfig(Docker)(Seq(
5653
daemonUser := "daemon",
57-
dockerBaseImage := "dockerfile/java",
58-
defaultDockerInstallLocation := "/opt/docker",
59-
dockerPackageMappings <<= (sourceDirectory in Docker) map { dir =>
54+
publishArtifact := false,
55+
defaultLinuxInstallLocation := "/opt/docker",
56+
dockerPackageMappings <<= (sourceDirectory) map { dir =>
6057
MappingsHelper contentOf dir
6158
},
62-
stage <<= dockerGenerateContext.dependsOn(dockerGenerateConfig),
59+
mappings <++= dockerPackageMappings,
60+
stage <<= (dockerGenerateConfig, dockerGenerateContext) map { (configFile, contextDir) => () },
6361
dockerGenerateContext <<= (cacheDirectory, mappings, target) map {
6462
(cacheDirectory, mappings, t) =>
6563
val contextDir = t / "files"
6664
stageFiles("docker")(cacheDirectory, contextDir, mappings)
6765
contextDir
6866
},
6967
dockerGenerateConfig <<=
70-
(dockerBaseImage, defaultDockerInstallLocation, maintainer in Docker, daemonUser in Docker, normalizedName in Docker, target in Docker) map {
68+
(dockerBaseImage, defaultLinuxInstallLocation, maintainer, daemonUser, normalizedName, target) map {
7169
case (dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, target) =>
7270
generateDockerConfig(dockerBaseImage, baseDirectory, maintainer, daemonUser, normalizedName, target)
7371
}

src/main/scala/com/typesafe/sbt/packager/docker/Keys.scala

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,21 @@ import sbt._
66

77
trait DockerKeys {
88
val dockerGenerateConfig = TaskKey[File]("docker-generate-config", "Generates configuration file for Docker.")
9-
val dockerGenerateContext = TaskKey[Unit]("docker-generate-context", "Generates context directory for Docker.")
9+
val dockerGenerateContext = TaskKey[File]("docker-generate-context", "Generates context directory for Docker.")
1010
val dockerPackageMappings = TaskKey[Seq[(File, String)]]("docker-package-mappings", "Generates location mappings for Docker build.")
11+
1112
val dockerBaseImage = SettingKey[String]("dockerBaseImage", "Base image for Dockerfile.")
12-
val defaultDockerInstallLocation = SettingKey[String]("defaultDockerInstallLocation", "The location where we will install Docker packages.")
1313
}
1414

1515
object Keys extends DockerKeys {
16+
def cacheDirectory = sbt.Keys.cacheDirectory
1617
def mappings = sbt.Keys.mappings
18+
def publishArtifact = sbt.Keys.publishArtifact
1719
def sourceDirectory = sbt.Keys.sourceDirectory
1820
def target = sbt.Keys.target
21+
def defaultLinuxInstallLocation = packager.Keys.defaultLinuxInstallLocation
1922
def normalizedName = universal.Keys.normalizedName
23+
def stage = universal.Keys.stage
2024
def daemonUser = linux.Keys.daemonUser
2125
def maintainer = linux.Keys.maintainer
2226
}

0 commit comments

Comments
 (0)