현재로서는 새로운 기능을 개발 또는 수용하지 않으며 중요하지 않은 버그도 수정하지 않습니다.
이 Maven 플러그인은 Maven을 Docker와 통합합니다.
설계 목표는 다음과 같습니다.
Dockerfile
은 Docker 프로젝트를 빌드하는 방법입니다. 이것이 바로 이 플러그인이 사용하는 것입니다. 이는 필수입니다.mvn package
입력하면 Docker 이미지가 생성됩니다. mvn deploy
입력하면 이미지가 푸시됩니다.mvn dockerfile:build
및 이후 mvn dockerfile:tag
및 이후 mvn dockerfile:push
문제 없이 입력할 수 있습니다. 또한 mvn dockerfile:build -DalsoPush
와 같은 것이 필요하지 않습니다. 대신 mvn dockerfile:build dockerfile:push
라고 말할 수 있습니다.이 프로젝트는 공개 행동 강령을 준수합니다. 참여함으로써 귀하는 이 코드를 준수해야 합니다.
릴리스 목록은 변경 로그를 참조하세요.
이 플러그인에는 Java 7 이상 및 Apache Maven 3 이상이 필요합니다(dockerfile-maven-plugin <=1.4.6에는 Maven >= 3이 필요하고 다른 경우에는 Maven >= 3.5.2가 필요함). 통합 테스트를 실행하거나 실제로 플러그인을 사용하려면 작동하는 Docker 설정이 필요합니다.
더 많은 예를 보려면 통합 테스트 디렉터리를 참조하세요.
특히 고급 테스트에서는 helios-testing
사용하여 통합 테스트를 거친 두 개의 마이크로 서비스로 구성된 전체 서비스를 선보입니다.
이는 mvn package
로 이미지를 빌드하고 mvn deploy
로 푸시하도록 실제 플러그인을 구성합니다. 물론 mvn dockerfile:build
명시적으로 말할 수도 있습니다.
< plugin >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-plugin</ artifactId >
< version >${dockerfile-maven-version}</ version >
< executions >
< execution >
< id >default</ id >
< goals >
< goal >build</ goal >
< goal >push</ goal >
</ goals >
</ execution >
</ executions >
< configuration >
< repository >spotify/foobar</ repository >
< tag >${project.version}</ tag >
< buildArgs >
< JAR_FILE >${project.build.finalName}.jar</ JAR_FILE >
</ buildArgs >
</ configuration >
</ plugin >
해당 Dockerfile
다음과 같습니다.
FROM openjdk:8-jre
MAINTAINER David Flemström <[email protected]>
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/myservice.jar"]
# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib /usr/share/myservice/lib
# Add the service itself
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/myservice.jar
중요사항
빌드 아티팩트를 참조하는 가장 Maven 방식은 아마도 '대상' 디렉터리를 참조하기 위해 project.build.directory
변수를 사용하는 것일 것입니다. 그러나 이로 인해 Dockerfile의 ADD 명령이 지원하지 않는 절대 경로가 생성됩니다. 이러한 소스는 Docker 빌드의 컨텍스트 내에 있어야 하므로 상대 경로 로 참조되어야 합니다. #101 참조
빌드 디렉터리를 참조하는 방법으로 ${project.build.directory}
사용하지 마세요 .
빌드에 이 플러그인을 사용하면 많은 이점이 있습니다.
이 플러그인을 사용하면 Docker 캐시를 보다 일관되게 활용하고 이미지에 Maven 종속성을 캐시할 수 있어 빌드 속도를 크게 높일 수 있습니다. 또한 빌드 속도를 크게 높이는 maven-shade-plugin
피하는 것이 좋습니다.
더 이상 다음과 같은 말을 할 필요가 없습니다.
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
대신 다음과 같이 말하는 것만으로도 충분합니다.
mvn deploy
기본 구성을 사용하면 이미지가 올바른 시간에 빌드되고 푸시되는지 확인할 수 있습니다.
이 플러그인은 Docker 이미지를 빌드할 때 프로젝트 메타데이터를 첨부하므로 다른 프로젝트의 Docker 정보에 의존할 수 있습니다. 다음 정보를 프로젝트에 추가하기만 하면 됩니다.
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
이제 의존한 프로젝트의 Docker 이미지에 대한 정보를 읽을 수 있습니다.
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
이는 다른 프로젝트의 Docker 이미지의 최신 버전을 원하는 통합 테스트에 적합합니다.
docker-info
유형을 지원하려면 POM(또는 상위 POM)에 Maven 확장을 등록해야 합니다.
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
귀하의 프로젝트는 다음과 같습니다:
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
이제 Fig, docker-compose 또는 Dockerfiles와 작동하는 다른 시스템에서 이러한 프로젝트를 사용할 수 있습니다. 예를 들어 docker-compose.yml
은 다음과 같습니다.
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
이제 docker-compose up
및 docker-compose build
예상대로 작동합니다.
사용법 문서를 참조하세요.
인증 문서를 참조하세요.
Maven 릴리스를 잘라내려면 다음을 수행하십시오.
mvn clean [-B -Dinvoker.skip -DskipTests -Darguments='-Dinvoker.skip -DskipTests']
-Dgpg.keyname=<key ID used for signing artifacts>
release:clean release:prepare release:perform
gren
사용하여 Github에서 릴리스를 생성합니다.
gren release