Проще говоря, вы можете разбить Dockerfile на два, например, builder-base.dockerfile
и final.dockerfile
. Затем создайте каталог builder-base
и переместите pom.xml
в builder-base
.
структура каталогов:
.
+-- builder-base
| +-- pom.xml
|-- src
|-- builder-base.dockerfile
|-- final.dockerfile
В final.dockerfile
есть:
FROM java-builder AS build
# Build App
COPY src/ /build/src/
RUN mvn -Dmaven.test.skip=true package -Dcheckstyle.skip
# Stage 2 : create the docker final image
FROM adoptopenjdk:8-jre-openj9 AS runtime
COPY --from=build /build/target/*-runner.jar /app/app.jar
COPY --from=build /build/target/lib/* /app/lib/
WORKDIR /app
RUN chgrp -R 0 /app &&\
chmod g=u /app
USER 1001
EXPOSE 8080
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]
Сначала поместите этот код в builder-base.dockerfile
:
FROM maven:3-jdk-8-slim
WORKDIR /build
# Download Dependencies
COPY pom.xml .
RUN mvn dependency:go-offline
Итак, сначала вы должны построить образ с именем 'java -builder'
docker build -t java-builder -f builder.dockerfile ./builder-base
Теперь, Вы можете скомпилировать исходный код, используя следующую команду:
docker build -t app -f final.dockerfile .
Базовое изображение в final.dockerfile
равно java-builder
. Если вы не перестраиваете изображение, вы всегда можете создать docker окончательное изображение с использованием кеша.