GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So führen Sie Jenkins in Docker mit Docker Compose with Volumes aus

Möchten Sie Jenkins in Docker ausführen, sind sich aber nicht sicher, ob Sie Volumes verwenden oder die Daten containerisiert halten sollen? Wenn Jenkins containerisiert ist, wie sichern Sie die Daten? Müssen Sie den gesamten Container sichern? Können Informationen außerhalb des Containers bestehen bleiben und wie? Durch die Verwendung von Docker Compose mit Volumes können Sie sicherstellen, dass Ihre Jenkins-Daten sicher sind, selbst wenn der Docker-Container kaputt geht.

Abgesehen von der Datensicherung können Sie mit Docker-Volumes auch Jenkins-Daten zwischen mehreren Containern teilen.

Lesen Sie weiter, denn in diesem Artikel erfahren Sie, wie Sie Jenkins mit Docker und Docker Compose ausführen. Sie erfahren, wie Sie die Jenkins-Daten innerhalb und außerhalb des Docker-Containers finden und möglicherweise sichern.

Anforderungen

Es wird viele Lernbeispiele in diesem Artikel geben. Wenn Sie mitmachen möchten, benötigen Sie:

  • Ein Computer mit Docker und Docker Compose Eingerichtet. Die Demos in diesem Artikel wurden in Ubuntu Server 20.04 erstellt . Sie können Docker unter Windows oder macOS verwenden, wenn Sie dies bevorzugen.

Dieser Artikel behandelt nicht die Installation und Einrichtung von Docker und Docker Compose. Weitere Informationen finden Sie in der offiziellen Docker-Dokumentation. Der ATA-Blog enthält auch viele Artikel zu Docker die Sie vielleicht auch lesen möchten.

Jenkins in Docker ausführen

Um eine Jenkins-Instanz in Docker auszuführen, müssen Sie zuerst das Image aus einem Repository abrufen. In diesem Beispiel wird das Jenkins-Image aus Docker Hub abgerufen . Sie haben die Möglichkeit, das Image zuerst herunterzuladen, bevor Sie einen Container erstellen. Oder Sie können auch einen Container ausführen und Docker das Image on-the-fly herunterladen lassen.

Der folgende Befehl führt einen Jenkins-Container mit docker run aus Befehl. Der --name [NAME] Option vergeben Sie einen Namen für den Docker-Container. Wenn der Containername nicht angegeben ist, weist Docker dem Container einen zufälligen Namen zu.

Der -p [host-port:container-port] Option bedeutet, den Port oder die Ports innerhalb des Containers für Ihren Host-Computer verfügbar zu machen. Im folgenden Code werden die Ports 8080 und 50000 dem Docker-Host mit denselben Portnummern offengelegt.

Zum Schluss jenkins/jenkins:lts bedeutet, dass der auszuführende Container jenkins:lts verwendet Docker-Image aus dem Jenkins-Repository . Sie können die Werte name ändern und Host-Port Zahlen, falls erforderlich, aber ändern Sie nicht den Container Portnummern.

Bitte kopieren Sie den folgenden Code und führen Sie ihn in Ihrem Terminal aus.

docker run --name my-jenkins-1 -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts

Nachdem Sie den obigen Befehl ausgeführt haben, beginnt Docker mit der Erstellung eines neuen Containers. Sobald der Jenkins-Container ausgeführt wird, notieren Sie sich das anfängliche Administratorkennwort, das auf dem Terminal angezeigt wird. Das Admin-Passwort wird während der Ersteinrichtung von Jenkins benötigt.

Abschließen der Jenkins-Ersteinrichtung

Nachdem der Jenkins-Container in den Ausführungsstatus gewechselt ist, können Sie jetzt auf die Jenkins-Administrationsseite zugreifen. Wenn Sie sich an den Befehl erinnern, den Sie zum Erstellen des Containers verwendet haben, lautet die Portnummer 8080. Um also auf die Jenkins-Instanz zuzugreifen, navigieren Sie zu HTTP://localhost:8080 .

Wie Sie unten sehen können, ist die Unlock Jenkins Seite erfordert, dass Sie das anfängliche Admin-Passwort eingeben. Sie sollten zuvor das anfängliche Admin-Passwort kopiert haben. Geben Sie das Passwort unter Administratorpasswort ein ein und klicken Sie auf Weiter .

