So erstellen und implementieren Sie ein Node-Projekt mit Docker

So erstellen und implementieren Sie ein Node-Projekt mit Docker

Ich habe vor einiger Zeit ein Full-Stack-Node-Projekt durchgeführt und der serverseitige Technologie-Stack war Nginx + Koa + PostgreSQL. Das Einrichten der Umgebung und die Bereitstellung auf CentOS war ziemlich mühsam. Ich habe den Testserver bereitgestellt und dann den Produktionsumgebungsserver bereitgestellt, als dieser online ging. Es handelt sich dabei um eine Menge „körperlicher Arbeit“, die langweilig, kräftezehrend und undankbar ist. Also begannen wir darüber nachzudenken, wie wir diesen Teil der Build- und Bereitstellungsarbeit automatisieren könnten, und kamen zu Docker.

Was ist Docker

Docker ist eine Virtualisierungstechnologie, die noch leichter ist als eine virtuelle Maschine. Die Entität, die sie virtualisiert, wird Container genannt. Der Container selbst ist eine Sandbox mit isoliertem Umfang. Er enthält nur grundlegende Bibliotheken und die dazugehörigen Dienste, was sehr rationalisiert ist. Sobald der Container ausgeführt wird, ist er nur noch ein Prozess auf dem Host-Computer und belegt nur sehr wenige Ressourcen. Dies schafft die Voraussetzungen für die Ausführung von Containerclustern auf dem Betriebssystem mit hervorragender Bedienbarkeit und Flexibilität.

Welche Beziehung besteht zwischen Bildern und Containern? Sie können sich ein Bild als eine Klasse und einen Container als ein Objekt vorstellen. Ein Container wird durch Instanziieren eines Bildes generiert. Natürlich kann ein Bild mehrere Container generieren.

Clientseitiger Docker

Wenn nicht auf dem Server, wie verwenden wir Docker auf dem Client? Docker Desktop kann unter Windows und OSX verwendet werden, ebenso wie Kitematic. Beides sind Desktop-Verwaltungstools, die für allgemeine Vorgänge sehr praktisch sind. Docker Desktop und Kitematic visualisieren nur einige Vorgänge, und die Befehlszeile ist weiterhin erforderlich, da viele Vorgänge nur mithilfe der Befehlszeile ausgeführt werden können.

Grundlegende Docker-Operationen

Bildname

In Bezug auf das Image-Tag beispielsweise nginx:1.19.0-alpine ist 1.19.0 die Versionsnummer von nginx und alpine der Codename des Betriebssystems.

  • Jessie: Debian 8
  • Strecken: Debian 9
  • Buster: Debian 10
  • Alpine: Alpine wird empfohlen, da es sehr klein ist.

Alpine ist die kleinste Version und einige sind sogar ein Viertel so groß wie andere Versionen. Dies bedeutet, dass Images schneller erstellt werden und effizienter ausgeführt werden, da weniger Komponenten geladen werden, was wiederum weniger Schwachstellen und mehr Sicherheit bedeutet.

Ziehen Sie das Bild

Docker-Pull Nginx:1.19.0-Alpine

Starten des Containers

  • --name web: Gibt den Containernamen als „Web“ an
  • -p 8080:80: Der Container nginx lauscht auf Port 80, der dem lokalen Port 8080 zugeordnet ist
  • -v xxxx:xxxx: Hier ist die lokale Konfigurationsdatei, die der Container-nginx-Konfigurationsdatei zugeordnet ist
  • -d: Im Hintergrund ausführen
  • nginx:1.19.0-alpine: das verwendete Image
docker run --name web -p 8080:80 -v /usr/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx:1.19.0-alpine

Andere Operationen

  • Docker-Bilder #Bilder anzeigen
  • docker rmi xxx #lösche das Bild
  • docker ps #Laufende Container anzeigen
  • docker rm xxx #Container löschen

Docker-Datei

Eine bequemere Möglichkeit zum Erstellen eines Images ist die Verwendung von Dockerfile, der Konfigurationsdatei des Images. Solange Sie über Dockerfile verfügen, können Sie das Image jederzeit erstellen. Das Folgende ist zum Erstellen eines sehr einfachen Nginx-Images gedacht. Das während der Erstellung verwendete Basis-Image ist:

VON nginx
KOPIEREN Sie nginx.conf /etc/nginx/nginx.conf

Docker-Compose

Wenn unser Projekt nicht nur über einen einzigen Container verfügt, sondern mehrere Container ausführen muss und die Container miteinander kommunizieren müssen, werden leistungsfähigere Verwaltungstools benötigt. Beispielsweise k8s, aber für unser aktuelles kleines Projekt reicht das offizielle Docker-Compose aus.

Zunächst benötigen Sie eine Konfigurationsdatei docker-compose.yml. Das Folgende ist beispielsweise eine Vorlage für zwei Container. Image gibt das verwendete Image an, Ports die Portzuordnung und Volumes die Datenvolumes, die zugeordnet werden müssen:

Version: "3"

Leistungen:
  Webanwendung:
    Bild: Web
    Häfen:
      - „8080:80“
    Bände:
      - "/Daten"
  Redis:
    Bild: „redis:alpine“

Anschließend können Sie die folgende Kommandozeile verwenden:

docker-compose build [Optionen] [SERVICE...] #Erstellen (Neuaufbau) des Service-Containers im Projekt docker-compose up -d # Ausführen des Compose-Projekts, Ausführung im Hintergrund

docker-compose up ist ein sehr leistungsfähiger Befehl, der versucht, eine Reihe von Vorgängen automatisch abzuschließen, darunter das Erstellen von Images, das (Neu-)Erstellen von Diensten, das Starten von Diensten und das Zuordnen von dienstbezogenen Containern. Die verknüpften Dienste werden automatisch gestartet, sofern sie nicht bereits ausgeführt werden. Man kann sagen, dass man in den meisten Fällen ein Projekt direkt über diesen Befehl starten kann.

