Integración de pruebas con Docker

Siguiendo con la serie de tutoriales dedicados a Docker,
vamos a ver como integrar Docker dentro de nuestros proyectos a través de Maven
y como lanzar nuestros test de integración sobre una base de datos creada en un contenedor.

0. Índice de contenidos

1. Introducción

En el tutorial Docker para Bases de Datos
habíamos creado una serie de imágenes con diferentes motores de BBDD, ahora vamos a dar un paso más y vamos a integrar una de estas
imágenes (en concreto la imagen con DB2 )
dentro de nuestro proyecto Maven.

El objetivo es que durante la fase de tests de integración, construyamos la imagen con DB2, arranquemos el contenedor, ejecutemos los test de integración y destruyamos el
contenedor.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: MacBook Pro 15' (2.3 GHz Intel Core i7, 16GB DDR3 SDRAM)
  • Sistema Operativo: Mac OS X El Capitan 10.11
  • Software: Docker 1.9.1, Docker Machine 0.5.2

3. Plugins Maven Docker

En la actualidad existen varios plugin para integrar docker con nuestros proyectos java, entre ellos destacamos:

Entre estas alternativas nos hemos decantado por rhuss/docker-maven-plugin, básicamente porque dispone de una documentación más completa.

Gracias a este plugin podemos hacer uso de docker a traves de Maven con los siguientes goals:

Goal Description
Text
docker:start
Arranca un contenedor
Text
docker:stop
Para y destruye el contenedor
Text
docker:build
Construye la imagen
Text
docker:watch
Habilita la reconstrucción de imágenes y rearranque de contenedores en caso de cambios
Text
docker:push
Sube la imagen al repositorio
Text
docker:remove
Elimina la imagen
Text
docker:logs
Muestra los logs del contenedor

4. Configuración del plugin

En este apartado vamos a ver como configuramos el plugin:

<plugin>
	<groupId>org.jolokia</groupId>
	<artifactId>docker-maven-plugin</artifactId>
	<version>0.13.6</version>
	<configuration>
		<logDate>default</logDate>
		<autoPull>true</autoPull>
		<images>
			<image>
				<alias>db</alias>
				<name>jpacheco/db2-formacion</name>
				<build>
					<assembly>
						<dockerFileDir>demo</dockerFileDir>
					</assembly>
				</build>
				<run>
					<privileged>true</privileged>
					<ports>
						<port>50001:50000</port>
					</ports>
					<wait>
						<time>200</time>
					</wait>
					<log>
						<color>yellow</color>
						<prefix>DB PRUEBA DOCKER MAVEN</prefix>
					</log>
					<cmd>db2start</cmd>
				</run>
			</image>
		</images>
	</configuration>

En el apartado configuration indicamos:

  • logDate: que tome la configuración de fecha por defecto para los logs
  • autoPull: indicamos que si las imágenes base no están en nuestro repositorio local, intente hacer un docker pull ..

En el apartado images describimos las imágenes que podemos gestionar desde nuestro proyecto.
En nuestro ejemplo vamos a describir la imagen con DB2
dentro del tag image :

  • alias: Alias de la imagen (puede ser usada para vincularla a otra imagen)
  • name: Nombre de la imagen

En la sección build le indicamos la configuración necesaria para construir la imagen, la información que tomará cuando ejecutemos mvn docker:build

  • assembly / dockerFileDir :Directorio donde se encuentra el DockerFile y ficheros necesarios para construir la imagen

En la sección run le indicamos la configuración necesaria para arrancar un contenedor mvn docker:start

  • privileged :Directorio donde se encuentra el DockerFile y ficheros necesarios para construir la imagen
  • ports / port : Mapeo de puertos entre el contenedor y la máquina anfitriona
  • wait / time : Tiempo en ms de espera a que arranque el contenedor
  • log / color / prefix : Configuramos el color y el prefijo de los logs del plugin
  • cmd : Comando de arranque del contenedor

Una vez configurado podemos ejecutar alguno de los goals del plugin:

mvn docker:build

Con la que construimos la imagen.

mvn docker:start

Arranca el contenedor, como podemos comprobar con docker ps.

mvn docker:stop

Paramos y destruimos el contenedor, como podemos comprobar con docker ps -a.

5. Integración con Test de Integración

Una vez hemos configurado correctamente el plugin, vamos a engancharlo con nuestros test de integración, para ello vamos a partir de un proyecto Spring + MyBatis + Maven que esta disponible
aquí

No se trata de explicar el código del proyecto, basta decir que hemos usado el plugin de Maven Failsafe
para lanzar los test de integración usando la
configuración básica y cumpliendo con la convención de llamar a nuestros tests de integración
con el sufijo «IntegrationTest». (conviene indicar que asociaremos la fase de de test de integración a un ‘profile’ maven llamado integration)

Sólo nos falta enganchar el plugin de Docker en las fases pre-integration-test (construimos la imagen y arrancamos el contenedor)
y post-integration-test (paramos – borramos el contenedor y destruimos la imagen)

Para ello basta con añadir a la configuración del plugin lo siguiente:

	<executions>
	  <execution>
	    <id>start</id>
	    <phase>pre-integration-test</phase>
	    <goals>
	      <goal>build</goal>
	      <goal>start</goal>
	    </goals>
	  </execution>
	  <execution>
	    <id>stop</id>
	    <phase>post-integration-test</phase>
	    <goals>
	      <goal>stop</goal>
	      <goal>remove</goal>
	    </goals>
	  </execution>
	</executions>

como se puede observar en el código estamos vinculando los goals de build y start a la fase de pre-integration-test y los de stop y remove
a la fase post-integration-test

Una vez configurado todo podemos lanzar los test de integración, ejecutando

	mvn clean verify -P integration

Como podemos apreciar en la imagen se construye la imagen Built image 38786c137995, arranca el contenedor
Start container 5b7eb588ea26, se lanzan los test org.autentia.tutoriales.ProfesorMapperIntegrationTest y finalmente
paramos y destruimos el contenedor Stop and remove container 5b7eb588ea26 y eliminamos la imagen Remove

6. Conclusiones

Como hemos podido comprobar a través de esta serie de tutoriales, los ámbitos de aplicación de Docker parecen ilimitados,
en próximos tutoriales seguiremos descubriendo nuevas características y usos de Docker.

Un saludo.

7. Referencias

Comentarios

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos. Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación Somos expertos en Java/Java EE

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

02/03/2026

José Antonio Sánchez Segovia

Zephyr es un RTOS open source respaldado por la Linux Foundation que permite desarrollar dispositivos embebidos conectados, eficientes y escalables, facilitando el paso de prototipo a producto final con una arquitectura mantenible.

23/02/2026

Enrique Casado Díez

LoRa y LoRaWAN son tecnologías clave en el ecosistema IoT cuando se requiere largo alcance y bajo consumo energético. En este artículo analizamos su funcionamiento, Spreading Factor, link budget, arquitectura de red, frecuencias y clases de dispositivos, con un caso práctico real.

19/02/2026

Juan José Díaz Antuña

Copilot Chat es la forma más sencilla y segura de empezar a usar IA en Microsoft 365. En este artículo vemos cómo funciona, cómo activarlo y en qué se diferencia de Microsoft 365 Copilot, Copilot Studio y los Agentes Inteligentes, con ejemplos prácticos y una comparativa clara.