Klicken Sie auf Jenkins anpassen Seite haben Sie die Möglichkeit, vorgeschlagene Plugins zu installieren . Diese vorgeschlagenen Plugins sind die Plugins, die die Jenkins-Community normalerweise installiert. Wenn Sie einen vorausgewählten Satz von Plug-ins installieren möchten, wählen Sie Zu installierende Plug-ins auswählen aus Option.

Der Einfachheit halber die Vorgeschlagene Plugins installieren ist die ausgewählte Option für dieses Beispiel.

Die Plugins werden installiert und Sie können nur warten, bis die Installation abgeschlossen ist. Wie Sie unten sehen können, werden vierzehn (14) vorgeschlagene Plugins installiert. Die Anzahl der empfohlenen Plugins kann im Laufe der Zeit zunehmen oder abnehmen. Wenn Sie Ihre Jenkins-Instanz installiert haben, sind die vorgeschlagenen Plug-ins möglicherweise bereits anders.

Unmittelbar nach Abschluss der Installation des Plugins sehen Sie den ersten Admin-Benutzer erstellen Seite. Auf dieser Seite erstellen Sie das erste Jenkins-Administratorkonto. Füllen Sie alle Felder nach Bedarf aus und klicken Sie auf Speichern und fortfahren. Denken Sie daran, sich die Administrator-Anmeldeinformationen zu merken, die Sie gerade erstellt haben.

Auf der Instanzkonfiguration Seite können Sie die URL der Jenkins-Admin-Seite ändern. Der URL-Wert wäre normalerweise die tatsächliche URL, auf die die Jenkins-Benutzer zugreifen. Belassen Sie für dieses Beispiel den Standardwert von http://localhost:8080 und klicken Sie auf Speichern und Fertig stellen .

Auf der letzten Setup-Seite sehen Sie die Bestätigung, dass das Jenkins-Setup abgeschlossen ist. Klicken Sie auf Jenkins verwenden .

Wenn Sie Willkommen bei Jenkins sehen Seite, wie unten gezeigt, dann haben Sie die Jenkins-Installation abgeschlossen. An dieser Stelle können Sie damit beginnen, Jenkins zu konfigurieren und neue Elemente oder Projekte zu erstellen.

Suchen der Jenkins-Daten im Container

Im vorherigen Abschnitt haben Sie einen Docker-Container erstellt, um eine Instanz von Jenkins auszuführen. Docker-Container können, genau wie alles andere auf einem Computer, kaputt gehen. Wenn der Container aus irgendeinem Grund nicht mehr verfügbar ist, sind auch die Jenkins-Daten weg.

Um die Jenkins-Datenplatzierung besser zu verstehen, verwendet der folgende Code die docker exec Befehl um den Inhalt von /var/jenkins_home aufzulisten . Der Name des Docker-Containers in diesem Beispiel lautet my-jenkins-1.

docker exec my-jenkins-1 ls -l /var/jenkins_home

Unten sehen Sie das Ergebnis der Ausführung des obigen Befehls. Der Inhalt von /var/jenkins_home Verzeichnis aufgelistet. Die /var/jenkins_home Verzeichnis enthält die Einstellungen, Benutzer, Plugins und andere wichtige Elemente.

Sichern der Jenkins-Daten vom Container zum Host

An diesem Punkt haben Sie bestätigt, dass sich die Jenkins-Daten im Container befinden. Sie sollten die Jenkins-Daten aus dem Container auf den Host kopieren. Und sobald die Jenkins-Daten aus dem Container sind, können Sie ein Backup erstellen.

Es ist eine gute Sache, dass Docker über eine integrierte Unterstützung für das Kopieren von Dateien zwischen dem Docker-Container und dem Docker-Host verfügt. Verwenden Sie den Befehl docker cp <container id>:/path/in/container /path/in/host

Das folgende Beispiel verwendet den docker cp Befehl zum Kopieren der Daten des Containers my-jenkins-1 an einen Docker-Hostspeicherort. Beachten Sie, dass der Container nicht einmal ausgeführt werden muss, um diesen Befehl erfolgreich auszuführen.

docker cp my-jenkins-1:/var/jenkins_home ~/jenkins_backup

Die folgende Demo zeigt den obigen Befehl in Aktion. Wie Sie sehen können, wird das Zielverzeichnis automatisch durch den Befehl erstellt.

Nachdem Sie nun die Jenkins-Daten aus dem Container extrahiert haben, können Sie vielleicht den gesamten Ordner komprimieren und archivieren. Möglicherweise müssen Sie dieselbe Aufgabe jedes Mal ausführen, wenn Sie Änderungen an Jenkins vornehmen.

