Cómo automatizar la implementación de contenedores de Docker a través de Maven

Este artículo está dirigido a personas que utilizan Maven como una herramienta de gestión de dependencias y compilación para aplicaciones JAVA. Le mostrará cómo integrar la compilación de contenedores de Docker, etiquetar e impulsar los flujos de trabajo en su ecosistema de administración de compilación de Maven existente.

Tener la capacidad de construir, etiquetar y enviar su aplicación como un contenedor directamente desde los comandos del ciclo de vida de Maven es algo muy bueno. Simplemente hace las cosas fáciles y rápidas si está tratando de aprovechar el poder de los contenedores para implementar sus aplicaciones y todo listo con Maven para la administración de dependencias.

Si echamos un vistazo a las soluciones existentes para integrar la implementación del contenedor de la ventana acoplable en Maven, hay varias, como el complemento Spotify Maven Docker, el complemento Fabric8io Docker Maven, etc. Pero todas estas soluciones aportan una complejidad no deseada, una curva de aprendizaje adicional y demasiado. cambie a su código de aplicación existente. Sin embargo, existe una manera más simple y fácil de lograr esto sin el uso de ningún complemento de terceros.

Si observa el complemento Ant de Maven, nos permite ejecutar comandos externos. Entonces, al usar el complemento Ant, tenemos la capacidad de ejecutar la compilación de docker, etiquetar, empujar o simplemente cualquier comando que desee. Lo único que tenemos que hacer es proporcionar un Dockerfile adecuado para crear la imagen de Docker para su aplicación y el conjunto necesario de comandos y configuraciones de Maven en el archivo pom.xml.

Para explicar los pasos involucrados en este proceso, usaré una aplicación JAVA de muestra. Contiene todos los ejemplos de código utilizados en los siguientes pasos. Puedes clonarlo desde aquí.

Paso 1 | Crea el Dockerfile

Dockerfile debe almacenarse dentro de la ruta src / main / docker / Dockerfile de su aplicación JAVA.
# Pull base imageFROM tomcat:8.0.30-jre7# MaintainerMAINTAINER "[email protected]"
# Set Environment propertiesENV JAVA_OPTS=-Denvironment=production# Copy war file to tomcat webapps folderCOPY /dockermavensample.war /usr/local/tomcat/webapps/

Paso 2 | Actualice pom.xml para copiar todos los recursos relacionados con Docker en el directorio de destino

Podemos usar maven-resource-plugin para copiar recursos.
 maven-resources-plugin   copy-resources validate  copy-resources   ${basedir}/target;   src/main/docker true     

Paso 3 | Actualice pom.xml para permitir la creación y etiqueta de la imagen de Docker a través del complemento Ant de Maven


     
     
      org.apache.maven.plugins
      1.6
     
       prepare-package 
      
       package 
       
        false 
        
          ; 
         run 
       
      
     
    

El complemento Ant de Maven ejecutará el comando de la ventana acoplable en la fase del paquete del ciclo de vida de Maven en el siguiente orden, lo que generará la imagen de la ventana acoplable a partir del archivo Docker que se copió en la carpeta de destino en el paso 2.

docker build -t dockermavensample:1.0.0 target

Paso 4 | Actualice el archivo pom.xml para permitir enviar la imagen de Docker al repositorio de Docker remoto

Idealmente para la producción, tendría que enviar sus imágenes de Docker a su propio registro de Docker privado o usar un repositorio de imágenes de Docker de terceros que permita almacenar imágenes de Docker privadas para que otros no puedan extraer sus imágenes de Docker directamente.
 org.apache.maven.plugins; maven-antrun-plugin 1.6 ;  install false 
    
      
       run 
     
    

Además de los pasos anteriores, es posible que desee tener control sobre cómo está ejecutando estos comandos relacionados con Docker en su ciclo de vida de Maven. Para eso, puede usar los perfiles de Maven para dividir lógicamente las definiciones de complementos anteriores. Luego, ejecútelos solo cuando se invoque el perfil relacionado con esa acción.

Eche un vistazo a los siguientes perfiles de muestra:


    
      dockerBuild maven-resources-plugin 
     
       copy-resources validate; 
       
       
        copy-resources 
       
       
       
       
        ${basedir}/target 
        
          src/main/dockertrue  ; 
        
       
      
       org.apache.maven.plugins maven-antrun-plugin 1.6 
     
      prepare-package 
      
       package false 
        
         run 
       
      
     
    
 
    
      true; 
    

    
     
      dockerRelease
      org.apache.maven.plugins 
     
      maven-antrun-plugin 1.6 
      
       install 
       
        false
         run 
      
     
    

Después de completar los pasos anteriores, simplemente ejecute

mvn clean install -P dockerBuild,dockerRelease

Now your JAVA application is packaged as a container and pushed into a remote docker repository as well. You can test whether the image you created is working by running following commands,

As you can see we can use already available Maven features and plugins to create a well-structured build pipeline for deploying our applications as containers.

Sample Project:

rav94/dockermavensample

Demo Project for showcasing Automating Container Deployment via Maven - rav94/dockermavensamplegithub.com

Thanks for reading!