Docker - скомпилируйте проект maven внутри контейнера Docker и запустите его оттуда - PullRequest
0 голосов
/ 13 марта 2019

У меня есть проект, в котором выполняется Vue & Spring Boot, и мне нужно создать файл docker-compose.yml для запуска mvn clean install, чтобы сгенерировать .jar, а затем создать «новый» образ из другого Dockerfile с указанным * 1004. * внутри контейнера докера.

Это Dockerfile, который необходимо запустить после завершения mvn clean install:

FROM java:8

ENV WKHTML_VERSION 0.12.4

# Builds the wkhtmltopdf download URL based on version numbers above
ENV DOWNLOAD_URL "https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTML_VERSION}/wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz"

RUN apt-get update && \
    apt-get install -y --no-install-recommends wget && \
    wget $DOWNLOAD_URL && \
    tar vxf wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz && \
    cp wkhtmltox/bin/wk* /usr/local/bin/ && \
    cp wkhtmltox/lib/* /usr/local/lib/ && \
    rm wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz

# @see https://spring.io/guides/gs/spring-boot-docker/
COPY   server/target/redo-server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

Так что шаги сборки должны быть примерно такими:

  • Установить узел + maven / вытащить эти образы
  • Установить postgresql и вытащить этот образ
  • Выполнить mvn clean install и сгенерировать .jar
  • Создайте новое изображение из вышеупомянутого Dockerfile и запустите его

Я новичок в docker-compose, поэтому у меня проблемы с настройкой в ​​правильном порядке выполнения.

Причина, по которой мне нужно это сделать, связана с тем, что в производственном конвейере отсутствует node or npm, что необходимо для запуска полного приложения maven (Vue.js и Spring Boot app), поэтому для этого требуется компилируется изнутри контейнера Docker

Было бы очень признательно, если бы кто-нибудь мог указать мне правильное направление, не говоря уже о - возможно ли это сделать?

1 Ответ

0 голосов
/ 13 марта 2019

Решено, написав многошаговую сборку в качестве моего Dockerfile.Я устанавливаю узел в качестве зависимости в файле клиента pom.xml.

# Install maven and copy project for compilation
FROM maven:latest as builder

COPY pom.xml /usr/local/pom.xml
COPY server /usr/local/server
COPY client /usr/local/client
WORKDIR /usr/local/

RUN mvn clean install


FROM openjdk:8
ENV WKHTML_VERSION 0.12.4
# Builds the wkhtmltopdf download URL based on version numbers above
ENV DOWNLOAD_URL "https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTML_VERSION}/wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz"

RUN apt-get update && \
    apt-get install -y --no-install-recommends wget && \
    wget $DOWNLOAD_URL && \
    tar vxf wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz && \
    cp wkhtmltox/bin/wk* /usr/local/bin/ && \
    cp wkhtmltox/lib/* /usr/local/lib/ && \
    rm wkhtmltox-${WKHTML_VERSION}_linux-generic-amd64.tar.xz

COPY   --from=builder /usr/local/redo/server/target/server-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...