So verpacken Sie das Docker-Image, übertragen es auf den Remote-Server und stellen es auf k8s bereit

So verpacken Sie das Docker-Image, übertragen es auf den Remote-Server und stellen es auf k8s bereit

Voraussetzungen:

1. Auf dem Docker-Server wurde der Fernzugriff aktiviert. Weitere Informationen finden Sie unter „Remote-Docker-Server mit Zertifikatverbindung“.

2. Der K8S-Cluster wurde auf dem Server erstellt. Dieser Artikel verwendet zum Testen einen K8S-Single-Point-Cluster.

Im vorherigen Artikel haben wir getestet, dass der Remote-Docker-Server normal über das Idea-Docker-Plugin aufgerufen werden kann. Obwohl dieses Docker-Plugin auch zum Verpacken und Pushen von Docker-Images verwendet werden kann, wird in diesem Artikel eine andere Möglichkeit verwendet, nämlich das Docker-Maven-Plugin-Plugin von Maven zum Verpacken und Pushen von Docker-Images auf den Remote-Docker-Server zu verwenden.

1. Docker-Datei

Die Dockerfile-Datei wird verwendet, um unsere Anwendung in ein Docker-Image umzuwandeln

# Geben Sie die JDK-Umgebungsversion an und erstellen Sie ein Image basierend auf Java8 FROM java:8
# Mounten Sie das temporäre Verzeichnis VOLUME /tmp
# Fügen Sie dem Container das angegebene JAR-Paket hinzu [Dies ist der vollständige Name des durch die Projektverpackung generierten JAR-Pakets]
Füge practice-job-0.0.1-SNAPSHOT.jar /practice-job.jar hinzu
# Die vom Container freigegebene Portnummer (bezieht sich auf die vom Projekt belegte Portnummer)
EXPOSE 8081
# Befehle, die ausgeführt werden, nachdem der Container gestartet wurde ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/practice-job.jar" ]

2. POM-Konfiguration

Die entsprechende Konfiguration der POM-Datei lautet wie folgt. Achten Sie darauf, die IP-Adresse des Remote-Servers einzugeben und den Pfad der obigen Docker-Datei sowie den Pfad der PEM-Zertifikatdatei anzugeben, die für den Zugriff auf den Remote-Docker erforderlich ist.

    <Bauen>
        <Plugins>
            <Plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>Spring-Boot-Maven-Plugin</artifactId>
            </plugin>
 
            <!--Verwenden Sie das Plugin „docker-maven-plugin“, um den Dienst in ein Image zu packen und es an den Docker-Server zu senden-->
            <Plugin>
                <groupId>com.spotify</groupId>
                <artifactId>Docker-Maven-Plugin</artifactId>
                <version>1.2.2</version>
                <!--Binden Sie das Plugin zur Ausführung an eine bestimmte Phase-->
                <Hinrichtungen>
                    <Ausführung>
                        <id>Bild erstellen</id>
                        <!--Binden Sie das Plug-In an die Paketphase. Das heißt, Benutzer müssen nur das MVN-Paket ausführen, woraufhin automatisch MVN Docker:Build --> ausgeführt wird.
                        <phase>Paket</phase>
                        <Ziele>
                            <goal>bauen</goal>
                        </Ziele>
                    </Ausführung>
                </Ausführungen>
                <Konfiguration>
                    <forceTags>wahr</forceTags>
                    <!--Geben Sie den Namen des generierten Bildes an. Ändern Sie dies in den Namen des Bildes, das Sie generieren möchten. -->
                    <imageName>Praxisjob</imageName>
                    <!--Tags angeben-->
                    <BildTags>
                        <imageTag>neueste</imageTag>
                    </imageTags>
                    <!-- Geben Sie den Dockerfile-Pfad an -->
                    <dockerDirectory>${project.basedir}</dockerDirectory>
                    <!--Geben Sie die Remote-Docker-Adresse an-->
                    <dockerHost>https://öffentliches Netzwerk IP:2376</dockerHost>
                    <!--Geben Sie die Adresse des PEM-Zertifikatdateipfads an-->
                    <dockerCertPath>${project.basedir}/src/main/resources/pem</dockerCertPath>
                    <!-- Hier ist die Konfiguration zum Kopieren des JAR-Pakets in das angegebene Verzeichnis des Docker-Containers-->
                    <Ressourcen>
                        <Ressource>
                            <Zielpfad>/</Zielpfad>
                            <!--Der Pfad, in dem sich das JAR-Paket befindet, entspricht dem Zielverzeichnis -->
                            <Verzeichnis>${project.build.directory}</Verzeichnis>
                            <!-- Das einzubindende JAR-Paket, das dem im Dockerfile hinzugefügten Dateinamen entspricht-->
                            <include>${project.build.finalName}.jar</include>
                        </Ressource>
                    </Ressourcen>
                </Konfiguration>
            </plugin>
        </plugins>
    </bauen>

