【问题标题】:Where is the base docker image specified in Play Framework?Play Framework 中指定的基础 docker 镜像在哪里?
【发布时间】:2016-10-03 20:43:33
【问题描述】:

我的应用程序是使用 Scala 在 Play Framework (2.5.3) 上构建的。为了部署应用程序,我使用sbt docker:publishLocal 命令创建了一个 docker 映像。我试图找出基本 docker 映像文件在播放框架文件夹结构中的位置。我确实在 target/docker 文件夹中看到了一个 DockerFile。我不知道 Play Framework 如何创建这个 DockerFile 以及 Play Framework 在哪里/如何告诉 docker 在基础映像上分层应用程序。我是 scala/play/docker n00b。请帮忙。

【问题讨论】:

  • 在标题中您询问的是 docker 映像,在内容中 - 关于 docker 文件和“基础 docker 映像”。所以最后,你在找什么。还有:你为什么需要它?
  • Docker 镜像是由一个名为 sbt-native-packager 的插件生成的,而不是由 Play 框架本身生成的。也许他们的文档可以帮助您 github.com/sbt/sbt-native-packagergithub.com/marcuslonnberg/sbt-dockerscala-sbt.org/sbt-native-packager/formats/docker.html
  • @michaJlS 我正在寻找有关 play 框架使用的基本 docker 映像的详细信息。关于你关于我为什么需要它的问题 - 1. 我想知道它在哪里 2. 我想知道如果需要我可以如何添加另一层。

标签: scala playframework docker sbt playframework-2.5


【解决方案1】:

此处的文档:http://www.scala-sbt.org/sbt-native-packager/formats/docker.html 表示基础图像是 dockerfile/java,它似乎不在 docker hub 中,但图像的详细信息在 github 上:https://github.com/dockerfile/java

文档还指出,您可以使用“dockerBaseImage”环境设置或创建自定义 dockerfile http://www.scala-sbt.org/sbt-native-packager/formats/docker.html#custom-dockerfile 来指定自己的基础镜像

还说明了使用您自己的基础映像时的要求:

用作运行应用程序基础的图像。它应该包含 chown、mkdir 路径上的二进制文件,具有可发现的 java 二进制文件,并包含由 daemonUser(默认为守护进程)配置的用户。

【讨论】:

    【解决方案2】:

    这里有一些定义,以便了解我在说什么。

    • Docker 容器是已配置和存储的存储应用程序或服务,以便 docker 可以在安装了 docker 的任何机器上运行它。
    • Docker 映像 是用于运行新容器的 docker 容器实例的保存状态。
    • Dockerfiles 是包含有关如何构建 docker 映像的构建说明的文件。这是为了卸载一些必须附加的额外参数,以便按照他们想要的方式运行容器。

    @michaJlS 我正在寻找有关 play 框架使用的基本 docker 映像的详细信息。关于你关于我为什么需要它的问题 - 1. 我想知道它在哪里 2. 我想知道如果需要我可以如何添加另一层。

    1.) 这将基于您要查找的内容。如果您正在为 docker 寻找即用型图像,只需执行 docker images 并查找暗示您正在使用的图像的图像。如果您正在寻找 原始 数据,您可以在 /var/lib/docker/graph 中找到。然而,这是没有意义的,因为您需要只能由我上面给出的 docker images 命令指定的图像 ID。如果图像没有正确构建,图像将不会出现。

    2.) 如果您希望修改或附加一个附加层(通过添加层,您的意思是向您的应用程序添加新文件和模块),您需要运行 docker 映像 (via the docker run command)。如果 docker 守护进程无法定位 docker 映像,这同样没有实际意义。

    虽然这应该可以回答您的问题,但我认为这不是您要问的。 关心 docker 的人是希望将应用程序放入可以在任何平台上运行的容器中的人,以避免依赖问题,同时保持相对便利。如果您尝试使用 docker 来放置新创建的应用程序,您将需要build from a dockerfile

    简而言之,dockerfile 是构建指令,您通常必须在运行容器之前或在容器内部时指定它们。如果您声明 sbt docker 命令创建了一个 docker 文件,您将需要查找该文件并使用 docker build 命令创建图像实例(信息应在第二个链接中提供) .为了尝试让您的应用程序在容器上运行,您最好的做法是将其构建在具有正在运行的应用程序环境的容器中,或者直接从 dockerfile 构建它。

    第一个选项是简单地使用docker run -ti imagename,图像是运行应用程序的机器环境。您可以在docker hub and one that may be of interest to you is this play-framework image someone else created 上找到一些图片。该命令将使您进入与容器的交互式会话,因此您可以像尝试在自己的环境中创建应用程序一样工作。完成构建后不要忘记使用docker commit

    构建映像的更快方法是从 dockerfile 进行。如果您知道所有命令并且拥有创建和运行应用程序所需的所有依赖项,只需将它们放入名为“Dockerfile”的文件中(按照链接 2 的说明和指导)并执行docker build -t NewImageName /path/to/Dockerfile。这将创建一个图像,您可以使用它来创建该图像的容器或以您认为合适的方式分发它。

    【讨论】:

      【解决方案3】:

      没有指定的 Docker 文件,它是由具有预定义默认值的插件生成的,您可以覆盖它

      http://www.scala-sbt.org/sbt-native-packager/formats/docker.html

      您可以查看 docker.DockerPlugin,以更好地了解使用的默认值。

      您还可以查看 DockerKeys 的其他任务,例如

      docker-generate-config

      【讨论】:

      • 您认为此时我们应该结合所有三个答案吗?我们所有人都有一些东西可以带到桌面上来帮助回答问题的一个方面。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2022-01-22
      • 2020-01-20
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多