Git Product home page Git Product logo

mill-docker's Introduction

mill-docker

Jitpack Main workflow

A Mill module for building minimal distroless docker images from your java applications.

The generated docker image contains only your application's assembly jar and the java runtime, but no linux distribution to maintain. That means the image size is as small as it can get without actually turning your app into a native binary (with graalvm for example).

Usage

See the annotated example buildfile at example/build.sc:

Building

The main task added by this module is dockerBuild. Note if you would like to see the output produced by the docker command, be sure to use mill --interactive mode.

$ cd example
$ mill --interactive hello.dockerBuild
$ docker run -ti hello:latest world
Hello world

mill-docker's People

Contributors

davoclavo avatar fabianhjr avatar vic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

mill-docker's Issues

Exception with Mill 0.3.6

I get this exception when trying to do anything (even clean) when using mill 0.3.6 and trying to use DockerModule:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at mill.define.Module$Internal.$anonfun$reflect$4(Module.scala:73)
        at scala.collection.TraversableLike$WithFilter.$anonfun$map$2(TraversableLike.scala:742)
        at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:36)
        at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:33)
        at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:198)
        at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:741)
        at mill.define.Module$Internal.reflect(Module.scala:64)
        at mill.define.Module$Internal.reflectAll(Module.scala:76)
        at mill.define.Module$Internal.reflectNestedObjects(Module.scala:84)
        at mill.main.Resolve.resolve(Resolve.scala:400)
        at mill.main.RunScript$.$anonfun$resolveTasks$4(RunScript.scala:145)
        at scala.util.Either.map(Either.scala:353)
        at mill.main.RunScript$.$anonfun$resolveTasks$3(RunScript.scala:131)
        at scala.collection.immutable.List.map(List.scala:286)
        at mill.main.RunScript$.$anonfun$resolveTasks$2(RunScript.scala:130)
        at scala.util.Either.flatMap(Either.scala:341)
        at mill.main.RunScript$.resolveTasks(RunScript.scala:127)
        at mill.main.RunScript$.evaluateTasks(RunScript.scala:188)
        at mill.main.RunScript$.$anonfun$runScript$3(RunScript.scala:62)
        at ammonite.util.Res$Success.flatMap(Res.scala:61)
        at mill.main.RunScript$.runScript(RunScript.scala:61)
        at mill.main.MainRunner.$anonfun$runScript$1(MainRunner.scala:88)
        at mill.main.MainRunner.watchLoop2(MainRunner.scala:54)
        at mill.main.MainRunner.runScript(MainRunner.scala:69)
        at mill.MillMain$.main0(MillMain.scala:161)
        at mill.MillMain$.main(MillMain.scala:26)
        at mill.MillMain.main(MillMain.scala)
Caused by: java.lang.NoClassDefFoundError: mill/util/Ctx$Dest
        at ammonite.$file.build_2$.backend$lzycompute$1(build.sc:84)
        at ammonite.$file.build_2$.backend(build.sc:84)
        ... 31 more
Caused by: java.lang.ClassNotFoundException: mill.util.Ctx$Dest
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at ammonite.runtime.SpecialClassLoader.findClass(ClassLoaders.scala:215)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 33 more

crashes on dockerBuild

Whenever I try to start the dockerbuild in my project, like

mill --interactive chromosome.jvm.dockerBuild

I get the following errors:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        at mill.define.Module$Internal.$anonfun$reflect$4(Module.scala:73)
        at scala.collection.TraversableLike$WithFilter.$anonfun$map$2(TraversableLike.scala:739)
        at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:32)
        at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:29)
        at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:194)
        at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:738)
        at mill.define.Module$Internal.reflect(Module.scala:64)
        at mill.define.Module$Internal.reflectAll(Module.scala:76)
        at mill.define.Module$Internal.reflectNestedObjects(Module.scala:84)
        at mill.main.Resolve.resolve(Resolve.scala:400)
        at mill.main.Resolve.$anonfun$resolve$2(Resolve.scala:383)
        at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
        at scala.collection.immutable.List.foreach(List.scala:389)
        at scala.collection.TraversableLike.map(TraversableLike.scala:234)
        at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
        at scala.collection.immutable.List.map(List.scala:295)
        at mill.main.Resolve.recurse$1(Resolve.scala:383)
        at mill.main.Resolve.resolve(Resolve.scala:396)
        at mill.main.RunScript$.$anonfun$resolveTasks$4(RunScript.scala:144)
        at scala.util.Either.map(Either.scala:350)
        at mill.main.RunScript$.$anonfun$resolveTasks$3(RunScript.scala:130)
        at scala.collection.immutable.List.map(List.scala:283)
        at mill.main.RunScript$.$anonfun$resolveTasks$2(RunScript.scala:129)
        at scala.util.Either.flatMap(Either.scala:338)
        at mill.main.RunScript$.resolveTasks(RunScript.scala:126)
        at mill.main.RunScript$.evaluateTasks(RunScript.scala:187)
        at mill.main.RunScript$.$anonfun$runScript$3(RunScript.scala:61)
        at ammonite.util.Res$Success.flatMap(Res.scala:61)
        at mill.main.RunScript$.runScript(RunScript.scala:60)
        at mill.main.MainRunner.$anonfun$runScript$1(MainRunner.scala:86)
        at mill.main.MainRunner.watchLoop2(MainRunner.scala:53)
        at mill.main.MainRunner.runScript(MainRunner.scala:68)
        at mill.MillMain$.main0(MillMain.scala:149)
        at mill.MillMain$.main(MillMain.scala:26)
        at mill.MillMain.main(MillMain.scala)
