GNU/Linux >> Tutoriels Linux >  >> Linux

Comment pointer une image docker vers mon répertoire .m2 pour exécuter maven in docker sur un mac ?

Pour partager le dossier .m2 à l'étape de construction, vous pouvez écraser la valeur localRepository dans settings.xml.

Voici l'extrait Dockerfile que j'ai utilisé pour partager mon référentiel .m2 local dans Docker.

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"]

Comment faire pointer une image docker vers mon répertoire .m2 pour exécuter maven dans docker sur un mac ?

Vous faites plutôt pointer un dossier hôte (comme /Users/myname/.m2) vers un conteneur dossier (pas une image)

Voir "Monter un répertoire hôte en tant que volume de données":

En plus de créer un volume en utilisant le -v flag vous pouvez également monter un répertoire depuis l'hôte de votre démon Docker dans un conteneur .

$ docker run -d -P --name web -v /Users/myname/.m2:/root/.m2 training/webapp python app.py

Cette commande monte le répertoire hôte, /Users/myname/.m2 , dans le conteneur à /root/.m2 .
Si le chemin /root/.m2 existe déjà dans l'image du conteneur, le /Users/myname/.m2 monte les superpositions mais ne supprime pas le contenu préexistant.
Une fois le montage retiré, le contenu est à nouveau accessible.
Ceci est cohérent avec le comportement attendu de la commande mount.


Voici les projets Dockerfiles et docker-compose par exemple contenant un service Spring et tout autre service ;

Dockerfile du service 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"

Ici, dans docker-compose, nous créons des volumes pour notre dépôt .m2 local et celui du conteneur.


Linux
  1. Comment créer un répertoire partagé pour tous les utilisateurs sous Linux

  2. Comment créer une image personnalisée à partir d'un conteneur Docker

  3. Golang Mac OSX construit pour la machine Docker

  4. Comment chown répertoire pour plusieurs utilisateurs?

  5. Quel système d'exploitation s'exécute dans mon conteneur Docker ?

Comment effectuer des déploiements Canary avec Istio

Comment remplacer Docker par Podman sur un Mac

Comment installer l'image AlmaLinux 8 dans le conteneur Docker

Comment créer une image Docker à partir d'un conteneur en cours d'exécution

Comment utiliser Docker Enregistrer l'image et l'exporter pour le partage

Comment installer Docker sur Mac