So veröffentlichen Sie Node.js-Docker-Images mit GitHub Actions in der Docker Hub Registry
9. August 2021
0 Min. LesezeitIn einem früheren Beitrag haben wir eine Schritt-für-Schritt-Anleitung dazu vorgestellt, wie Sie Node.js-Docker-Images mit GitHub Actions in der GitHub Packages Registry veröffentlichen. In diesem Beitrag konzentrieren wir uns darauf, das von uns erstellte Docker-Image in der öffentlichen Docker Hub Registry zu veröffentlichen.
Warum ist das nützlich, fragen Sie sich vielleicht? Die Docker-Befehlszeilenanwendung docker verwendet standardmäßig die Registry docker.io, die auf die Docker Hub Registry verweist. Das ermöglicht eine komfortable Entwicklererfahrung: Images lassen sich nach dem Schema <user>/<repository> abrufen, zum Beispiel, wenn Sie die Snyk CLI als Docker-Image verwenden möchten:
In diesem Artikel führen wir Sie Schritt für Schritt durch die Konfiguration eines weiteren Workflows zum Erstellen und Veröffentlichen von Docker-Images. Dieser kann parallel zu dem zuvor vorgestellten Workflow für die GitHub Packages Registry ausgeführt werden.
Wie der vorherige Beitrag knüpft auch dieser an Dockly an, das Open-Source-Befehlszeilentool auf Node.js-Basis zur Verwaltung von Docker-Containern über die CLI, und zeigt, wie Sie ein Docker-Image zu Docker Hub pushen. Den fertigen Workflow finden Sie im GitHub-Repository von Dockly.
GitHub-Actions-Workflow erstellen
Um einen neuen Workflow hinzuzufügen, erstellen Sie einfach eine neue Datei im Verzeichnis .github/workflows/. Alternativ können Sie Ihr Open-Source-Repository auf GitHub öffnen, auf den Tab Actions und anschließend auf New Workflow klicken und einen neuen Workflow erstellen:

Wählen Sie einen Dateinamen für die Workflow-Datei zum Veröffentlichen in Docker Hub, zum Beispiel docker-publish-to-dockerhub.yml.
Wenn Sie dafür die GitHub-Benutzeroberfläche verwenden, ist die Workflow-Datei möglicherweise bereits vorausgefüllt. Löschen Sie in diesem Fall einfach den Inhalt und fügen Sie Folgendes ein:
Wir haben alle Punkte ausführlich im vorherigen Artikel beschrieben. Hier eine kurze Zusammenfassung:
Dieser Docker-Hub-Workflow wird bei jedem Push, jedem Tag-Release und jedem Pull Request für den main-Branch des Repositorys ausgeführt.
Die globalen Umgebungsvariablen legen
REGISTRYaufdocker.iofest. Das bedeutet, dass unsere Images zu Docker Hub gepusht und dort verfügbar sein werden. MitIMAGE_NAMEwerden der GitHub-Benutzername und der Repository-Name festgelegt. Wenn Sie einen anderen Docker-Hub-Benutzernamen haben, müssen Sie diesen Wert möglicherweise anpassen.
Als Nächstes definieren wir unsere Jobs, in denen wir den Prozess zum Erstellen und anschließenden Veröffentlichen des Docker-Images festlegen.
Bei Docker Hub anmelden und das Docker-Image erstellen und veröffentlichen
Als Nächstes müssen wir folgende Schritte ausführen:
Bei Docker Hub anmelden. Dazu müssen wir in Docker Hub ein Token erstellen und es in den GitHub-Repository-Einstellungen als Repository-Secret hinterlegen.
Metadaten des erstellten Docker-Images extrahieren, damit sie für den Build-Prozess des Images verfügbar sind.
Das erstellte Docker-Image zu Docker Hub pushen.
Das erreichen wir mit dem folgenden Codeausschnitt, den Sie dem Workflow-Inhalt hinzufügen müssen, den wir im vorherigen Schritt erstellt haben:
Nachdem Sie die Workflow-Datei angewendet und in den main-Branch gemergt haben, sollte der Build erfolgreich durchlaufen und ein neues Docker-Image in die Docker Hub Registry pushen:

Ein bekannter Haken: Das Docker-Hub-Repository, in das Sie das Image veröffentlichen, erhält derzeit nicht automatisch eine passende Beschreibung und README-Inhalte. Diese Funktion ist in der offiziellen GitHub Action docker/build-and-push nicht verfügbar.
Wenn Sie diese Funktion nutzen möchten, empfehlen die Maintainer die GitHub Action Docker Hub Description aus dem Marketplace. In der Dokumentation finden Sie ein Beispiel, das Sie übernehmen können.
Docker-Images aus der Docker Hub Registry abrufen
Um das neue Docker-Image aus Docker Hub abzurufen, führen Sie einfach den bekannten Befehl docker pull aus, zum Beispiel:
Pushen Sie anfällige Docker-Images?
Warum hier aufhören? Mit Snyk können Sie Schwachstellen in Docker-Images finden, überwachen und sogar beheben. Nutzen Sie den Workflow, der am besten zu Ihnen passt: Verwenden Sie entweder die CLI oder importieren Sie Docker-Images direkt aus Docker Hub, um sie auf Sicherheitslücken zu überwachen.
Mein Kollege Eric Smalling hat einen ausführlichen Leitfaden zu Best Practices für entwicklergesteuerte Workflows – Dockerfile- und Image-Scanning, Priorisierung und Behebung verfasst, falls Sie Ihr Wissen vertiefen möchten. Außerdem gibt es eine Snyk GitHub Action, mit der Sie im GitHub-Actions-Ökosystem Open-Source-Bibliotheken und Container-Images auf Sicherheitslücken überprüfen können.
Noch tiefer einsteigen
Wenn Sie sich weiter mit Best Practices für die Erstellung von Docker-Images beschäftigen möchten, empfehle ich Ihnen Folgendes:
10 Best Practices, um Node.js-Webanwendungen mit Docker zu containerisieren
Docker für Node.js-Entwickler: 5 Dinge, die Sie wissen müssen, um Ihre Sicherheit nicht zu gefährden
Falls Sie den vorherigen Artikel noch nicht gelesen haben und Docker-Images in GitHub Packages veröffentlichen möchten, erfahren Sie hier, wie Sie Node.js-Docker-Images mit GitHub Actions in der GitHub Packages-Registry veröffentlichen.
Container-Sicherheit mit Fokus auf Entwickler
Snyk findet und behebt automatisch Schwachstellen in Container-Images und Kubernetes-Workloads.