Dockerizing一个Play应用程序 - 下载互联网

问题描述 投票:0回答:1

我想dockerize这在我以前更早的服务器上直接部署Java应用程序。基本上,我们必须在服务器上的回购协议的副本,跑了deplopyment这两个步骤(后我们更新了回购):

./bin/activator clean stage
./target/universal/stage/bin/app-server -J-Xms128M -J-Xmx512m -J-server -Dconfig.resource=application.conf

当我dockerizing应用,我基本上这样做:

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帖):

FROM ubuntu:16.04

ENV DEBIAN_FRONTEND noninteractive
ENV JAVA_HOME       /usr/lib/jvm/java-8-oracle
ENV LANG            en_US.UTF-8
ENV LC_ALL          en_US.UTF-8

RUN apt-get update && \
  apt-get install -y --no-install-recommends locales unzip && \
  locale-gen en_US.UTF-8 && \
  apt-get dist-upgrade -y && \
  apt-get --purge remove openjdk* && \
  echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections && \
  echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" > /etc/apt/sources.list.d/webupd8team-java-trusty.list && \
  apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886 && \
  apt-get update && \
  apt-get install -y --no-install-recommends oracle-java8-installer oracle-java8-set-default && \
  apt-get clean all

RUN apt-get install -y curl && \
    curl -OL https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-linux-x86_64.zip && \
    unzip protoc-3.2.0-linux-x86_64.zip -d protoc3 && \
    mv protoc3/bin/* /usr/local/bin/ && \
    mv protoc3/include/* /usr/local/include/

RUN wget http://downloads.typesafe.com/typesafe-activator/1.3.2/typesafe-activator-1.3.2-minimal.zip && \
    unzip typesafe-activator-1.3.2-minimal.zip && \
    mv activator-1.3.2-minimal /bin/activator

但是,即使当我使用基本映像/bin/activator clean stage步下载所有的罐子一次。而整个过程的工作,它需要大约20分钟,所要构建一个码头工人形象,这是非常缓慢的。

我如何可以加快或改善应用程序的图像构建所花费的时间?

java docker playframework
1个回答
1
投票

从您的CLI输出我猜你正在使用播放框架2.3版本。所示的命令可以是在其他版本不同。

你完全建立您的应用程序在新的泊坞窗容器。由于空图像不包含任何依赖,它必须全部下载它们。

更好的选择是建立自己的开发机上的应用(Play Framwork Documentation: Creating a standalone version of your application)的独立版本 - 在所有相关性已经下载 - 通过

activator dist

要么

activator universal:package-zip-tarball

这些命令产生.zip或捆绑所有依赖应用程序的.tgz文件。

然后你可以将它们复制到你的泊坞容器,解压它们,而无需下载所有的依赖启动应用程序。

如果您使用.tgz包装可以复制并通过将压缩包解压到您的码头工人容器

ADD app-server.tgs $HOME

在Dockerfile。

© www.soinside.com 2019 - 2024. All rights reserved.