Im Laufe der Jahre sind Anwendungen und Tools komplexer geworden, um den sich ändernden Anforderungen und Erwartungen der Menschen gerecht zu werden. Dies kann jedoch Probleme mit der Codekompatibilität und dem Remote-Zugriff verursachen. Zum Beispiel kann ein Code, der auf Windows ordnungsgemäß funktioniert, Kompatibilitätsfehler aufweisen, wenn er auf Linux installiert wird.

Zum Glück kommt Docker zur Rettung. Aber Sie fragen sich vielleicht – was ist Docker und wie hilft es? Das alles und mehr erfahren Sie in diesem Tutorial.

Bevor wir beginnen, hier sind einige Voraussetzungen:

  • Kenntnisse über Linux-Befehle

  • Kenntnisse über die Nutzung des Terminals

  • Kenntnisse über Node.js und Express.js

Inhaltsverzeichnis

  1. Was ist Docker?

  2. Wie man Docker installiert

  3. Demo-Projekt: Wie man eine Node.js-Anwendung containerisiert

  4. Zusammenfassung

Was ist Docker?

Docker ist ein Open-Source-Tool, das es einfach macht, Software auf konsistente Weise auszuführen, egal wo Sie sich befinden. Dies geschieht, indem Ihre Anwendung und alles, was sie benötigt (wie Bibliotheken und Einstellungen), in einen Container gesteckt werden (über den ich gleich noch sprechen werde).

Denken Sie an einen Container wie an eine Box: Er enthält Ihre App und alle ihre Teile, sodass sie auf Ihrem Laptop, einem Server oder in der Cloud genau gleich funktioniert. Docker hilft Entwicklern, das Problem „Bei mir funktioniert es“ zu vermeiden, indem sichergestellt wird, dass alles zuverlässig und portabel verpackt ist.

Docker wurde 2013 von Solomon Hykes erstellt. Im Laufe der Jahre hat es sich weiterentwickelt und deckt eine Vielzahl von Tools ab. Es ist zu einem unverzichtbaren Tool geworden, um die Anwendungs-Bereitstellung und Netzwerkprozesse zu verbessern.

Bevor wir fortfahren, hier sind einige Schlüsselbegriffe, auf die Sie in diesem Tutorial stoßen werden:

Docker Engine

Der Docker-Engine ist, wie der Name schon sagt, das Herzstück für Docker-Anwendungen. Sie besteht aus einem Client- und einem Server-Komponenten. Der Docker-Client ist in unserem Fall das Kommandozeilen-Interface-Tool oder das Docker-Terminal, das wir verwenden, um relevante Befehle für die Projektumsetzung zu senden. Der Docker-Server, allgemein bekannt als der Daemon, ist der Server, der das Ausführen der verschiedenen Docker-Images und Container übernimmt.

Docker-Image

Docker-Images sind vorgefertigte Vorlagen für ausführbare Software und Systeme. Docker bietet eine Vielzahl von Images, von Betriebssystemvorlagen über Servervorlagen bis hin zu Softwarevorlagen und so weiter. Sie finden all diese im Docker-Hub-Register, wo diese Images gespeichert sind.

Sie können auch ein spezifisches Image erstellen und entweder öffentlich im Docker-Hub oder in einem privaten Register hosten.

Docker-Container

Docker-Container sind ausführbare kompakte Instanzen, die auf der generierten Vorlage basieren, die das Docker-Image ist. Sie sind leichte, tragbare Pakete, die alles enthalten, was benötigt wird, um eine Software auszuführen – Code, Laufzeit, Bibliotheken und Systemtools. Ein Container gewährleistet, dass die Anwendung unabhängig von der Umgebung konsistent läuft.

Vorteile der Verwendung von Docker

Hier sind einige Vorteile der Verwendung von Docker als Backend-Entwickler:

  • Docker ist ein großartiges Tool zur Schaffung einer soliden DevOps-Kultur für die Anwendungsentwicklung, da es die Funktionen der Entwicklungs- und Betriebsteams klärt.

  • Es ist auch sehr flexibel und ermöglicht eine einfache Bereitstellung von Mikroservices und verteilten monolithischen Backend-Anwendungen.

  • Es minimiert auch Fehler durch Abhängigkeitskonfigurationsfehler während der Installation, da es die Anwendung mit ihren notwendigen Abhängigkeiten auf einmal überträgt.

