Detaillierte Schritte zum Verpacken und Hochladen von Spring Boot in ein Docker-Repository

Detaillierte Schritte zum Verpacken und Hochladen von Spring Boot in ein Docker-Repository

Wichtiger Hinweis: Bevor Sie diesen Artikel lesen, müssen Sie über einige Kenntnisse zu Docker-Containern verfügen und die üblichen Docker-Befehle verstehen und beherrschen. Wenn Sie bereits über Kenntnisse zu Docker-Containern verfügen, können wir loslegen!

Im Folgenden sind die allgemeinen Schritte zum Ausführen der im Titel beschriebenen Funktion aufgeführt:

Erstellen Sie ein Docker-Image-Repository

Ändern Sie die Spring Boot-Konfigurationsdatei, um die Docker-Repository-Konfiguration, das Paket und den Upload zum Docker-Image-Repository hinzuzufügen.

Ziehen Sie die hochgeladene Image-Datei aus Ihrem eigenen Docker-Image-Repository und führen Sie sie aus

Schritt 1: Erstellen Sie ein privates Docker-Image-Repository

Um ein Docker-Image-Repository zu erstellen, müssen wir uns auf das Docker-Registry-Tool verlassen. Docker-Registry ist ein offizielles Tool, mit dem ein privates Image-Repository erstellt werden kann. Dieser Artikel basiert auf der offiziellen Docker-Registry-Version v2.x: https://docs.docker.com/registry/

1. Ziehen Sie die Registrierungsabbilddatei

Docker-Pull-Registrierung

2. Starten Sie das Image

$ docker run -d \
    -p 5000:5000 \
    -v /opt/data/registry:/var/lib/registry \
    Registrierung

-d: Daemon-Thread starten
-p: Port-Mapping-Host-Port: Container-Port
-v: Das Datenvolumen ordnet das Adressverzeichnis im Container dem Host zu. /opt/data/registry ist der Speicherort, an dem das private Image-Warehouse im Host gespeichert ist.
Registrierung ist der Imagename

3. Fügen Sie die Datei daemon.json und die Lagerkonfiguration hinzu

vim /etc/docker/daemon.json

Fügen Sie die folgende Konfiguration hinzu:

{
  "Registrierungsspiegel": [
    „https://registry.docker-cn.com“
  ],
  "unsichere-Registrierungen": [
    "IhreIP:5000"
  ]
}

Fügen Sie die Knotenkonfiguration insecure-registries zur ursprünglichen Datei daemon.json hinzu, yourip: Geben Sie die IP-Adresse Ihrer virtuellen Maschine ein, speichern und beenden Sie, laden Sie die Konfigurationsdatei neu und starten Sie Docker neu

systemctl daemon-reload
systemctl Neustart Docker

4. Testen Sie das Hochladen des Images in Ihr eigenes Image-Repository. Wir taggen ein Image und laden es mit dem Befehl „docker tag“ in das Repository hoch: docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

Docker-Tag Ubuntu: neueste 127.0.0.1:5000/Ubuntu: neueste

(Das hier zum Test hochgeladene Bild muss nicht mit dem im Artikel identisch sein. Sie können ein Tomcat-Bild ziehen und es dann hochladen.) Zu diesem Zeitpunkt wird ein markiertes Bild generiert

Docker-Image ls
REPOSITORY TAG BILD ID ERSTELLT VIRTUELLE GRÖSSE
Ubuntu aktuell ba5877dc9bec vor 6 Wochen 192,7 MB
127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec vor 6 Wochen 192,7 MB

In privates Repository pushen

Docker Push 127.0.0.1:5000/ubuntu:neueste

Zeigen Sie das Image des privaten Warehouse an (tatsächlich können Sie beim Starten des Warehouse in das bereitgestellte Verzeichnis gehen. In diesem Artikel können Sie die hochgeladene Image-Datei im Verzeichnis /opt/data/registry des Hostcomputers anzeigen).

