Java 停靠播放应用程序-下载互联网

Java 停靠播放应用程序-下载互联网,java,docker,playframework,Java,Docker,Playframework,我正在尝试对一个Java应用程序进行dockerize,我以前在服务器上直接部署该应用程序。基本上,我们在服务器上有一个repo的副本,并运行以下两个步骤进行部署(在更新repo之后): 当我将应用程序归档时,我基本上是这样做的: FROM ubuntu:latest RUN mkdir home/app-server ENV HOME=home/app-server COPY . $HOME WORKDIR $HOME RUN ./bin/activator clean stage

我正在尝试对一个Java应用程序进行dockerize,我以前在服务器上直接部署该应用程序。基本上,我们在服务器上有一个repo的副本,并运行以下两个步骤进行部署(在更新repo之后):

当我将应用程序归档时,我基本上是这样做的:

FROM ubuntu:latest

RUN mkdir home/app-server
ENV HOME=home/app-server

COPY . $HOME

WORKDIR $HOME

RUN ./bin/activator clean stage  #this is inside the $HOME directory

EXPOSE 5000
CMD ["./target/universal/stage/bin/app-server", "-J-Xms128M", "-J-Xmx512m", "-J-server", "-Dhttp.port=5000", "-Dconfig.resource=stage.conf"]
但是
/bin/activator clean stage
几乎可以在互联网上下载:

Getting com.typesafe.activator activator-launcher 1.3.12 ...
downloading https://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.activator/activator-launcher/1.3.12/jars/activator-launcher.jar ...
    [SUCCESSFUL ] com.typesafe.activator#activator-launcher;1.3.12!activator-launcher.jar (1460ms)
downloading https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar ...
    [SUCCESSFUL ] org.scala-lang#scala-library;2.11.8!scala-library.jar (310ms)
为了解决这个问题,我创建了一个基础图像,我同意这是一个混乱(从各种博客/SO帖子中散列在一起):

但是,即使我使用基本映像,
/bin/activator clean stage
步骤也会再次下载所有jar。虽然整个过程都在进行中,但构建docker图像大约需要20分钟,这非常缓慢


如何加快或改进按应用程序映像构建所需的时间?

从您的cli输出,我猜您使用的是Play Framework的2.3版。显示的命令在其他版本中可能有所不同

您正在完全在新的docker容器中构建应用程序。由于空映像不包含任何依赖项,因此必须下载所有依赖项

一个更好的选择是在开发机器上构建独立版本的应用程序(),其中所有依赖项都已下载

activator dist

activator universal:package-zip-tarball
这些命令生成应用程序的
.zip
.tgz
文件,并捆绑所有依赖项

然后,您可以将它们复制到Docker容器中,解压缩它们并启动应用程序,而无需下载所有依赖项

如果使用
.tgz
打包,您可以使用

ADD app-server.tgs $HOME

在Dockerfile中。

从cli输出中,我猜您使用的是Play Framework的2.3版。显示的命令在其他版本中可能有所不同

您正在完全在新的docker容器中构建应用程序。由于空映像不包含任何依赖项,因此必须下载所有依赖项

一个更好的选择是在开发机器上构建独立版本的应用程序(),其中所有依赖项都已下载

activator dist

activator universal:package-zip-tarball
这些命令生成应用程序的
.zip
.tgz
文件,并捆绑所有依赖项

然后,您可以将它们复制到Docker容器中,解压缩它们并启动应用程序,而无需下载所有依赖项

如果使用
.tgz
打包,您可以使用

ADD app-server.tgs $HOME
在您的Dockerfile中

ADD app-server.tgs $HOME