Als nächstes werden wir uns damit befassen, wie man eine Node.JS Express-Anwendung dockerisiert. Bevor wir jedoch dazu kommen, müssen Sie Docker auf Ihrem Computer installieren. Diesen Schritt können Sie überspringen, wenn es bereits installiert ist.

Installation von Docker

Docker ist ein plattformübergreifendes Werkzeug, das auf allen gängigen Betriebssystemen (Windows, Mac OS und Linux-Distributionen) installiert werden kann. In diesem Tutorial werde ich nur darauf eingehen, wie man Docker unter Windows einrichtet.

Wenn Sie derzeit ein anderes Betriebssystem als Windows verwenden, können Sie Docker problemlos gemäß den Schritten in der Docker-Dokumentation hier einrichten.

Für Windows-Benutzer ist es wichtig, dass Ihr PC die Mindestanforderungen erfüllt – andernfalls wird die Installation nicht erfolgreich sein. Die Mindestanforderungen sind wie folgt:

  • Eine Windows-Betriebssystemversion nicht niedriger als Windows 10 Home

  • Ein PC mit installiertem WSL-2 oder aktiviertem Hypervisor.

Damit gehen wir zum Herunterladen des Docker-Installationsprogramms über. Sie können die neueste Docker-Installationsdatei hier herunterladen. Nachdem Sie dies getan haben, führen Sie die Software aus und akzeptieren Sie die Allgemeinen Geschäftsbedingungen. Nach erfolgreichem Abschluss starten Sie die Anwendung. So sollte es aussehen:

Um zu bestätigen, dass Sie die Anwendung erfolgreich installiert haben, navigieren Sie zu dem Eingabeaufforderungsterminal und führen Sie Docker --version aus. Sie sollten die genaue Version des Docker-Engine-Tools sehen, die Sie installiert haben, wenn es erfolgreich war.

Jetzt gehen wir zum eigentlichen Projekt über.

Demo-Projekt: Wie man eine Node.js-Anwendung containerisiert

In diesem Abschnitt werden wir einen einfachen Node.js-basierten Backend-Dienst mit minimalen Abhängigkeiten containerisieren. Dies zeigt Ihnen, wie Sie eine Anwendung mit einer Docker-Anwendung Containerisierungstechnik, die als Dockerfile bekannt ist, containerisieren und portieren können. Beachten Sie, dass es besser sein kann, das Docker Compose YAML-Tool zu verwenden, wenn Sie eine komplexere Anwendung haben.

Zunächst werden wir die Beispiel-Node.js-Anwendung einrichten. Ich werde den gesamten Code-Setup in diesem Artikel unten bereitstellen. Aber zuerst lassen Sie uns verstehen, was ein dockerfile ist.

Was ist ein Dockerfile?

Im Grunde genommen ist ein Dockerfile ein Templatesystem, das es dem Benutzer ermöglicht, Befehle einzugeben, die, wenn sie ausgeführt werden, ein funktionales Bild der Anwendung erzeugen können. Dieses Bild kann dann in einen Container umgewandelt werden.

Hier sind einige Befehle, die in der Grundstruktur eines Dockerfiles enthalten sind:

  • CMD: setzt den Standardbefehl, der ausgeführt wird, wenn kein Befehl angegeben ist, wenn der Container gestartet wird. Er kann überschrieben werden, indem ein Befehl beim Ausführen des Containers bereitgestellt wird (docker run ...).

  • ENTRYPOINT: Gibt den Hauptbefehl an, der immer ausgeführt wird, wenn der Container gestartet wird. Er ist nicht leicht zu überschreiben, aber Argumente können angehängt werden.
    Hinweis, dass CMD und ENTRYPOINT beide angeben, welcher Befehl oder Prozess der Container ausführen soll, wenn er gestartet wird. Aber sie werden unterschiedlich verwendet und haben unterschiedliche Zwecke. Verwenden Sie CMD für das Standardverhalten, das überschrieben werden kann. Verwenden Sie ENTRYPOINT für einen festen Befehl, der den primären Zweck des Containers definiert.

  • FROM: Dies ist normalerweise die Eröffnungsanweisung in einer Dockerfile. Dieser Befehl ruft ein Basis-Image ab, das die Grundlage für den Aufbau des Images der betreffenden Anwendung bildet. Zum Beispiel besteht das Basis-Image für eine Node.js-Anwendung darin, den grundlegenden Node.js-Engine installiert zu haben.

  • WORKDIR: Diese Syntax definiert das aktive Arbeitsverzeichnis, in dem die Anwendungsdateien innerhalb des definierten Containers gespeichert werden. Ein automatischer Ordner wird erstellt, wenn er noch nicht verfügbar ist.

  • COPY: Diese Syntax wird verwendet, um sicherzustellen, dass die für die Erstellung des Docker-Images aus der Projektdatei des Code-Basiss erforderlichen Dateien in den neu erstellten Docker-Container kopiert werden. Die Verzeichnisse dieser Dateien werden sorgfältig hervorgehoben.

  • RUN: Diese Syntax gibt das Skript an, das vor dem Abschluss der Containerisierung der Anwendung ausgeführt werden soll.

  • ENV: Diese Syntax wird verwendet, um Umgebungsvariablen und Geheimnisse hervorzuheben, die während des Ausführens der Anwendung aufgerufen werden.

  • EXPOSE: Diese Syntax legt den Kommunikationsport fest, über den die Anwendung mit dem externen Internet kommuniziert. Zum Beispiel EXPOSE: 3000 legt die Webschnittstelle der Anwendung auf localhost:3000 fest.

