Как создать образ Docker для приложения Spring Boot без JAR под рукой - PullRequest
0 голосов
/ 04 сентября 2018

Я следовал этим урокам, чтобы создать образ Docker для моего приложения Spring Boot, которое использует Maven в качестве инструмента для сборки. Я использую ВМ boot2docker поверх машины с Windows 10, клонируя свой проект на ВМ из моего хранилища Bitbucker.

https://spring.io/guides/gs/spring-boot-docker/

https://www.callicoder.com/spring-boot-docker-example/

Я понимаю инструкции, но мне не удалось создать правильный образ Docker. Вот что я попробовал.

  1. Используйте плагин Spotify maven для Dockerfile. Попробуйте запустить ./mvnw, чтобы собрать JAR, а также образ Docker. Но у меня не установлен Java в boot2docker. Таким образом, Maven-оболочка ./mvnw не может быть запущена.

  2. Я пытался собрать JAR через Dockerfile, который основан на образе openjdk: 8-jdk-alpine. Я добавил RUN ./mvnw package инструкцию в Dockerfile. Затем запустите docker build -t <my_project> ., чтобы создать образ Docker. Ошибка в инструкции RUN, требующей /bin/sh: mvnw: not found The command '/bin/sh -c mvnw package' returned a non-zero code: 127

Мой Dockerfile, расположенный в каталоге, где расположен mvnw:

MAINTAINER myname

VOLUME /tmp

RUN ./mvnw package

ARG JAR_FILE=target/myproject-0.0.1-SNAPSHOT.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Для 1 мне нужно установить Java в ОС, где находится механизм Docker. Но я думаю, что это не очень хорошая практика, потому что это снижает мобильность.

Во-первых, во-первых, я не знаю, как успешно запустить ./mvnw в Dockerfile. Во-вторых, я не уверен, является ли хорошей практикой создание JAR-файла Spring Boot с помощью Dockerfile, поскольку я не вижу никакого учебного пособия по «Docker для Spring Boot», которое бы указывало на это.

Итак, как лучше всего решить мою ситуацию? Я новичок в Докере. Комментарии и ответы приветствуются!

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете установить maven и запустить компиляцию прямо в сборке. Как правило, это будет многоэтапная сборка, чтобы избежать включения всего jdk в ваш отправленный образ:

FROM openjdk:8-jdk-alpine as build
RUN apk add --no-cache maven
WORKDIR /java
COPY . /java
RUN mvn package -Dmaven.test.skip=true
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/java/target/myproject-0.0.1-SNAPSHOT.jar"]

Выше приведена урезанная версия переделки из того же примера, который я делал в прошлом. Возможно, вам потребуется изменить имена файлов в вашей точке входа, но ключевые шаги - установить maven и запустить его внутри вашей сборки.

...