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

So aktualisieren Sie Docker-Container automatisch beim Aktualisieren von Docker-Web-Apps

Stellen Sie sich dieses Szenario vor. Sie hosten einige Webdienste, die in Docker-Containern ausgeführt werden. Wenn der Webdienst eine neue Version veröffentlicht hat, rufen Sie das Docker-Image ab und aktualisieren die Container, um den Dienst zu aktualisieren.

Ich habe bereits früher über das Aktualisieren von Docker-Containern ohne Ausfallzeiten gesprochen, aber in diesem Artikel geht es nicht um das Aktualisieren der Web-Apps. Hier geht es um die Aktualisierung der Betriebssystem-Container selbst.

Das manuelle Upgrade des im Container ausgeführten Betriebssystems kann von Zeit zu Zeit eine entmutigende Aufgabe sein. Dazu müssen Sie die relevanten Upgrade-Befehle selbst auf einem laufenden Container ausführen.

Wie wäre es, wenn Sie diesen zusätzlichen Schritt eliminieren und die Aktualisierung des Betriebssystems mit der Aktualisierung des Dienstes kombinieren?

Dies ist ein Automatisierungstrick, den ich verwende, wenn ich einen Webdienst aktualisiere, der mit Docker Compose bereitgestellt wurde.

Basierend auf dieser Bereitstellung verwenden wir Ghost CMS als reales Beispiel.

DigitalOcean – Die Entwickler-Cloud, die Millionen von Entwicklern hilft, Anwendungen jeder Größe einfach zu erstellen, zu testen, zu verwalten und zu skalieren – schneller als je zuvor. DigitalOcean-LogoRoxana Ciobanu, CTO

Automatisches Upgrade von OS-Containern während der Aktualisierung des Webservice

Sie können diesen Artikel einfach lesen, um zu verstehen, was ich tue. Aber wenn Sie ihm folgen möchten, können Sie das auch tun.

Ich werde zwei verschiedene Beispiele zeigen:

  1. Für Debian-basierte Docker-Container
  2. Für Alpine-basierte Docker-Container

Automatisches Upgrade von Debian-Containern

Für das Verfahren müssen Sie sich um zwei Schritte kümmern:

Schritt 1:Beachten Sie die CMD-Anweisung

Notieren Sie sich die CMD-Anweisung, die final in der WebApp Dockerfile.

angegeben ist

Dazu müssen Sie das Dockerfile überprüfen, mit dem das Image erstellt wurde (in diesem Beispiel Ghost):

Daher ist der eigentliche Befehl hier node current/index.js .

Schritt 2:Fügen Sie die Einstellung „Auto-Upgrade“ hinzu

Fügen Sie die Upgrade-Befehle und die notierte CMD-Anweisung im Ghost-Service-Abschnitt der Docker Compose-Datei hinzu:

command: sh -c "apt update && apt -y upgrade && node current/index.js"

Mal sehen, wie das letztendlich aussehen würde. Angenommen, Sie betrachten die Docker Compose-Einträge für den Ghost-Dienst aus dem oben zitierten Leitfaden. Eine aktualisierte Version basierend auf unserem Tutorial wäre:

    ghost:
      image: ghost:4.20.4
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apt update && apt -y upgrade && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Hier habe ich den Befehl direkt nach den volumes angegeben Abschnitt.

Automatisches Upgrade von Alpine-Containern

Auch bei diesem Verfahren müssen Sie sich um zwei ähnliche Schritte kümmern:

Schritt 1:Beachten Sie die CMD-Anweisung

Notieren Sie sich die CMD-Anweisung, die final in der WebApp Dockerfile.

angegeben ist

Dazu müssen Sie das Dockerfile (in diesem Beispiel Ghost Alpine) überprüfen:

Sehr offensichtlich ist der Befehl hier derselbe wie für die frühere Debian-Version:node current/index.js .

Schritt 2:Fügen Sie die Einstellung „Auto-Upgrade“ hinzu

Fügen Sie die Upgrade-Befehle und die notierte CMD-Anweisung im Ghost-Service-Abschnitt der Docker Compose-Datei hinzu:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"

Alpine Upgrade-Referenz.

Mal sehen, wie das letztendlich aussehen würde (beachte dieses Mal, dass ich das Alpen-Image für Ghost verwenden werde). Angenommen, Sie betrachten die Docker Compose-Einträge für den Ghost-Dienst aus dem oben zitierten Leitfaden. Eine aktualisierte Version basierend auf unserem Tutorial wäre:

    ghost:
      image: ghost:4.20.4-alpine
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Das ist es dann. Ab diesem Zeitpunkt werden die Container-Upgrade-Befehle automatisch aufgerufen, wenn Sie Ihre WebApps ohne Ausfallzeit aktualisieren, und dann werden Ihre Web-Apps ausgeführt.

Hinweis:Wenn Sie eine App aktualisieren, indem Sie die Versionsnummer des Bildes in der Docker-Compose-Datei ändern, müssen Sie die hier besprochene Befehlsoption mit einem Hashtag vorübergehend deaktivieren. Sobald das Update für die Web-App abgeschlossen ist, aktivieren Sie dieselbe Zeile erneut, um den Container selbst zu aktualisieren. Beide Schritte (Aktualisierung der App und des Containers) sind durch Skalierung ohne Ausfallzeiten möglich.

Bonustipps

Hier ist eine Liste von Befehlen für andere beliebte Apps wie Nextcloud und Rocket.Chat. Denken Sie daran, dass diese genau so hinzugefügt werden müssen, wie Sie es beim Ghost-Beispiel gesehen haben.

Nextcloud

Für Debian:

command: sh -c "apt update && apt -y upgrade && apache2-foreground"

Für Alpine:

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && apache2-foreground"

Rocket.Chat

command: sh -c "apt update && apt -y upgrade && node main.js"

Ich hoffe, dieser Artikel hilft Ihnen bei Ihren täglichen Sysadmin-Aktivitäten. Wenn Sie Fragen, Feedback oder Vorschläge haben, hinterlassen Sie bitte Ihre Gedanken im Kommentarbereich unten.


Docker
  1. So aktualisieren Sie laufende Docker-Container automatisch

  2. So verwenden Sie Docker Compose

  3. So verbinden Sie Docker-Container

  4. So stellen Sie Apps mit Rancher bereit

  5. So übergeben Sie Umgebungsvariablen an Docker-Container

So reduzieren Sie die Docker-Image-Größe in Docker-Containern

So führen Sie Docker-Container aus

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So benennen oder umbenennen Sie Docker-Container

So konfigurieren Sie Netzwerk-Namespaces in Docker-Containern