À ce stade, nous ne développons ni n’acceptons de nouvelles fonctionnalités ni même ne corrigeons les bogues non critiques.
Ce plugin Maven intègre Maven avec Docker.
Les objectifs de conception sont :
Dockerfile
vous permettent de créer des projets Docker ; c'est ce que ce plugin utilise. Ils sont obligatoires.mvn package
, vous obtenez une image Docker. Lorsque vous tapez mvn deploy
, votre image est poussée.mvn dockerfile:build
et versions ultérieures mvn dockerfile:tag
et versions ultérieures mvn dockerfile:push
sans problème. Cela élimine également le besoin de quelque chose comme mvn dockerfile:build -DalsoPush
; à la place, vous pouvez simplement dire mvn dockerfile:build dockerfile:push
.Ce projet adhère au Code de conduite ouvert. En participant, vous êtes censé honorer ce code.
Voir le journal des modifications pour une liste des versions
Ce plugin nécessite Java 7 ou version ultérieure et Apache Maven 3 ou version ultérieure (dockerfile-maven-plugin <=1.4.6 nécessite Maven >= 3, et pour les autres cas, Maven >= 3.5.2). Pour exécuter les tests d'intégration ou pour utiliser le plugin dans la pratique, une configuration Docker fonctionnelle est nécessaire.
Pour plus d’exemples, consultez le répertoire des tests d’intégration.
En particulier, le test avancé présente un service complet composé de deux micro-services dont l'intégration est testée à l'aide helios-testing
.
Cela configure le plugin réel pour créer votre image avec mvn package
et la pousser avec mvn deploy
. Bien sûr, vous pouvez également dire mvn dockerfile:build
explicitement.
< 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 >
Un Dockerfile
correspondant pourrait ressembler à :
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
Remarque importante
La manière la plus Maven de référencer l'artefact de construction serait probablement d'utiliser la variable project.build.directory
pour référencer le répertoire « cible ». Cependant, cela génère un chemin absolu, qui n'est pas pris en charge par la commande ADD dans le Dockerfile. Une telle source doit être dans le contexte de la construction Docker et doit donc être référencée par un chemin relatif . Voir #101
N'utilisez pas ${project.build.directory}
comme moyen de référencer votre répertoire de construction.
Il existe de nombreux avantages à utiliser ce plugin pour vos builds.
Ce plugin vous permet d'exploiter le cache Docker de manière plus cohérente, accélérant considérablement vos builds en vous permettant de mettre en cache les dépendances Maven dans votre image. Cela encourage également à éviter le maven-shade-plugin
, qui accélère également considérablement les builds.
Vous n'êtes plus obligé de dire quelque chose comme :
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
Il suffit simplement de dire :
mvn deploy
Avec la configuration de base, cela garantira que l'image est construite et poussée aux bons moments.
Vous pouvez compter sur les informations Docker d'un autre projet, car ce plugin attache les métadonnées du projet lorsqu'il crée des images Docker. Ajoutez simplement ces informations à n’importe quel projet :
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
Maintenant, vous pouvez lire des informations sur l'image Docker du projet dont vous dépendiez :
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
C'est idéal pour un test d'intégration où vous souhaitez la dernière version de l'image Docker d'un autre projet.
Notez que vous devez enregistrer une extension Maven dans votre POM (ou un POM parent) pour que le type docker-info
soit pris en charge :
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
Votre (vos) projet(s) ressemblent à ceci :
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
Vous pouvez maintenant utiliser ces projets avec Fig ou docker-compose ou un autre système fonctionnant avec Dockerfiles. Par exemple, un docker-compose.yml
pourrait ressembler à :
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
Désormais, docker-compose up
et docker-compose build
fonctionneront comme prévu.
Voir les documents d'utilisation.
Voir les documents d'authentification.
Pour supprimer la version 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
Nous utilisons gren
pour créer des versions dans Github :
gren release