curl 127.0.0.1:5000/v2/_Katalog

Laden Sie das private Repository-Image herunter

Docker Pull 127.0.0.1:5000/Ubuntu: Neueste

Wenn beim Abrufen kein Problem auftritt, bedeutet dies, dass das Spiegel-Repository erstellt wurde.

Schritt 2 Ändern Sie die SpringBoot-Konfigurationsdatei, um die Docker-Repository-Konfiguration, das Paket und den Upload zum Docker-Image-Repository hinzuzufügen

Bevor Sie das SpringBoot-Projekt konfigurieren, müssen Sie den Docker-Container konfigurieren, um das JAR-Paket in das Warehouse hochzuladen.

Öffnen Sie die Docker-Remote-API und ändern Sie die Datei.

vim /lib/systemd/system/docker.service

Ursprünglicher ExecStart: ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Fügen Sie **-H tcp://0.0.0.0:2375** hinzu

Nach der Änderung: ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

(Wenn Sie Alibaba Cloud Server verwenden, denken Sie daran, Port 2375 in den Zugriffsregeln zu öffnen!)

Speichern und beenden, Konfiguration neu laden und Docker starten

systemctl daemon-reload 
systemctl Neustart Docker

Prüfen Sie, ob die Konfiguration erfolgreich war.

Docker -H 127.0.0.1 Info

Die folgende Ausgabe zeigt eine erfolgreiche Konfiguration an:

Kunde:
Debug-Modus: false

Server:
Behälter: 5
Läuft: 1
Pausiert: 0
Angehalten: 4
Bilder: 6
Serverversion: 19.03.3
Speichertreiber: overlay2
.......

Konfigurieren Sie das Springboot-Projekt und fügen Sie die Verpackungskonfiguration wie folgt zur POM-Datei hinzu

<Plugin>
    <groupId>com.spotify</groupId>
    <artifactId>Docker-Maven-Plugin</artifactId>
    <version>1.1.0</version>
    <Hinrichtungen>
        <Ausführung>
            <id>Bild erstellen</id>
            <phase>Paket</phase>
            <Ziele>
                <goal>bauen</goal>
            </Ziele>
        </Ausführung>
    </Ausführungen>
    <Konfiguration>
        <imageName>jenkins_test/${project.artifactId}:${project.version}</imageName>
        <dockerHost>http://IhreIP:2375</dockerHost>
        <baseImage>java:8</baseImage>
        <Einstiegspunkt>["java", "-jar","/${project.build.finalName}.jar"]
        </Einstiegspunkt>
        <Ressourcen>
            <Ressource>
                <Zielpfad>/</Zielpfad>
                <Verzeichnis>${project.build.directory}</Verzeichnis>
                <include>${project.build.finalName}.jar</include>
            </Ressource>
        </Ressourcen>
    </Konfiguration>
</plugin>
  • executions.execution.phase: Hier wird das Docker-Image erstellt, wenn Maven die Anwendung verpackt.
  • imageName: wird verwendet, um den Image-Namen anzugeben, jenkins_test ist der Warehouse-Name und {project.version} ist die Image-Versionsnummer;
  • dockerHost: die Docker-Serveradresse, auf die das Paket hochgeladen wird;
  • baseImage: das Basis-Image, von dem die Anwendung abhängt, hier ist es Java;
  • entryPoint: Der Befehl, der ausgeführt wird, wenn der Docker-Container gestartet wird;
  • resources.resource.targetPath: Kopieren Sie die gepackten Ressourcendateien in dieses Verzeichnis.
  • resources.resource.directory: das Verzeichnis, in dem sich die zu kopierenden Dateien befinden. Das von Maven gepackte Anwendungs-JAR-Paket wird im Zielverzeichnis gespeichert;
  • resources.resource.include: Dateien, die kopiert werden müssen, gepacktes Anwendungs-JAR-Paket.