Um tiefer in Docker einzutauchen, wollen wir schnell einige wichtige Docker-Befehle überprüfen, die wir in diesem Tutorial verwenden werden:

  • Docker ps: Dieser Befehl listet alle laufenden Container in Ihrem Docker-Terminal auf.

  • Docker run: Dieser Befehl führt ein Docker-Image aus, um eine Instanz eines Containers auszulösen.

  • Docker build: Dieser Befehl arbeitet basierend auf der Docker-Datei, um ein Bild eines Dienstes oder einer Anwendung zu generieren.

  • Docker rm: Dieser Befehl kann verwendet werden, um ein Bild mithilfe der Bildidentifikationsdetails zu löschen.

Wie man die App containerisiert

Jetzt können wir beginnen, unsere einfache Node/Express-Anwendung zu containerisieren. Um dem Tutorial zu folgen, kannst du den Basiscode von hier erhalten.

Bei der lokalen Prüfung gibt es eine CRUD-API zurück, mit der du Produkte erstellen, abrufen, aktualisieren und löschen kannst, wenn sie ausgeführt wird. Wir werden die Anwendung für eine einfache Bereitstellung in der Cloud mit unserer Docker-Engine verpacken. Wir werden dies mit dem Dockerfile-Tool tun, das wir oben besprochen haben.

Schritt 1: Erstelle das Dockerfile

In deinem Projektordner erstelle eine Datei mit dem Namen Dockerfile. Stelle sicher, dass der Name genau „Dockerfile“ ist (ohne Erweiterung und in einigen Systemen großgeschrieben – also achte darauf, dass es großgeschrieben ist).

Wenn du einen Code-Editor verwendest, erstelle einfach eine neue Datei mit dem Namen Dockerfile. Wenn du einen einfachen Texteditor verwendest, speichere die Datei unter dem Namen Dockerfile und stelle sicher, dass sie nicht versehentlich mit einer Erweiterung wie .txt gespeichert wird.

Gib dann die erste Zeile ein:

FROM Node:18-alpine

Dieser Befehl ruft das Basisimage ab, das wir verwenden werden, um unsere Express-Anwendung zu betreiben, das ist die Node-Engine selbst.

Vielleicht fragst du dich, wozu das alpine dient. Alpine ist eine leichtgewichtige, viel komprimiertere Version eines Docker-Images. Es schließt die Integration zusätzlicher Pakete aus, die nicht direkt für das Basisbetriebssystem erforderlich sind. Es wird als gute Standardpraxis empfohlen, leichtgewichtige Distributionen für schnellere Ausführung und einfache Nutzung zu verwenden.

Schritt 2: Setze das Arbeitsverzeichnis

WORKDIR /app

Dies setzt das Arbeitsverzeichnis des Bildes auf den Ordner /app des Containers. Es stellt sicher, dass alle Dateiaktionen hier stattfinden und alle Dateien in dieses Verzeichnis kopiert werden.

Schritt 3: Kopieren der erforderlichen Dateien

COPY package.json

Dieser Befehl kopiert die Dateien package.json, die eine Liste von Abhängigkeiten und Paketen enthalten, die zur Unterstützung unserer Anwendung installiert werden müssen.

Schritt 4: Ausführen eines Setup-Skripts

RUN npm install

