Докеризация приложения Play - загрузка интернета - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь докеризировать Java-приложение, которое ранее использовал для непосредственного развертывания на сервере. По сути, у нас была копия репо на сервере, и мы выполнили эти два шага для развёртывания (после того, как мы обновили репо):

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

Когда я докеризировал приложение, я в основном делал это:

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 минут, что очень медленно.

Как можно ускорить или улучшить время, необходимое для создания образа приложения?

1 Ответ

0 голосов
/ 07 февраля 2019

Судя по вашим выводам, вы используете версию 2.3 Play Framework. Показанные команды могут отличаться в других версиях.

Вы полностью строите свое приложение в новом контейнере Docker. Поскольку пустое изображение не содержит никаких зависимостей, оно должно загрузить их все.

Лучшим вариантом является создание автономной версии вашего приложения ( Play Framwork Documentation: Создание автономной версии вашего приложения ) на вашем компьютере для разработки - где все зависимости уже загружены - через

activator dist

или

activator universal:package-zip-tarball

Эти команды создают файл .zip или .tgz вашего приложения со всеми связанными зависимостями.

Затем вы можете скопировать их в свой контейнер Docker, распаковать их и запустить приложение, не загружая все зависимости.

Если вы используете упаковку .tgz, вы можете скопировать и и распаковать архив в ваш док-контейнер, используя

ADD app-server.tgs $HOME

в вашем Dockerfile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...