Nachdem Sie den obigen Inhalt konfiguriert haben, können Sie ihn verpacken (normales Springboot-Maven-Verpacken oder Idea-Mavenproject-Installation).

Kehren Sie nach erfolgreichem Abschluss der Verpackung zum Docker-Container zurück, um das Image-Warehouse anzuzeigen

curl 127.0.0.1:5000/v2/_Katalog

Nachdem Sie die Existenz bestätigt haben, ziehen Sie das hochgeladene Bild herunter und überprüfen Sie die Bildliste, nachdem der Pull erfolgreich war

Docker-Bilder

Anzeige wie abgebildet:

Dies bedeutet, dass dieser Satz von Vorgängen erfolgreich ist. Das erste Verpacken kann langsam sein, da Docker das Java:8-Basisimage abrufen muss.

Beginnen wir mit diesem Bild.

docker run -p 8080:8080 Bild-ID

-p: Portzuordnung

Der Start ist erfolgreich, wie unten gezeigt:

Weil der in der Datei application.yml des Springboot-Projekts konfigurierte Serverport 8080 ist. Beim Start müssen Sie 8080:8080 zuordnen. Die erste 8080 ist der Port des Hostcomputers und die zweite 8080 ist der Port des Containers.

Bisher wurde alles umgesetzt, was in diesem Artikel implementiert werden muss. Lesen Sie weiter, um weitere Easter Eggs zu entdecken! ! ! !

Im Springboot-Projekt gibt es eine Protokollkonfiguration wie folgt

<?xml version="1.0" encoding="UTF-8"?>
<Konfiguration debug="false">
    <!--Definieren Sie die Speicheradresse der Protokolldatei. Verwenden Sie in der LogBack-Konfiguration keine relativen Pfade.-->
    <Eigenschaftsname="LOG_HOME" Wert="/home/logs" />
    <!-- Konsolenausgabe -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder Klasse="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--Formatierte Ausgabe: %d gibt das Datum an, %thread gibt den Thread-Namen an, %-5level: Level wird 5 Zeichen breit von links angezeigt %msg: Protokollnachricht, %n ist Zeilenumbruch -->
            <Muster>%d{jjjj-MM-tt HH:mm:ss.SSS} [%Thread] %-5Level %Logger{50} - %msg%n</Muster>
        </Encoder>
    </appender>
    <!-- Täglich Logdateien erstellen -->
    <appender name="DATEI" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy-Klasse="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--Name der Protokolldatei-Ausgabedatei-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--Aufbewahrungszeit der Protokolldatei in Tagen-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder Klasse="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--Formatierte Ausgabe: %d gibt das Datum an, %thread gibt den Thread-Namen an, %-5level: Level wird 5 Zeichen breit von links angezeigt %msg: Protokollnachricht, %n ist Zeilenumbruch -->
            <Muster>%d{jjjj-MM-tt HH:mm:ss.SSS} [%Thread] %-5Level %Logger{50} - %msg%n</Muster>
        </Encoder>
        <!--Maximale Protokolldateigröße-->
        <triggeringPolicy-Klasse="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10 MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- Protokollausgabeebene -->
    <root-Ebene="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="DATEI" />
    </Wurzel>
</Konfiguration>

Wir müssen auf die Speicheradresse der für diesen Knoten konfigurierten Protokolldatei achten

Wenn wir der traditionellen Bereitstellungsmethode für JAR-Pakete folgen, sollte sich die Protokolldatei im Verzeichnis /home/logs des Hostcomputers befinden. Jetzt stellen wir jedoch fest, dass es kein solches Verzeichnis gibt. Wo liegt also das Problem? Wo werden die Protokolldateien ausgegeben? ? Versuchen wir, den gestarteten Springboot-Container aufzurufen und interaktiv einen bereits laufenden Container aufzurufen

Docker exec -it Container-ID Bash 

Wir können sehen, dass sich darin ein Home-Verzeichnis befindet. Wenn wir die Verzeichnisse nacheinander aufrufen, werden wir feststellen, dass sich die Protokolldatei hier befindet!

