gpt4 book ai didi

java - Docker 化 Play 应用程序 - 下载互联网

转载 作者:行者123 更新时间:2023-12-02 10:22:24 25 4
gpt4 key购买 nike

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

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

当我对应用程序进行 docker 化时,我基本上是这样做的:

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 步骤也会再次下载所有 jar。虽然整个过程有效,但构建 docker 镜像大约需要 20 分钟,速度非常慢。

如何加快或缩短构建应用程序镜像所需的时间?

最佳答案

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

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

更好的选择是在开发计算机上构建应用程序的独立版本 ( Play Framwork Documentation: Creating a standalone version of your application ) - 所有依赖项都已下载 - 通过

activator dist

activator universal:package-zip-tarball

这些命令会生成应用程序的 .zip.tgz 文件,其中捆绑了所有依赖项。

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

如果您使用 .tgz 打包,您可以使用复制并将存档解压到您的 Docker 容器中

ADD app-server.tgs $HOME

在你的 Dockerfile 中。

关于java - Docker 化 Play 应用程序 - 下载互联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com