Dieser Befehl stellt sicher, dass alle erforderlichen Abhängigkeiten zur Unterstützung unserer Node.js-Anwendungen im Container installiert sind.

Schritt 5: Kopieren der Code-Dateien

COPY . .

Dieser Befehl stellt sicher, dass alle Dateien im lokalen Verzeichnis in das Dateisystem des Containers im festgelegten Arbeitsverzeichnis kopiert werden.

Schritt 6: Freigeben des Serverports



EXPOSE 3000

Dieser Befehl gibt den Serverport frei, den wir verwenden möchten, um auf den Container zuzugreifen. In diesem Fall ist es Port 3000.

Schritt 7: Hinzufügen des Befehls zum Starten des Containers

CMD ["npm", "run", "dev"]4

Dieser Befehl wird am Ende ausgeführt, um die Node.js-Anwendung zu starten. Er führt einfach den Befehl npm run dev aus, den Sie für eine Entwicklungsumgebung verwenden würden. Um ihn in einer Produktionsumgebung auszuführen, würden Sie stattdessen den Befehl npm start verwenden.

Nach Abschluss dieses Prozesses sollte die endgültige Struktur der Dockerfile wie folgt aussehen:

FROM Node:18-alpine
WORKDIR /app

COPY package.json

RUN npm install

COPY . .

CMD ["npm", "run", "dev"]

Testen des Docker-Containers

Zusammenfassend erstellen wir ein Docker-Image unserer Node.js-Anwendung. Führen Sie dazu den Befehl docker build -t nodeapp . aus. Der Befehl docker build erstellt das Image, während das -t die Details des Image-Tags ermöglicht.

In unserem Fall weisen wir dem zu erstellenden Image den Namen nodeapp zu, und das Image wird im Arbeitsverzeichnis erstellt.

Herzlichen Glückwunsch! Sie haben erfolgreich Ihr erstes Docker-Image erstellt. Um alle Bilder in Ihrem lokalen Repository zu sehen, führen Sie den Befehl docker images aus.

Um eine funktionierende Instanz Ihres Images für Tests zu erstellen, führen Sie den Befehl docker run nodeapp aus.

Wir verwenden Mongo DB als unsere Datenbank für dieses Tutorial, daher müssen wir die MongoDB-URL als Umgebungsvariable an den Docker-Container übergeben. Umgebungsvariablen helfen Ihnen, bestimmte Schlüsselvariablen zu schützen, die nicht der Öffentlichkeit preisgegeben werden sollten. Andere Variablen, die als Umgebungsvariablen übergeben werden können, sind API-Schlüssel und Verschlüsselungscodes.

Um die MongoDB-URL an den Docker-Container zu übergeben, verwenden wir das Tag -e, um sicherzustellen, dass Docker den entsprechenden eingegebenen Wert als Umgebungsvariable erkennt.

docker run -e JWT_SECRETS={geben Sie den Wert Ihrer Wahl ein} -e MONGO_URL={Die MongoDB-URL Ihrer Wahl} nodeapp.

Um den Container auch im Hintergrund zu verwenden, fügen Sie einfach das Tag -d hinzu, das die Abtrennoption darstellt. Diese Option ermöglicht es dem Container, im Hintergrund zu laufen, obwohl das Befehlszeilentool beendet wird.

Im Falle von keinen Fehlern sollte auch das Navigieren zu localhost:5000 etwas Ähnliches wie das untenstehende Bild erzeugen.

Zusammenfassung

In diesem Artikel haben Sie gelernt, was Docker ist und wie es funktioniert, zusammen mit seinen gängigen Befehlen und wie man es verwendet, um eine Backend-Anwendung zu containerisieren. Über die Grundlagen hinaus können Sie auch andere Verwendungen von Docker in der kontinuierlichen Integration und Entwicklung erkunden. Um mehr über Docker zu erfahren, können Sie die Dokumentation hier überprüfen.

Ich würde auch empfehlen, Ihr neues Wissen zu nutzen, um Projekte mit realen Anwendungsfällen bereitzustellen, sowie das Erforschen von Netzwerken in Docker-Anwendungen. Um Ihre App live zu machen, können Sie das Docker-Image, das Sie erstellt haben, problemlos bei einem der beliebten Cloud-Service-Anbieter wie AWS, GCP, Azure und so weiter bereitstellen.

Zögern Sie nicht, mir Fragen zu stellen! Sie können auch meine anderen Artikel hier überprüfen. Bis zum nächsten Mal, weiterhin fleißig coden!