Denken Sie darüber nach, haben wir den Datenvolumenbefehl nicht schon einmal verwendet? Können wir den Pfad im Container der virtuellen Maschine zuordnen? Probieren Sie es aus! Stoppen Sie den gestarteten Container (lassen Sie ihn uns direkt löschen)

Docker stoppt Container-ID
Docker RM Container-ID

Starten Sie den Container neu

docker run -d -p 8080:8080 -v /home/logs:/home/logs Bild-ID

Dieses Mal haben wir dem Befehl ein -d hinzugefügt, was bedeutet, dass der Daemon-Thread gestartet wird (im Hintergrund ausgeführt wird). Verwenden Sie den folgenden Befehl, um das gestartete Containerprotokoll anzuzeigen

Docker-Protokolle -f Container-ID 

Wie Sie sehen, ist der Start erfolgreich, daher ist es logisch, dass locback.xml unsere Protokolldatei im Verzeichnis /home/logs des von uns zugeordneten Hosts ausgibt. Werfen wir einen Blick darauf und geben eine Reihe von Befehlen ein. Sie können sehen, dass die Protokolldatei tatsächlich hier ist!

Dies ist das Ende dieses Artikels über die detaillierten Schritte zum Verpacken und Hochladen von Spring Boot in das Docker-Repository. Weitere verwandte Inhalte zum Verpacken und Hochladen von Spring Boot finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Eine kurze Analyse der SpringBoot-Verpackung und des Hochladens in Docker sowie der Implementierung der Bereitstellung mehrerer Instanzen (IDEA-Version)
  • Detaillierte Schritte für Springboot Docker Jenkins zum automatischen Bereitstellen und Hochladen von Bildern
  • Zusammenfassung der Spring Boot Docker-Verpackungstools
  • Implementierung der Springboot-Verpackung als Docker-Image und Deployment
  • Die einfachste Implementierung eines Docker-Images zum Verpacken von Spring Boot
  • Analyse des Docker-Image-Prozesses für die Verpackung von Springboot-Mikroservices

<<:  Einführung in die Rolle des HTML-Doctypes

>>:  Vue implementiert horizontales Scrollen von Text im Laufschriftstil

Artikel empfehlen

Wofür wird jQuery verwendet? jQuery ist eigentlich ein js-Framework

Einführung in jQuery Die jQuery-Bibliothek kann e...

Zusammenfassung der MySQL-Tabellen- und Spaltenkommentare

Genau wie bei Code können Sie den Tabellen und Sp...

HTML löst das Problem ungültiger Tabellenbreiteneinstellungen

Wenn Sie den Stil „table-layer:fixed“ für eine Ta...

Lösung für zu große Mysql-Binlog-Protokolldateien

Inhaltsverzeichnis 1. Verwandte Binlog-Konfigurat...

Beispiele für die Verwendung des Linux-Touch-Befehls

Detaillierte Erklärung des Linux-Touch-Befehls: 1...

So erstellen Sie DockerHub selbst

Der Docker Hub, den wir zuvor verwendet haben, wi...

Empfohlene Tipps für Web-Frontend-Ingenieure

Lassen Sie uns zunächst über den Wert von Web-Fro...

So übertragen Sie Dateien zwischen Docker-Container und lokalem Computer

Zum Übertragen von Dateien zwischen dem Host und ...

Confluence mit Docker bereitstellen

1. Umweltanforderungen 1. Docker 17 und höher wur...

Lösung für MySQL-Fehler beim Ändern des SQL-Modus

Inhaltsverzeichnis Ein Mord verursacht durch ERR ...

So verwalten Sie MySQL-Indizes und Datentabellen

Inhaltsverzeichnis Tabellenkonflikte finden und b...

So fragen Sie einen Datensatz in MySQL ab, auf welcher Seite der Paging-Seite

Vorwort In der Praxis kann es zu folgendem Proble...