From dbc5b708e005509a655c3bda15d2cb090b6cfa1f Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Tue, 24 May 2016 00:25:26 -0700 Subject: Dockerize --- mavigator-server/build.sbt | 50 +++++++++++++++++++++----------------------- project/MavigatorBuild.scala | 15 ++++++------- project/plugins.sbt | 2 +- 3 files changed, 31 insertions(+), 36 deletions(-) diff --git a/mavigator-server/build.sbt b/mavigator-server/build.sbt index 10b59d0..d430750 100644 --- a/mavigator-server/build.sbt +++ b/mavigator-server/build.sbt @@ -21,36 +21,34 @@ cancelable in Global := true /* * Deployment configuration */ -enablePlugins(UniversalPlugin, DebianPlugin, DockerPlugin) -enablePlugins(JavaServerAppPackaging) +enablePlugins(DockerPlugin) +val filter = ScopeFilter( + inAnyProject, + inConfigurations(Compile) +) -name in Universal := "mavigator" -packageName in Universal := "mavigator" -executableScriptName in Universal := "mavigator" - -name in Linux := (name in Universal).value -packageName in Linux := (packageName in Universal).value -executableScriptName in Linux := (executableScriptName in Universal).value +dockerfile in docker := { + val mainclass = (mainClass in Compile in packageBin).value.getOrElse(sys.error("Expected exactly one main class")) -maintainer in Linux := "Jakob Odersky " -packageSummary in Linux := "Virtual cockpit for drones." -packageDescription in Linux := "Compatible with devices using the MAVLink protocol." + val jarFiles: List[File] = packageBin.all(filter).value.toList ::: + (fullClasspath in Compile).value.files.toList -version in Debian := version.value -debianPackageDependencies in Debian ++= Seq( - "java8-runtime-headless", - "bash (>= 2.05a-11)" -) + val cp = jarFiles.map{ file => + s"/opt/mavigator/lib/${file.getName}" + }.mkString(":") -import com.typesafe.sbt.packager.archetypes.ServerLoader -serverLoading in Debian := ServerLoader.Systemd + new Dockerfile { + from("java:8") + add(jarFiles, "/opt/mavigator/lib/") + expose(8080) + entryPoint("java", "-cp", cp, mainclass) + } +} +buildOptions in docker := BuildOptions( + pullBaseImage = BuildOptions.Pull.Always, + removeIntermediateContainers = BuildOptions.Remove.Always +) -name in Docker := "mavigator" -packageName in Docker := "mavigator" -executableScriptName := "mavigator" -maintainer in Docker := "Jakob Odersky " - -dockerBaseImage := "java:8" -dockerExposedPorts += 8080 +imageName in docker := ImageName(s"jodersky/mavigator:${version.value}") diff --git a/project/MavigatorBuild.scala b/project/MavigatorBuild.scala index f6c0884..e634d03 100644 --- a/project/MavigatorBuild.scala +++ b/project/MavigatorBuild.scala @@ -29,22 +29,19 @@ object MavigatorBuild extends Build { // main akka http server project lazy val server = Project( id = "mavigator-server", - base = file("mavigator-server"), - dependencies = Seq(bindings, uav) - ) + base = file("mavigator-server") + ).dependsOn(bindings, uav) // communication backend lazy val uav = Project( id = "mavigator-uav", - base = file("mavigator-uav"), - dependencies = Seq(bindings) - ) + base = file("mavigator-uav") + ).dependsOn(bindings) // main cockpit front-end lazy val cockpit = Project( id = "mavigator-cockpit", - base = file("mavigator-cockpit"), - dependencies = Seq(bindings) - ) + base = file("mavigator-cockpit") + ).dependsOn(bindings) } diff --git a/project/plugins.sbt b/project/plugins.sbt index 611b313..c358264 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -31,4 +31,4 @@ addSbtPlugin("com.github.jodersky" % "sbt-mavlink" % "0.7.0") // generate documentation for all projects //addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.3.3") -addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.1.0-RC3") +addSbtPlugin("se.marcuslonnberg" % "sbt-docker" % "1.4.0") -- cgit v1.2.3