3. Bild-Push

Nachdem die oben genannten Vorbereitungen abgeschlossen sind, führen Sie den Installationsbefehl aus. Nach einer Weile wird in der folgenden Konsole BUILD SUCCESS angezeigt, was darauf hinweist, dass das Image-Push erfolgreich war.

Gehen Sie dann zur Überprüfung zum Remote-Server und geben Sie den Befehl „Docker-Images“ ein, um das Container-Image anzuzeigen.

Sie können sehen, dass unser Anwendungsimage erfolgreich übertragen wurde. Der nächste Schritt ist die Bereitstellungsphase.

4. K8s-Bereitstellung

Wenn unsere Bereitstellungsumgebung in der Vergangenheit nur einen Docker-Container hatte, müssen wir hier nur unser Anwendungsimage per Docker ausführen, das Projekt im Docker-Container bereitstellen und darauf zugreifen. Aber jetzt ist unsere Bereitstellungsumgebung k8s+Docker, sodass wir unser Anwendungsimage für die Bereitstellung nicht direkt ausführen können. Fahren wir mit der Bereitstellung in k8s fort.

Zuerst müssen Sie zwei YAML-Dateien erstellen: practice-job-deployment.yaml und practice-job-service.yaml. Die Funktionen dieser beiden Dateien beinhalten das Konzept von k8s. Das Konzept von k8s wird in nachfolgenden Artikeln erläutert. Hier müssen Sie nur wissen, dass die meisten Konfigurationen in k8s basierend auf YAML-Dateien definiert sind.

vi Praxis-Job-Bereitstellung.yaml

API-Version: v1
Art: Namespace
Metadaten:
  Name: Praxis
---
API-Version: Apps/v1
Art: Bereitstellung
Metadaten:
  Name: Praxis-Job-Einsatz
  Namespace: Praxis
Spezifikation:
  Replikate: 1
  Wähler:
    Übereinstimmungsetiketten:
      App: Praxis-Job-Pod
  Vorlage:
    Metadaten:
      Beschriftungen:
        App: Praxis-Job-Pod
    Spezifikation:
      hostNetwork: wahr
      Behälter:
        - Name: Praxis-Job-Container
          image: practice-job:latest #Bildname + VersionimagePullPolicy: Nie #Gibt die Bildquelle an. Wenn NotPresent lokal nicht verfügbar ist, wird es aus dem Hub-Warehouse gezogen. Nie bedeutet nur von lokalen Ports:
            - ContainerPort: 8081
          Umgebung:
            # Geben Sie den Pfad zur Protokolldatei an – Name: logging.path
              Wert: /var/logs

vi Praxis-Job-Service.yaml

API-Version: v1
Art: Dienstleistung
Metadaten:
  Name: Praxis-Job-Service
  Namespace: Praxis
  Beschriftungen:
    App: Praxis-Job-Service
Spezifikation:
  Typ: NodePort
  Wähler:
    App: Praxis-Job-Pod
  Häfen:
    - Name: http
      Protokoll: TCP
      Port: 8081 #Dienstport (intern) Zielport: 8081 #Pod-Port Knotenport: 32001 #Dienstport (extern)

