Containerisierung eines Node.js-Dienstes

Containerisierung bedeutet, eine Anwendung, ihre Abhängigkeiten und Bibliotheken zusammenzubündeln, sodass sie wie Plug-and-Play auf jeder Art von Infrastruktur verwendet werden können. Jedes Bündel wird als Container bezeichnet.

Warum einen Node.js-Dienst containerisieren?

Wie im letzten Abschnitt besprochen, würde die Containerisierung eines Node.js-Dienstes bedeuten, die App, ihre Abhängigkeiten, Bibliotheken und sogar die Konfiguration in einen Container zu bündeln.Containerisierung hat folgende Vorteile:

  1. Portabel. Da wir alle Anforderungen der App in einem Container gebündelt haben, können dieselben Images in der Entwicklungs-, Test- und Produktionsumgebung installiert werden.
  2. Schnell und leichtgewichtig. Container sind in der Regel viel schneller als virtuelle Maschinen (VMs) oder Bare-Metal, da sie nur die Anforderungen der App ausführen, während historisch gesehen die VMs oder Bare-Metal die gesamte Maschine und alle Apps starten würden.
  3. Skalierbar. Mit den oben genannten zwei Vorteilen wird die Skalierbarkeit sehr einfach, da die Container schnell, effizient und einfach bereitzustellen sind. 

In diesem Artikel werden wir uns speziell auf die Containerisierung einer Node.js-App konzentrieren. 

Voraussetzungen

Werkzeuge und Software

Docker (Docker Engine und Docker CLI)

Wir müssen Docker installieren um unsere Container zu verwalten. Docker Engine verwaltet die Laufzeit, und die CLI kann verwendet werden, um über die Kommandozeile zu interagieren.

Node.js und npm/yarn installiert (für die anfängliche Entwicklung/Tests)

Wir benötigen Node.js und npm, um die Abhängigkeiten der Bibliotheken zu installieren und den Dienst auszuführen.

Kubernetes oder Docker Compose zur Verwaltung mehrerer Container (optional)

Wir benötigen Kubernetes oder Docker Compose, um mehrere Container zu verwalten. 

Grundlagen

Node.js-Anwendungsstruktur:

  • Es wird erwartet, dass der Leser bereits die Rolle der Hauptdatei (app.js oder index.js) im Projekt versteht, zusammen mit der Rolle anderer Dateien wie package.json und yarn.lock.
  • Dieser Artikel wird auch nicht auf andere Aspekte des Projekts eingehen, wie Controller, Middleware und Routen. 

Grundlegende Docker-Befehle und Dockerfile-Syntax

Docker-Befehle:

Shell

 

Kernanweisungen für Dockerfile:

Shell

 

Die beiden behandelten Tabellen und die Node.js-Struktur sind ausreichend, um mit der Containerisierung zu beginnen und Ihren Node.js-Dienst bereitzustellen.

Einrichten des Node.js-Dienstes

Einrichten der Node.js-Umgebung ist ein unkomplizierter Prozess. Stellen Sie sicher, dass Node.js auf Ihrem Rechner installiert ist. Wenn Sie Zweifel haben, sehen Sie bitte im Anhang (1) nach. Sobald installiert, öffnen Sie Ihre Konsole und überprüfen Sie die Installation, indem Sie Folgendes eingeben: 

Shell

 

Erstellen Sie ein Projektverzeichnis und initialisieren Sie Ihr Projekt wie folgt:

Shell

 

Installieren Sie das Express-Modul

Shell

 

Erstellen Sie eine Serverdatei, nennen wir sie server.mjs, in der wir die Route und die entsprechende Logik zur Route hinzufügen können. Da dieser Artikel mehr über Containerisierung handelt, halten wir die Endpunklogik sehr einfach. Etwas in dieser Art:

JavaScript

 

Jetzt ist der Dienst bereit, um gestartet zu werden, navigieren Sie zum Projektverzeichnis im Terminal und führen Sie diesen Befehl aus:

Shell

 

Der Dienst läuft und funktioniert; wenn wir besuchen http://localhost:3000,  werden wir sehen:

„Willkommen auf meinem Server“ 

Erstellen des Dockerfiles

Lass uns überarbeiten, was ein Dockerfile ist, es enthält die Anweisungen zum Erstellen des Docker-Images. Lass uns ein Dockerfile im Stammverzeichnis erstellen. Während dieses Schrittes, wie wir in den Dockerfile-Anweisungen besprochen haben, müssen wir die folgenden Dinge tun:

Plain Text

 

Erstellen und Ausführen des Docker-Images

Vom Stammverzeichnis des Terminals aus navigieren Sie zu Ihrem Projekt und führen Sie den folgenden Befehl aus: Befehl:

Shell

 

Wobei image-name der Name des Docker-Images ist. Das . am Ende setzt den Kontext auf das aktuelle Verzeichnis.

Nachdem das Image erstellt wurde, erstellen wir den Container und führen die Node.js-App mit folgendem Befehl aus:

Shell

 

Nachdem das oben Genannte erfolgreich war, können Sie überprüfen, ob der Dienst läuft, indem Sie docker ps ausführen und dann zur gleichen localhost-URL wie zuvor gehen.

Images in ein Registry pushen

Jetzt, da dein Bild bereit ist, ist es Zeit, es in ein Registry zu schieben. Für den Umfang dieses Artikels lassen Sie unsnur zum Docker Hub pushen. Docker Hub ist ein Cloud-basierter Service zum Speichern, Teilen und Verwalten von Docker-Containerbildern.

Erstellen Sie ein Konto unter https://hub.docker.com/ und melden Sie sich an mit ihrem Konto an.

Shell

 

Nach dem Anmelden können lokal erstellte Bilder hinzugefügt werden wie:

Shell

 

Wo:

  • tag ist entweder latest oder eine Versionsnummer.
  • repository-name ist der gewünschte Repository-Name.

Als Nächstes, pushen Sie das Bild wie folgt:

Shell

 

Fazit

Wie wir sehen können, macht Containerisierung komplexe Workflows und Services durch die Trennung der Abhängigkeiten schnell, tragbar und skalierbar. Sobald implementiert, profitiert das gesamte Team davon.Ich ermutige Sie, die fortgeschrittenen Funktionen wie Multi-Stage-Builds und Container-Netzwerke zu erkunden. Außerdem sollten Sie sich mit Orchestrierungstools (z. B. Kubernetes) vertraut machen und CI/CD-Pipelines integrieren, um Ihren Entwicklungsworkflow zu optimieren.

Anhang

  1. Wie man Node und npm auf seinem/ihrer Rechner installiert

Source:
https://dzone.com/articles/containerization-of-a-nodejs-service