src/Pure/Tools/build_docker.scala
author immler
Sun, 27 Oct 2019 21:51:14 -0400
changeset 71035 6fe5a0e1fa8e
parent 69958 70dc3c4e9469
child 71579 9b49538845cc
permissions -rw-r--r--
moved theory Interval from the AFP
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
66790
c0e68e6a1beb build_docker is regular tool (non-admin);
wenzelm
parents: 66785
diff changeset
     1
/*  Title:      Pure/Tools/build_docker.scala
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     3
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     4
Build docker image from Isabelle application bundle for Linux.
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     5
*/
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     6
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     7
package isabelle
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     8
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
     9
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    10
object Build_Docker
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    11
{
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
    12
  private val default_base = "ubuntu"
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    13
  private lazy val default_logic = Isabelle_System.getenv("ISABELLE_LOGIC")
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    14
69957
e3217c6d6467 updated docker setup: lib32stdc++6 is no longer required for polyml-5.8, libfontconfig1 is required for headless jdk-11;
wenzelm
parents: 69873
diff changeset
    15
  private val Isabelle_Name = """^.*?(Isabelle[^/\\:]+)_linux\.tar\.gz$""".r
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    16
64899
749d3a86c6a3 clarified signature: packages may be accessed in Isabelle/Scala;
wenzelm
parents: 64897
diff changeset
    17
  val packages: List[String] =
69957
e3217c6d6467 updated docker setup: lib32stdc++6 is no longer required for polyml-5.8, libfontconfig1 is required for headless jdk-11;
wenzelm
parents: 69873
diff changeset
    18
    List("curl", "less", "libfontconfig1", "libgomp1", "libwww-perl", "rlwrap", "unzip")
64894
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
    19
64899
749d3a86c6a3 clarified signature: packages may be accessed in Isabelle/Scala;
wenzelm
parents: 64897
diff changeset
    20
  val package_collections: Map[String, List[String]] =
64895
ad3b66e7a028 clarified packages;
wenzelm
parents: 64894
diff changeset
    21
    Map("X11" -> List("libx11-6", "libxext6", "libxrender1", "libxtst6", "libxi6"),
69958
70dc3c4e9469 proper latex setup;
wenzelm
parents: 69957
diff changeset
    22
      "latex" ->
70dc3c4e9469 proper latex setup;
wenzelm
parents: 69957
diff changeset
    23
        List("texlive-fonts-extra", "texlive-font-utils", "texlive-latex-extra", "texlive-science"))
64894
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
    24
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    25
  def build_docker(progress: Progress,
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    26
    app_archive: String,
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
    27
    base: String = default_base,
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    28
    logic: String = default_logic,
64906
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    29
    no_build: Boolean = false,
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
    30
    entrypoint: Boolean = false,
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    31
    output: Option[Path] = None,
64899
749d3a86c6a3 clarified signature: packages may be accessed in Isabelle/Scala;
wenzelm
parents: 64897
diff changeset
    32
    more_packages: List[String] = Nil,
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    33
    tag: String = "",
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    34
    verbose: Boolean = false)
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    35
  {
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    36
    val isabelle_name =
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    37
      app_archive match {
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    38
        case Isabelle_Name(name) => name
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    39
        case _ => error("Cannot determine Isabelle distribution name from " + app_archive)
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    40
      }
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    41
    val is_remote = Url.is_wellformed(app_archive)
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    42
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    43
    val dockerfile =
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    44
      """## Dockerfile for """ + isabelle_name + """
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    45
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
    46
FROM """ + base + """
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    47
SHELL ["/bin/bash", "-c"]
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    48
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    49
# packages
69958
70dc3c4e9469 proper latex setup;
wenzelm
parents: 69957
diff changeset
    50
ENV DEBIAN_FRONTEND=noninteractive
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    51
RUN apt-get -y update && \
64941
wenzelm
parents: 64906
diff changeset
    52
  apt-get install -y """ + Bash.strings(packages ::: more_packages) + """ && \
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    53
  apt-get clean
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    54
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    55
# user
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    56
RUN useradd -m isabelle && (echo isabelle:isabelle | chpasswd)
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    57
USER isabelle
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    58
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    59
# Isabelle
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    60
WORKDIR /home/isabelle
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    61
""" +
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    62
 (if (is_remote)
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    63
   "RUN curl --fail --silent " + Bash.string(app_archive) + " > Isabelle.tar.gz"
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    64
  else "COPY Isabelle.tar.gz .") +
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    65
"""
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    66
RUN tar xzf Isabelle.tar.gz && \
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    67
  mv """ + isabelle_name + """ Isabelle && \
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    68
  perl -pi -e 's,ISABELLE_HOME_USER=.*,ISABELLE_HOME_USER="\$USER_HOME/.isabelle",g;' Isabelle/etc/settings && \
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    69
  perl -pi -e 's,ISABELLE_LOGIC=.*,ISABELLE_LOGIC=""" + logic + """,g;' Isabelle/etc/settings && \
69873
6ebe97815275 proper option (amending cc0b3e177b49);
wenzelm
parents: 68738
diff changeset
    70
  Isabelle/bin/isabelle build -o system_heaps -b """ + logic +
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
    71
 (if (entrypoint) """
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    72
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    73
ENTRYPOINT ["Isabelle/bin/isabelle"]
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    74
"""
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
    75
  else "")
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    76
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    77
    output.foreach(File.write(_, dockerfile))
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    78
64906
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    79
    if (!no_build) {
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    80
      Isabelle_System.with_tmp_dir("docker")(tmp_dir =>
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    81
        {
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    82
          File.write(tmp_dir + Path.explode("Dockerfile"), dockerfile)
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
    83
64906
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    84
          if (is_remote) {
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    85
            if (!Url.is_readable(app_archive))
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    86
              error("Cannot access remote archive " + app_archive)
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    87
          }
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    88
          else File.copy(Path.explode(app_archive), tmp_dir + Path.explode("Isabelle.tar.gz"))
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    89
64906
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    90
          val quiet_option = if (verbose) "" else " -q"
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    91
          val tag_option = if (tag == "") "" else " -t " + Bash.string(tag)
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    92
          progress.bash("docker build" + quiet_option + tag_option + " " + File.bash_path(tmp_dir),
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    93
            echo = true).check
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    94
        })
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
    95
    }
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    96
  }
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    97
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    98
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
    99
  /* Isabelle tool wrapper */
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   100
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   101
  val isabelle_tool =
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   102
    Isabelle_Tool("build_docker", "build Isabelle docker image", args =>
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   103
    {
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   104
      var base = default_base
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   105
      var entrypoint = false
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   106
      var logic = default_logic
64906
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
   107
      var no_build = false
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   108
      var output: Option[Path] = None
64899
749d3a86c6a3 clarified signature: packages may be accessed in Isabelle/Scala;
wenzelm
parents: 64897
diff changeset
   109
      var more_packages: List[String] = Nil
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   110
      var verbose = false
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   111
      var tag = ""
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   112
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   113
      val getopts =
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   114
        Getopts("""
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   115
Usage: isabelle build_docker [OPTIONS] APP_ARCHIVE
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   116
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   117
  Options are:
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   118
    -B NAME      base image (default """ + quote(default_base) + """)
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   119
    -E           set bin/isabelle as entrypoint
64894
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
   120
    -P NAME      additional Ubuntu package collection (""" +
64895
ad3b66e7a028 clarified packages;
wenzelm
parents: 64894
diff changeset
   121
          package_collections.keySet.toList.sorted.map(quote(_)).mkString(", ") + """)
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   122
    -l NAME      default logic (default ISABELLE_LOGIC=""" + quote(default_logic) + """)
64906
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
   123
    -n           no docker build
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   124
    -o FILE      output generated Dockerfile
64894
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
   125
    -p NAME      additional Ubuntu package
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   126
    -t TAG       docker build tag
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   127
    -v           verbose
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   128
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   129
  Build Isabelle docker image with default logic image, using a standard
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
   130
  Isabelle application archive for Linux (local file or remote URL).
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   131
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
   132
  Examples:
64895
ad3b66e7a028 clarified packages;
wenzelm
parents: 64894
diff changeset
   133
69957
e3217c6d6467 updated docker setup: lib32stdc++6 is no longer required for polyml-5.8, libfontconfig1 is required for headless jdk-11;
wenzelm
parents: 69873
diff changeset
   134
    isabelle build_docker -E -t test/isabelle:Isabelle2019 Isabelle2019_linux.tar.gz
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
   135
69957
e3217c6d6467 updated docker setup: lib32stdc++6 is no longer required for polyml-5.8, libfontconfig1 is required for headless jdk-11;
wenzelm
parents: 69873
diff changeset
   136
    isabelle build_docker -E -n -o Dockerfile http://isabelle.in.tum.de/dist/Isabelle2019_linux.tar.gz
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
   137
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   138
""",
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   139
          "B:" -> (arg => base = arg),
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   140
          "E" -> (_ => entrypoint = true),
64894
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
   141
          "P:" -> (arg =>
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
   142
            package_collections.get(arg) match {
64899
749d3a86c6a3 clarified signature: packages may be accessed in Isabelle/Scala;
wenzelm
parents: 64897
diff changeset
   143
              case Some(ps) => more_packages :::= ps
64894
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
   144
              case None => error("Unknown package collection " + quote(arg))
6c6bb62702d4 clarified packages;
wenzelm
parents: 64893
diff changeset
   145
            }),
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   146
          "l:" -> (arg => logic = arg),
64906
49549acbf025 added option -n, e.g. useful to generate Dockerfile only;
wenzelm
parents: 64905
diff changeset
   147
          "n" -> (_ => no_build = true),
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   148
          "o:" -> (arg => output = Some(Path.explode(arg))),
64899
749d3a86c6a3 clarified signature: packages may be accessed in Isabelle/Scala;
wenzelm
parents: 64897
diff changeset
   149
          "p:" -> (arg => more_packages ::= arg),
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   150
          "t:" -> (arg => tag = arg),
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   151
          "v" -> (_ => verbose = true))
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   152
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   153
      val more_args = getopts(args)
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   154
      val app_archive =
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   155
        more_args match {
64905
5e2eb9b14bbe support for remote APP_ARCHIVE, with self-contained Dockerfile (e.g. for Docker Hub);
wenzelm
parents: 64903
diff changeset
   156
          case List(arg) => arg
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   157
          case _ => getopts.usage()
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   158
        }
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   159
64942
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   160
      build_docker(new Console_Progress(), app_archive, base = base, logic = logic,
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   161
        no_build = no_build, entrypoint = entrypoint, output = output,
bae35a568b1b more options;
wenzelm
parents: 64941
diff changeset
   162
        more_packages = more_packages, tag = tag, verbose = verbose)
66790
c0e68e6a1beb build_docker is regular tool (non-admin);
wenzelm
parents: 66785
diff changeset
   163
    })
64890
d8ccbd5305bf build docker image from Isabelle application bundle for Linux;
wenzelm
parents:
diff changeset
   164
}