2017-12-25 28 views
2

빌드 단계의 레이어에서 Maven 종속성을 내 Docker Multi Stage Build에 캐시하고 싶습니다. 다음과 같이Docker 다중 스테이지 빌드 레이어에 Maven 종속성과 플러그인을 캐시하는 방법은 무엇입니까?

내 Dockerfile 보인다 :

FROM maven:3-jdk-8 as mvnbuild 
RUN mkdir -p /opt/workspace 
WORKDIR /opt/workspace 
COPY pom.xml . 
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml dependency:resolve 
COPY . . 
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml package 

FROM openjdk:8-jre-alpine 
... 

```

은 내가 Docker Multi Stage Build blog post (also available on Github)에서 제공하는 예제를이 Dockerfile을 기반으로.

dependency:resolve에 의해 한 번 다운로드 한 다음 package에 의해 다시 사용되는 종속성을 보는 대신 빌드를 실행할 때 두 단계에서 다운로드 한 종속성을보고 있습니다.

누군가가이 기능을 사용하고 있습니까? 여기서 내가 뭘 잘못하고 있니?

답변

1

나는 같은 질문을 발견했습니다. Maven 타겟 간의 차이 (예 : dependency:resolvedependency:resolve-plugin) 때문인 것으로 나타났습니다. 기본적으로 dependency:resolve은 애플리케이션 라이브러리 용이고 dependency:resolve-plugin은 플러그인 라이브러리 용입니다. 따라서 라이브러리는 두 실행 단계 모두에서 다운로드됩니다.

종속성 : resolve는 모든 종속성을 해결하기 위해 Maven에게 알려주고 은 버전을 표시합니다. Java 9 참고 : 이 Java 9로 실행될 때 모듈 이름을 표시합니다.

종속성 : resolve-plugins은 Maven에게 플러그인과 그 종속성을 해결하도록 알려줍니다. package가 내장 된 대상과 dependency:resolve-plugin가 먼저 실행에 해결 알 수 없습니다 추가 라이브러리를 필요로하더라도 dependency:resolve-plugins

https://maven.apache.org/plugins/maven-dependency-plugin/index.html

, Maven은 모든 필요한 라이브러리를 다운로드하지 않습니다. 나도 성공하지 않고 dependency:go-offline를 시험해 보았다.

하나의 솔루션은 빌드 이미지에 코드를 추가하기 전후에 빌드 대상을 실행하는 것입니다. 이렇게하면 하위 계층에 모든 플러그인 종속성을 가져와 재사용 할 수 있습니다.

FROM maven:3-jdk-8 as mvnbuild 
RUN mkdir -p /opt/workspace 
WORKDIR /opt/workspace 
COPY pom.xml . 
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml dependency:resolve-plugins dependency:resolve clean package 
COPY . . 
RUN mvn -B -s /usr/share/maven/ref/settings-docker.xml clean package 

FROM openjdk:8-jre-alpine 
+0

가능성은 당신이 당신의 대답에 Dockerfile에서 빌드 스 니펫 (snippet)을 추가 할 수 있습니다 다음과 같이

위의 예에이 솔루션을 적용입니까? 의존성을 시도해 보았습니다 : resolve-plugins, dependency : go-offline 및 dependency : 해결하지만 모든 빌드에서 여전히 종속성 (플러그인이 아님) 다운로드를보고 있습니다. – Trastle

+0

회사 정책으로 인해 회사의 정보를 공유 할 수 없습니다. 따라서 나는 샘플 https://github.com/dockersamples/atsea-sample-shop-app만을 사용하여 검사하고 있습니다. 두 단계에서 다시 다운로드 한 라이브러리 (플러그인이 아님)를 알려주십시오. – Apolozeus

+0

고마워, 다시 보니 플러그인 일 뿐이야. 캐쉬 된 플러그인 중 일부가 jitpack.io에서 벗어났습니다. – Trastle