Caused by: java.lang.NoClassDefFoundError: ammonite/ops/BasePath
        at ammonite.$file.build_2$chromosome$.jvm$lzycompute$1(build.sc:97)
        at ammonite.$file.build_2$chromosome$.jvm(build.sc:97)
        ... 39 more
Caused by: java.lang.ClassNotFoundException: ammonite.ops.BasePath
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
        at ammonite.runtime.SpecialClassLoader.findClass(ClassLoaders.scala:215)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:566)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
        ... 41 more

My buildfile looks like:

// -*- mode: scala -*-

// add mill-docker artifact repo
import mill._
interp.repositories() = interp.repositories() ++ Seq(coursier.MavenRepository("https://jitpack.io"))
@
import scalalib._

// import mill-docker
import $ivy.`io.github.vic::mill-docker:0.0.4`, mill.docker._

import mill._
import mill.scalalib._
import mill._
import mill.define.{Sources, Target}
import mill.scalajslib.ScalaJSModule
import mill.scalalib._
import scalajslib._
import ammonite.ops._
import coursier.maven.MavenRepository
import mill.scalalib.publish.{Developer, License, PomSettings, VersionControl}
import mill.util.Loose

lazy val scala_version = "2.12.7"

val scala_js_version = "0.6.25"

val src = "src"

val resolvers =  Seq(
  MavenRepository("https://oss.sonatype.org/content/repositories/releases"),
  MavenRepository("https://bintray.com/hseeberger/maven"),
  MavenRepository("http://dl.bintray.com/micronautics/scala"),
  MavenRepository("https://dl.bintray.com/denigma/denigma-releases"),
  MavenRepository("https://dl.bintray.com/comp-bio-aging/main")
)

val plugins = Agg(ivy"org.scalamacros:::paradise:2.1.1")

val generalPomSettings =  PomSettings(
  description = "HAC",
  organization = "extendlifelab",
  url = "https://gitlab.com/extendlifelab/HAC/",
  licenses = Seq(License.`MPL-2.0`),
  versionControl = VersionControl.github("antonkulaga", "HAC"),
  developers = Seq(
    Developer("Kulaga", "Anton","https://gitlab.com/extendlifelab")
  )
)

object chromosome extends ScalaModule with PublishModule {
  self =>

  def scalaVersion: Target[String] = scala_version

  override def pomSettings: Target[PomSettings] = generalPomSettings

  override def publishVersion = "0.0.6"

  def hac_ivy_deps = Agg(
    ivy"com.lihaoyi::pprint::0.5.3",
    ivy"io.circe::circe-core::0.10.1",
    ivy"io.circe::circe-generic::0.10.1",
    ivy"io.circe::circe-generic-extras::0.10.1",
    ivy"io.circe::circe-parser::0.10.1",
    ivy"org.wvlet.airframe::airframe-log::0.73",
    ivy"com.softwaremill.quicklens::quicklens::1.4.11",
    ivy"org.typelevel::cats-core:1.4.0"
  )

  override def ivyDeps = hac_ivy_deps

  override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ plugins

  object js extends ScalaJSModule with PublishModule {
    def scalaVersion = scala_version

    def scalaJSVersion = scala_js_version


    override def ivyDeps = hac_ivy_deps ++ Agg(
        ivy"in.nvilla::monadic-html::0.4.0-RC1"  
   )

    override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ plugins

    override def sources = T.sources(
      millSourcePath / src,
      millSourcePath / up / src
    )

    override def publishVersion = self.publishVersion

    override def pomSettings =  generalPomSettings
  }

  object jvm extends ScalaModule with PublishModule with DockerModule {
    def scalaVersion = scala_version

    def dockerTag = "pwm:latest"

    override def repositories = super.repositories ++ resolvers

    override def scalacPluginIvyDeps = super.scalacPluginIvyDeps() ++ plugins

    override def sources = T.sources(
      millSourcePath / src,
      millSourcePath / up / src
    )

    override def ivyDeps = hac_ivy_deps ++ Agg(
      ivy"org.scalanlp::breeze:1.0-RC2",
      ivy"org.scalanlp::breeze-natives:1.0-RC2",
      ivy"com.github.pathikrit::better-files:3.6.0"
    )

    override def publishVersion = self.publishVersion

    override def pomSettings =  generalPomSettings


    object test extends Tests{

      override def ivyDeps = Agg(
        ivy"org.scalatest::scalatest::3.0.5",
        ivy"org.scalacheck::scalacheck::1.14.0"
      )

      def testFrameworks = Seq("org.scalatest.tools.Framework")
    }

  }

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.