Führen Sie dann die Befehle einzeln aus:

kubectl apply -f practice-job-deployment.yaml
kubectl apply -f practice-job-service.yaml 

Führen Sie den Befehl aus: kubectl get pod --all-namespaces. Überprüfen Sie den Pod und Sie können sehen, dass der Pod unseres Projekts erfolgreich ausgeführt wurde.

Führen Sie den Befehl kubectl logs practice-job-deployment-77d685767-glvgm -n practice aus, um die Ausführungsprotokolle der Anwendung anzuzeigen. Das Format ist: kubectl logs <Pod-Name> -n <Pod-Namespace>.

Führen Sie den Befehl aus: docker ps Sie können sehen, dass das Projekt bereits im Container ausgeführt wird

Führen Sie den Befehl aus: kubectl get service --all-namespaces. Sie können sehen, dass der der Anwendung entsprechende Dienst erfolgreich gestartet wurde und der freigegebene Port 32001 ist. Dies ist der Port, den wir zuvor in der YAML-Datei konfiguriert haben.

Schließlich greift der Browser auf „öffentliches Netzwerk ip:32001/doc.html“ zu. Dieser Pfad ist nur für mein Projekt, verschiedene Projekte haben verschiedene Pfade. Beachten Sie, dass die Firewall die entsprechenden Ports öffnen muss.

An diesem Punkt wird die Anwendung aus dem lokalen Docker-Image gepackt, auf den Server übertragen und dann im k8s+Docker-Container bereitgestellt.

Dies ist das Ende dieses Artikels über die Schritte zum Verpacken des Docker-Images, zum Übertragen auf den Remote-Server und zum Bereitstellen auf K8s. Weitere relevante Informationen zum Verpacken und Bereitstellen von Docker-Images auf K8s finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So verwenden Sie Docker zum Bereitstellen von Spring Boot und zum Herstellen einer Verbindung mit Skywalking
  • So stellen Sie K8s in Docker bereit
  • Implementierung der K8S-Bereitstellung eines Docker-Containers
  • Docker-Lernhinweise zur K8S-Bereitstellungsmethode
  • Skywalking: Containerisierte Bereitstellung von Docker-Images zum Erstellen von K8s vom Test bis zur Verfügbarkeit

<<:  Lösung zur inkonsistenten Anzeige der Cursorgröße im Eingabefeld

>>:  So fügen Sie Wettervorhersagen in Ihre Website ein

Artikel empfehlen

Ausführliche Erklärung zu MySQL vom Einstieg bis zum Aufgeben - Installation

Was Sie lernen werden 1. Softwareinstallation und...

Grafisches Tutorial zur Installation und Konfiguration der MySQL-Version 5.7.15

Dieser Artikel enthält ein ausführliches Tutorial...

Leitfaden zur effizienten Nutzung von MySQL-Indizes

Vorwort Ich glaube, die meisten Leute haben MySQL...

17 JavaScript-Einzeiler

Inhaltsverzeichnis 1. DOM & BOM bezogen 1. Üb...

Einführung in geplante Aufgaben im Linux-System

Inhaltsverzeichnis 1. Planaufgaben anpassen 2. Ze...

Prozessdiagramm für das erste Bereitstellungs-Webprojekt von Tomcat

Legen Sie Ihr eigenes Webprojekt im Verzeichnis w...

Vue implementiert eine kleine Notizblockfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Lösung für das Problem des Sitzungsverlusts bei Nginx

Bei der Verwendung von Nginx als Reverse-Proxy fü...

Einführung in die Funktionen und Verwendung von Wert- und Namensattributen in HTML

1. Der in der Schaltfläche verwendete Wert bezieht...

Was ist nach der Installation von Ubuntu 20.04 zu tun (Anleitung für Anfänger)

Ubuntu 20.04 wurde veröffentlicht und bringt viel...