GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie zeige ich ein Docker-Image auf mein .m2-Verzeichnis, um Maven in Docker auf einem Mac auszuführen?

Um den .m2-Ordner im Erstellungsschritt freizugeben, können Sie den localRepository-Wert in settings.xml überschreiben.

Hier ist das Dockerfile-Snippet, das ich verwendet habe, um mein lokales .m2-Repository in Docker freizugeben.

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

Wie zeige ich ein Docker-Image auf mein .m2-Verzeichnis, um Maven in Docker auf einem Mac auszuführen?

Sie verweisen lieber auf einen Container mit einem Host-Ordner (wie /Users/myname/.m2). Ordner (kein Bild)

Siehe „Ein Host-Verzeichnis als Datenvolume bereitstellen“:

Zusätzlich zum Erstellen eines Volumes mit -v Flag können Sie auch ein Verzeichnis vom Host Ihres Docker-Daemons in einen Container mounten .

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

Dieser Befehl hängt das Hostverzeichnis /Users/myname/.m2 ein , in den Container bei /root/.m2 .
Wenn der Pfad /root/.m2 existiert bereits im Image des Containers, der /Users/myname/.m2 Mount-Overlays, entfernt jedoch nicht den bereits vorhandenen Inhalt.
Sobald die Halterung entfernt wird, ist der Inhalt wieder zugänglich.
Dies stimmt mit dem erwarteten Verhalten des Befehls mount überein.


Hier sind die Dockerfiles und das Docker-Compose-Beispielprojekt, das einen Spring-Dienst und alle anderen Dienste enthält;

Spring-Service-Dockerfile

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"

Hier in Docker-Compose erstellen wir Volumes für unser lokales .m2-Repo und Container One.


Linux
  1. So erstellen Sie ein freigegebenes Verzeichnis für alle Benutzer in Linux

  2. So erstellen Sie ein Windows-Image für OpenStack

  3. So verwenden Sie ein Dockerfile zum Erstellen eines Docker-Images

  4. So führen Sie einen Befehl in einem laufenden Docker-Container aus

  5. So erstellen Sie ein benutzerdefiniertes Image aus einem Docker-Container

So führen Sie Canary-Bereitstellungen mit Istio durch

So ersetzen Sie Docker durch Podman auf einem Mac

So installieren Sie das AlmaLinux 8-Image im Docker-Container

So erstellen Sie ein Docker-Image aus einem laufenden Container

So verwenden Sie Docker:Bild speichern und zum Teilen exportieren

So installieren Sie Docker auf dem Mac