Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.2K
Views
Dockerize un proyecto multi maven (no multi-módulo)

En mi aplicación maven tengo múltiples proyectos:

  • Centro
  • Aplicación 1
  • Aplicación 2

La Application 1 y la Application 2 son dos proyectos que usan el core (por ejemplo, esas aplicaciones están diseñadas para dos clientes diferentes)

Para dockerizarlos todos, la forma más sencilla sería crear un proyecto de varios módulos, pero la desventaja es que tengo todo dentro de un solo proyecto (núcleo + Aplicación 1 + Aplicación 2).

Me gustaría tener el núcleo separado de ellos.

El principal problema con esta configuración es que el proyecto core debe construirse antes que los otros dos, y la App 1 y la App 2 usan esto como una dependencia experta:

App 1

 <dependency> <groupId>it.myorg</groupId> <artifactId>core-project</artifactId> <version>1.12.0-SNAPSHOT</version> </dependency>

Si trato de dockerizar la App 1 , falla cuando la empaqueto, porque dentro del contenedor docker core-project 1.12.0-SNAPSHOT no existe.

Estaba pensando en configurar un "repositorio experto local", presionando el núcleo allí y la App 1 "tirará" del contenedor del repositorio y no de la carpeta .m2 , pero no me gusta esta solución.

Puedo proporcionar más información, lo siento si no doy ejemplos, pero mi papel es blanco en este momento :(

Estructura de carpetas

 +- Core --- pom.xml --- src +- Application1 --- pom.xml --- src

La solución que estoy tratando de hacer ahora es crear un Dockerfile para el proyecto principal (DESDE maven: más reciente), construir la imagen con una etiqueta y en Dockerfile de App1 usar esta imagen (es decir, crear una compilación de varias etapas pero en dos momentos separados) ).

lo mejor seria

 FROM maven:latest as core-builder ## build the core FROM maven:latest ## Copy jar from builder

Debido a que el proyecto está en una carpeta separada, no puedo construir el núcleo de esta manera. Necesito compilar del core ANTES (ejecutando docker build -t) y luego copiar de ellos.

ACTUALIZAR

Después de la respuesta correcta de @mihai, pregunto si es posible una estructura como esta:

 -- myapp-docker - Dockerfile - docker-compose.yml -- core-app -- application_1

Tener Dockerfile al mismo nivel de core-app y application_1 está totalmente bien y funciona al 100%. El único "problema" es que debería poner todos los proyectos en el mismo repositorio.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Esta es la solución propuesta con construcciones de varias etapas.

Para replicar su configuración, creé esta estructura:

 . ├── Dockerfile-app1 ├── application1 │ ├── pom.xml │ └── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── core │ ├── pom.xml │ └── src │ ├── main │ │ └── java │ │ └── com │ │ └── test │ │ └── App.java │ └── test │ └── java │ └── com │ └── test │ └── AppTest.java

En el archivo pom.xml de la Aplicación 1, agregué la dependencia al core :

 <dependency> <groupId>com.test</groupId> <artifactId>core</artifactId> <version>1.0-SNAPSHOT</version> </dependency>

Llamé al Dockerfile Dockerfile-app1 , de esta manera puedes tener más de 1 de ellos.

Este es el Dockerfile-app1:

 FROM maven:3.6.0-jdk-8 as build WORKDIR /apps COPY ./core . RUN mvn clean install FROM maven:3.6.0-jdk-8 # If you comment this out then the build fails because it cannot find the dependency to 'core' COPY --from=build /root/.m2 /root/.m2 COPY ./application1 ./ RUN mvn clean install

Probablemente debería agregar un punto de entrada al final para ejecutar su proyecto o, mejor aún, agregar otra tercera etapa que solo copie los artefactos generados y ejecute su proyecto (de esta manera, la imagen final no tendrá su origen).

La primera etapa solo construye el submódulo core .

La segunda etapa usó los resultados de la primera etapa, copia solo el código fuente de application1 y lo construye.

Puede replicar esto fácilmente para application2 creando un archivo similar Dockerfile-app2 .

over 4 years ago · Santiago Trujillo Report

0

Ya que está usando maven, intente dockerfile-maven para construir la imagen. No desea ninguna información de compilación dentro de su imagen (como cuáles son las dependencias), solo debe agregar el contenedor al final. Por lo general, lo uso junto con spring-boot-maven-plugin y repackage para obtener un contenedor completamente autónomo.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!