maven - mvn - java docker application
Dependencias Caching Jar para compilaciones Docker basadas en Maven (2)
Hay una nueva instrucción sobre este tema: https://github.com/carlossg/docker-maven#packaging-a-local-repository-with-the-image
El directorio $ MAVEN_CONFIG (predeterminado en /root/.m2) se configura como un volumen para que todo lo copiado allí en un archivo Docker en tiempo de compilación se pierda. Para eso se crea dir / usr / share / maven / ref /, y todo lo que allí se copiará en el inicio del contenedor a $ MAVEN_CONFIG.
Para crear un repositorio preempaquetado, cree un pom.xml con las dependencias que necesita y use esto en su archivo Docker. /usr/share/maven/ref/settings-docker.xml es un archivo de configuración que cambia el repositorio local a / usr / share / maven / ref / repository, pero puede usar su propio archivo de configuración siempre que use / usr / share / maven / ref / repository como repos local.
Estoy construyendo una imagen Docker de este Dockerfile:
FROM maven:3.3.3-jdk-8
MAINTAINER Mickael BARON
ADD pom.xml /work/pom.xml
WORKDIR /work
RUN mvn dependency:go-offline --fail-never
ADD ["src", "/work/src"]
RUN ["mvn", "package"]
Con este Dockerfile, obligo a descargar las dependencias antes de empacar mi proyecto Java. Por lo tanto, no tengo que volver a descargar las dependencias cada vez que cambié un archivo de mi directorio src.
Pero, hay un problema y este problema depende de la versión de Maven (imagen base). De hecho, las dependencias se descargan pero no se conservan en el directorio ~ / .m2 del contenedor. Esta vacio. Por lo tanto, cuando cambio algún archivo fuente, todas las dependencias se vuelven a descargar.
Sin embargo, noté que si cambio la versión de Maven de la imagen base (por ejemplo FROM maven:3.2.5-jdk-8
), funciona.
Muy extraño, ¿no?
Me temo que es debido a esta instrucción VOLUME
que han agregado:
Hace que /root/.m2
sea un volumen y, por lo tanto, los cambios en esa carpeta realizados por los pasos de compilación no se llevan a los siguientes contenedores de compilación.