Jenkins in Docker mit Volume Mount ausführen

Um Ihre Jenkins-Daten außerhalb des Docker-Containers persistent und konsistent zu machen, sollten Sie ein Docker-Volume verwenden .

Wie im vorherigen Abschnitt erläutert, befinden sich die Jenkins-Konfigurationsdateien im Docker-Container unter /var/jenkins_home . Um sicherzustellen, dass die Jenkins-Dateien außerhalb des Containers gespeichert werden, können Sie den -v verwenden Option mit docker run Befehl.

Der folgende Code erstellt einen neuen Docker-Container mit dem Namen my-jenkins-2 . Die Ports 8080 und 50000 werden dem Host offengelegt. Zusätzlich ist die Datei /var/jenkins_home Verzeichnis innerhalb des Docker-Containers wird als Volume auf dem Host als jenkins_home. gemountet

docker run --name my-jenkins-2 -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts

Nach dem Ausführen des obigen Befehls sollte der neue Docker-Container erstellt werden und in den Ausführungsstatus wechseln. Sie können mit dem Befehl docker ps bestätigen, dass der Container ausgeführt wird.

Alle laufenden Container auflisten

Suchen der Jenkins-Daten auf dem Docker-Host

Also, wo ist jetzt der Jenkins-Datenordner? Basierend auf dem Befehl, den Sie zum Erstellen des my-jenkins-2-Containers verwendet haben, ist das bereitgestellte Volume jenkins_home . Um zu wissen, wo sich im Dateisystem jenkins_home befindet Standort gefunden werden kann, verwenden Sie das docker volume Befehl.

Der folgende Befehl zeigt die Details von jenkins_home an Volume auf dem Docker-Host.

docker volume inspect jenkins_home

Der folgende Screenshot zeigt die Informationen über jenkins_home Lautstärke als Ergebnis der Ausführung des obigen Befehls.

Nachdem Sie nun wissen, wo Sie die Jenkins-Daten finden, können Sie dies bestätigen, indem Sie den Ort des Bereitstellungspunkts durchsuchen. In diesem Beispiel die Datei jenkins_home Volume-Einhängepunkt befindet sich in /var/lib/docker/volumes/jenkins_home/_data .

Da die Jenkins-Daten nun außerhalb des Containers bestehen bleiben, können Sie das Verzeichnis zur sicheren Aufbewahrung sichern. Auch wenn der Jenkins-Container gelöscht wird, verbleiben die Daten auf dem Docker-Host.

Jenkins mit Docker Compose with Volumes ausführen

Eine andere Möglichkeit, Jenkins auszuführen, ist die Verwendung von docker-compose Befehl. Mit Docker Compose , können Sie bei Bedarf eine oder mehrere Instanzen von Jenkins bereitstellen. Aber vorher müssen Sie eine Docker Compose-Datei erstellen für jede Instanz.

Erstellen der Docker-Compose-Dateien

Standardmäßig ist die Datei docker-compose liest die Datei mit dem Namen docker-compose.yml oder docker-compose.yaml im selben Arbeitsverzeichnis, in dem Sie den Befehl absetzen.

Öffnen Sie mit einem verfügbaren Texteditor Ihrer Wahl eine neue leere Datei. Kopieren Sie dann den unten stehenden YAML-Code, fügen Sie ihn in Ihren Editor ein und speichern Sie dann docker-compose.yml Datei.

# docker-compose.yml
version: '3.7'
services:
  jenkins:
    image: jenkins/jenkins:lts
    privileged: true
    user: root
    ports:
      - 8083:8080
      - 50003:50000
    container_name: my-jenkins-3
    volumes:
      - ~/jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

Dieser Artikel behandelt nicht die Anatomie einer Docker Compose-Datei. Sie können die offizielle Referenzdokumentation zum Erstellen von Dateien konsultieren um besser zu verstehen, was jede Einstellung in der Compose-Datei bedeutet.

Aber in diesem Beispiel können Sie die wichtigsten Einstellungen in beiden Docker Compose-Dateien wie unten aufgeführt aufschlüsseln.

  • Bild :Dies ist das Basis-Image, das zum Erstellen der Docker-Container-Instanz verwendet werden soll.
  • Anschlüsse :Hier wird die Portzuordnung zwischen dem Docker-Host und dem Container definiert.
  • Volumen :Dies sind die Volumes, die zwischen dem Docker-Host und dem Container abgebildet werden.
  • Containername :Dies ist der Name, den Sie dem Container zuweisen möchten, den Sie erstellen. In diesem Beispiel lautet der Containername my-jenkins-3 .

