En este punto, no estamos desarrollando ni aceptando nuevas funciones ni siquiera corrigiendo errores no críticos.
Este complemento de Maven integra Maven con Docker.
Los objetivos del diseño son:
Dockerfile
son la forma de crear proyectos Docker; eso es lo que usa este complemento. Son obligatorios.mvn package
, obtiene una imagen de Docker. Cuando escribes mvn deploy
, tu imagen se envía.mvn dockerfile:build
y posteriormente mvn dockerfile:tag
y posteriormente mvn dockerfile:push
sin problemas. Esto también elimina la necesidad de algo como mvn dockerfile:build -DalsoPush
; en su lugar, puedes simplemente decir mvn dockerfile:build dockerfile:push
.Este proyecto se adhiere al Código Abierto de Conducta. Al participar, se espera que respete este código.
Consulte el registro de cambios para obtener una lista de lanzamientos.
Este complemento requiere Java 7 o posterior y Apache Maven 3 o posterior (dockerfile-maven-plugin <=1.4.6 necesita Maven >= 3, y para otros casos, Maven >= 3.5.2). Para ejecutar las pruebas de integración o utilizar el complemento en la práctica, se necesita una configuración de Docker que funcione.
Para obtener más ejemplos, consulte el directorio de pruebas de integración.
En particular, la prueba avanzada muestra un servicio completo que consta de dos microservicios cuya integración se prueba mediante helios-testing
.
Esto configura el complemento real para crear su imagen con mvn package
y enviarla con mvn deploy
. Por supuesto, también puedes decir mvn dockerfile:build
explícitamente.
< 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
correspondiente podría verse así:
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
Nota importante
La forma más Maven-ish de hacer referencia al artefacto de compilación probablemente sería usar la variable project.build.directory
para hacer referencia al directorio 'destino'. Sin embargo, esto da como resultado una ruta absoluta, que no es compatible con el comando ADD en Dockerfile. Cualquier fuente de este tipo debe estar dentro del contexto de la compilación de Docker y, por lo tanto, se debe hacer referencia a ella mediante una ruta relativa . Ver #101
No utilice ${project.build.directory}
como forma de hacer referencia a su directorio de compilación.
Hay muchas ventajas al utilizar este complemento para sus compilaciones.
Este complemento le permite aprovechar el caché de Docker de manera más consistente, acelerando enormemente sus compilaciones al permitirle almacenar en caché las dependencias de Maven en su imagen. También recomienda evitar el maven-shade-plugin
, que también acelera enormemente las compilaciones.
Ya no tienes que decir algo como:
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
En cambio, basta con decir:
mvn deploy
Con la configuración básica, esto asegurará que la imagen se cree y se envíe en el momento correcto.
Puede depender de la información de Docker de otro proyecto, porque este complemento adjunta metadatos del proyecto cuando crea imágenes de Docker. Simplemente agregue esta información a cualquier proyecto:
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
Ahora puedes leer información sobre la imagen de Docker del proyecto del que dependías:
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
Esto es excelente para una prueba de integración en la que desea la última versión de la imagen de Docker de otro proyecto.
Tenga en cuenta que debe registrar una extensión Maven en su POM (o un POM principal) para que se admita el tipo docker-info
:
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
Tus proyectos se ven así:
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
Ahora puedes usar estos proyectos con Fig o docker-compose o algún otro sistema que funcione con Dockerfiles. Por ejemplo, un docker-compose.yml
podría verse así:
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
Ahora, docker-compose up
y docker-compose build
funcionarán como se esperaba.
Consulte los documentos de uso.
Consulte los documentos de autenticación.
Para cortar la versión de 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
Usamos gren
para crear lanzamientos en Github:
gren release