Per condividere la cartella .m2 nella fase di creazione, puoi sovrascrivere il valore localRepository in settings.xml.
Ecco lo snippet Dockerfile che ho usato per condividere il mio repository .m2 locale nella finestra mobile.
FROM maven:3.5-jdk-8 as BUILD
RUN echo \
"<settings xmlns='http://maven.apache.org/SETTINGS/1.0.0\' \
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \
xsi:schemaLocation='http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd'> \
<localRepository>/root/Users/myname/.m2/repository</localRepository> \
<interactiveMode>true</interactiveMode> \
<usePluginRegistry>false</usePluginRegistry> \
<offline>false</offline> \
</settings>" \
> /usr/share/maven/conf/settings.xml;
COPY . /usr/src/app
RUN mvn --batch-mode -f /usr/src/app/pom.xml clean package
FROM openjdk:8-jre
EXPOSE 8080 5005
COPY --from=BUILD /usr/src/app/target /opt/target
WORKDIR /opt/target
ENV _JAVA_OPTIONS '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005'
ENV swarm.http.port 8080
CMD ["java", "-jar", "app-swarm.jar"]
Come faccio a indirizzare un'immagine docker alla mia directory .m2 per eseguire Maven nella finestra mobile su un Mac?
Preferisci indirizzare una cartella host (come /Users/myname/.m2) a un contenitore cartella (non un'immagine)
Vedere "Monta una directory host come volume di dati":
Oltre a creare un volume utilizzando il file
-v
puoi anche montare una directory dall'host del tuo demone Docker in un contenitore .
$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py
Questo comando monta la directory host,
/Users/myname/.m2
, nel contenitore in/root/.m2
.
Se il percorso/root/.m2
esiste già all'interno dell'immagine del contenitore, il/Users/myname/.m2
monta le sovrapposizioni ma non rimuove il contenuto preesistente.
Una volta rimosso il supporto, il contenuto è nuovamente accessibile.
Ciò è coerente con il comportamento previsto del comando mount.
Ecco i Dockerfiles e docker-compose per esempio il progetto contenente un servizio Spring e qualsiasi altro servizio;
File docker del servizio Spring
FROM maven:3.5-jdk-8-alpine
WORKDIR /app
COPY . src
CMD cd src ; mvn spring-boot:run
docker-compose.yml
version: '3'
services:
account-service:
build:
context: ./
dockerfile: Dockerfile
ports:
- "8080:8080"
volumes:
- "${HOME}/.m2:/root/.m2"
Qui in docker-compose creiamo volumi per il nostro repository .m2 locale e uno per container.