Erstellen Sie das Projekt nginx-node-postgres

Mit der oben genannten Grundlage können wir dann unser eigenes Projekt erstellen. Zunächst führt das Dockerfile des Knotendienstes hauptsächlich die folgenden Schritte aus

  • Erstellen eines Container-Arbeitsverzeichnisses
  • Kopieren Sie die relevanten Konfigurationsdateien in den Container
  • Installieren Sie npm-Pakete im Container
  • Führen Sie pm2 aus, um den Container zu starten
VON Knoten:14.5.0-alpine3.12
# Arbeitsverzeichnis WORKDIR /usr/src/app
# Kopieren Sie die Konfigurationsdatei COPY package*.json ./
KOPIEREN Sie process.yml ./
Führen Sie npm set registry https://registry.npm.taobao.org/ aus \
  && npm install pm2 -g \
  && npm installieren
# Verwenden Sie pm2, um CMD zu verwalten ["pm2-runtime", "process.yml", "--only", "app", "--env", "production"]
EXPOSE 3010

Konfigurieren Sie dann docker-compose.yml

  • Die Datenbankkonfiguration ist die Postgres-Datenbank, in der die Datenvolumes das Datenbankverzeichnis und die Initialisierungsschritte abbilden.
  • Die App wird mit dem Node-Dienst konfiguriert, wobei Build das Verzeichnis ist, in dem sich die Docker-Datei befindet; depends_on gibt den abhängigen Container und die Startreihenfolge an. Hier wird zuerst db und dann node gestartet; links gibt die Zuordnung des db-Namens zum App-Container an.
  • Der nginx-Container hängt vom App-Container ab und konfiguriert den Dienst des Weiterleitungsknotens
Version: '3'

Leistungen:
  db:
    Bild: postgres:12.3-alpine
    Containername: postgres
    Umfeld:
      - TZ=Asien/Shanghai
      – POSTGRES_PASSWORD=xxxx
    Bände:
      - ./postgres/data:/var/lib/postgresql/data
      - ./postgres/init:/docker-entrypoint-initdb.d
    Häfen:
      -5432:5432
    Neustart: immer #Immer neu starten, die empfohlene Konfiguration in der Produktionsumgebung ist immer
    exponieren:
      - 5432
      
  App: 
    Bild: koa-pg
    Containername: Koa
    Bände:
      - ./dist:/usr/src/app/dist
      - ./logs:/usr/src/app/logs
    bauen: ./
    Umfeld:
      - TZ=Asien/Shanghai
    Neustart: immer
    hängt ab von:
      -db
    Links:
      -db
    exponieren:
      - 3010
      
  nginx:
    Bild: nginx:1.19.0-alpine
    Containername: nginx
    Bände:
      - ./nginx.conf:/etc/nginx/nginx.conf
    Häfen:
      -8080:80
    Umfeld:
      - TZ=Asien/Shanghai
    Neustart: immer
    hängt ab von:
      - App
    Links: # Hostname statt IP zum Konfigurieren der Nginx-Weiterleitung - App
    exponieren:
      - 8080

Nachdem wir unser Projekt konfiguriert haben, besteht der nächste Schritt darin, es auszuführen

Docker-Compose-Up - Entwicklerhandbuch für Windows

Dies ist auf unserem lokalen Entwicklungscomputer der Fall und auch beim Bereitstellen auf einem Server. Sie können so viele Server bereitstellen, wie Sie möchten. Solange Docker installiert ist, kann dies mit nur einer Befehlszeile gelöst werden.

Um ein paar Container zu starten, ändern Sie die Konfiguration von docker-compose.yml und führen Sie docker-compose up erneut aus. So einfach!

Dies ist das Ende dieses Artikels über die Schritte zum Erstellen und Bereitstellen eines Node-Projekts mit Docker. Weitere Informationen zum Erstellen und Bereitstellen von Node mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So erstellen Sie eine automatisierte Bereitstellungsumgebung für Docker, Jenkins und Node.js von Grund auf

<<:  Detaillierte Erläuterung der häufig verwendeten integrierten Anweisungen von Vue

>>:  Hinweise zum passenden MySql 8.0 und entsprechenden Treiberpaketen

Artikel empfehlen

Einführung in berechnete Eigenschaften in Vue

Inhaltsverzeichnis 1. Was ist eine berechnete Eig...

Der Unterschied und die Verwendung von LocalStorage und SessionStorage in Vue

Inhaltsverzeichnis Was ist LocalStorage Was ist S...

Lernen Sie MySQL-Datenbanken in einer Stunde (Zhang Guo)

Inhaltsverzeichnis 1. Datenbankübersicht 1.1 Entw...

js canvas realisiert Bilder mit abgerundeten Ecken

In diesem Artikel wird der spezifische Code von J...

Entpackte Version der MySQL-Installation und aufgetretene Fehler und Lösungen

1 Installation Laden Sie die entsprechende entpac...

8 Möglichkeiten zum manuellen und automatischen Sichern Ihrer MySQL-Datenbank

MySQL ist ein beliebtes Open-Source-Datenbankverw...

Zabbix benutzerdefinierte Überwachung Nginx Status Implementierungsprozess

Inhaltsverzeichnis Zabbix benutzerdefinierte Über...

So gehen Sie nach der MySQL-Tabellenpartitionierung problemlos online

Inhaltsverzeichnis Zweck der Tabelle Zum Beispiel...

So implementieren Sie eine bidirektionale Bindungsfunktion in vue.js mit reinem JS

Inhaltsverzeichnis Lassen Sie uns zunächst über d...