GNU/Linux >> Linux Esercitazione >  >> Linux

Come faccio a puntare un'immagine docker alla mia directory .m2 per eseguire Maven nella finestra mobile su un Mac?

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.


Linux
  1. Come creare una directory condivisa per tutti gli utenti in Linux

  2. Come utilizzare un Dockerfile per creare un'immagine Docker

  3. Come eseguire il commit delle modifiche a un'immagine Docker

  4. Come creare un'immagine personalizzata da un contenitore Docker

  5. Build Golang Mac OSX per macchina Docker

Come eseguire distribuzioni Canary con Istio

Come sostituire Docker con Podman su un Mac

Come installare AlmaLinux 8 Image in Docker Container

Come creare un'immagine Docker da un contenitore in esecuzione

Come utilizzare Docker Salva immagine ed esporta per la condivisione

Come installare Docker su Mac