Jenkins-Container mit Docker Compose starten

Nachdem Sie die beiden Docker-Compose-Dateien gespeichert haben, können Sie sie nun verwenden, um die beiden Jenkins-Docker-Container-Instanzen zu starten.

Zum Starten von my-jenkins-3 Container, verwenden Sie den folgenden Befehl. Beachten Sie, dass der folgende Befehl davon ausgeht, dass die Datei docker-compose.yml Datei befindet sich in demselben Verzeichnis, in dem Sie den Befehl ausführen.

# Start the my-jenkins-3 container
docker-compose up -d

# Get the initial admin password
docker exec my-jenkins-3 cat /var/jenkins_home/secrets/initialAdminPassword

# Confirm the my-jenkins-3 container is running
docker ps

Die my-jenkins-3 container startet dann und geht in den Running-Zustand über, wie Sie unten sehen können.

Navigieren Sie mit Ihrem Browser zur URL http://localhost:8083, um auf Jenkins zuzugreifen und die Ersteinrichtung abzuschließen.

Nachdem Sie die anfängliche Jenkins-Einrichtung für my-jenkins-3 abgeschlossen haben container können Sie bestätigen, dass der Ordner ~/jenkins_data mit den Jenkins-Datendateien gefüllt ist.

Da die Jenkins-Datendateien auf dem Docker-Host bestehen bleiben, selbst wenn die Datei my-jenkins-3 Docker-Container gelöscht wird, bleibt die Konfiguration erhalten. Um die Persistenz der Jenkins-Konfiguration weiter zu testen, stoppen Sie my-jenkins-3 Container mit dem folgenden Befehl.

docker-compose down

Beachten Sie, dass Sie downer-compose down verwenden Befehl löscht automatisch den Container selbst.

Starten Sie nun my-jenkins-3 mit dem folgenden Befehl wieder hochfahren.

docker-compose up -d

Und wenn Sie auf die Jenkins-Weboberfläche zugreifen, ist die erste Seite, die Sie sehen, die Anmeldeseite anstelle der Ersteinrichtungsseite. Sie werden feststellen, dass dieselbe Jenkins-Konfiguration beibehalten wird, einschließlich Ihrer Anmeldedaten.

Zusammenfassung

In diesem Artikel haben Sie gelernt, wie Sie Jenkins mit Docker auf unterschiedliche Weise ausführen. Sie haben gelernt, wie Sie Jenkins in Docker mit und ohne gemountetes Volume ausführen. Und Sie haben gelernt, wie Sie die Jenkins-Daten aus dem Container auf dem Host sichern.

Sie haben auch gelernt, wie Sie eine Jenkins-Instanz mit Docker Compose mit Volumes ausführen, die dem Docker-Host zugeordnet sind. Die Jenkins-Datendateien werden dann im Docker-Host gespeichert, wodurch die Jenkins-Einstellungen dauerhaft und konsistent bleiben, selbst wenn der Docker-Container gelöscht wird.

Die Verwendung von Docker und Docker Compose mit Volumes gibt Ihnen die Flexibilität, die Daten von Jenkins zu sichern und letztendlich wiederzuverwenden. Welche Methode zum Ausführen von Jenkins in Docker würden Sie Ihrer Meinung nach häufiger verwenden?

Weiterführende Literatur

  • Bereitstellen Ihres ersten Containers mit Docker für Windows
  • So erstellen (und verwalten) Sie Docker-Volumes unter Windows
  • So installieren Sie Ubuntu 20.04 [Schritt-für-Schritt]

Docker
  1. So installieren Sie Jenkins mit Docker

  2. So verwenden Sie Docker Compose

  3. So schützen Sie sensible Daten mit Docker Compose Secrets

  4. So führen Sie MySQL in einem Docker-Container aus

  5. Eine Kurzanleitung zur Verwendung von Docker Compose

So stellen Sie Docker Compose Stacks mit Kompose in Kubernetes bereit

So führen Sie Grafana in einem Docker-Container aus

So zentralisieren Sie die Protokollverwaltung mit Graylog mit Docker

So installieren Sie Docker Compose auf Ubuntu

So führen Sie Docker-Container aus

So stellen Sie eine PHP-Anwendung mit Nginx und MySQL mit Docker und Docker Compose bereit