So führen Sie NGINX Inside Docker aus (für einfache automatische Skalierung)

Eine der häufigsten Workloads von Docker ist die Containerisierung von Webservern wie NGINX und Apache, um eine leistungsstarke Flotte zur Bereitstellung von Inhalten zu betreiben, die einfach automatisch skaliert und verwaltet werden kann. Wir zeigen Ihnen, wie Sie es mit NGINX einrichten.

NGINX Inside Docker einrichten

Docker ist eine Containerisierungsplattform, die verwendet wird, um Ihre Anwendung und den gesamten Code in einem einfach zu verwaltenden Container-Image zu packen. Der Vorgang ist ziemlich ähnlich wie beim Einrichten eines neuen Servers—der Container ist ein leeres Blatt, daher müssen Sie Abhängigkeiten installieren, Ihren Code erstellen und über die Erstellen Sie Artefakte und kopieren Sie jede Konfiguration. Zum Glück müssen Sie nicht so viel automatisieren. NGINX verfügt bereits über einen öffentlich verfügbaren Docker-Container, den Sie als Ausgangspunkt für Ihre Anwendung verwenden können.

Je nach Anwendung, die Sie containerisieren, kann dies natürlich etwas aufwändiger sein. Wenn Sie ein CMS wie WordPress bereitstellen, benötigen Sie wahrscheinlich eine externe Datenbank, da Container nicht auf Dauerhaftigkeit ausgelegt sind. Ein guter Ausgangspunkt für WordPress wäre insbesondere der Docker-Container von WordPress.

Um etwas mehr als eine einfache Hello-World-Webseite zu haben, werden wir ’ Erstellen Sie ein neues Projektverzeichnis und initialisieren Sie eine grundlegende Vue.js-Anwendung. Ihre Konfiguration unterscheidet sich je nach Inhalt, den Sie bereitstellen, aber die allgemeine Idee ist dieselbe.

Erstellen Sie im Stammverzeichnis Ihres Projekts eine neue Datei mit dem einfachen Namen Dockerfile ohne Erweiterung. Dies dient als Build-Konfiguration. Standardmäßig ist der Container leer und enthält nur die Anwendungen und Abhängigkeiten, die mit dem Basisimage installiert werden. Sie müssen den Code Ihrer Anwendung kopieren. Wenn Sie nur statische Inhalte bereitstellen, ist dies einfach, aber wenn Sie mit serverseitigen Anwendungen wie WordPress arbeiten, müssen Sie möglicherweise zusätzliche Abhängigkeiten installieren.

Werbung

Die folgende Konfiguration ist ziemlich einfach. Da es sich um eine Knotenanwendung handelt, müssen wir npm run build ausführen, um einen verteilungsbereiten Build zu erhalten. Wir können dies alles im Dockerfile handhaben, indem wir einen zweiteiligen Container-Build einrichten:

FROM node:latest as build-stage WORKDIR /src COPY package*.json ./RUN npm install COPY ./. RUN npm Build FROM nginx als Produktionsphase ausführen RUN mkdir /src COPY –from=build-stage /src/dist /src COPY nginx.conf /etc/nginx/nginx.conf

Der FROM-Befehl der ersten Zeile ruft den Knotencontainer aus Docker Hub ab und erstellt einen neuen Container namens build-stage. Die nächste CD in dieses Verzeichnis und kopiert die package.json. Dann führt es npm install aus, kopiert dann den Code der App und startet den Build-Prozess. Wenn Ihre Anwendung aus dem Quellcode erstellt werden muss, sollten Sie etwas Ähnliches tun.

Der nächste Status ruft den nginx-Container ab, um als Produktionsbereitstellung zu dienen. Es erstellt das src-Verzeichnis und kopiert dann aus dem Build-Stage-Container den Ordner /src/dist/, der die Build-Artefakte enthält, in den /src-Ordner des Produktionscontainers. Anschließend wird eine NGINX-Konfigurationsdatei kopiert.

Sie möchten auch eine neue Datei namens .dockerignore erstellen, um Node_modules sowie alle Build-Artefakte von lokalen Builds zu ignorieren.

**/node_modules **/dist

Das Dockerfile verweist auf eine nginx.conf, die Sie ebenfalls erstellen müssen. Wenn Sie eine komplexere Konfiguration mit mehreren Konfigurationen in /sites-available ausführen, möchten Sie möglicherweise einen neuen Ordner für Ihre NGINX-Konfiguration erstellen und diesen kopieren.

Benutzer nginx; worker_processes 1; error_log /var/log/nginx/error.log warnen; pid /var/run/nginx.pid; Ereignisse {worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr – $remote_user [$time_local] “$request” ' '$status $body_bytes_sent “$http_referer” ' '”$http_user_agent” “$http_x_forwarded_for”'; access_log /var/log/nginx/access.log main; sendfile an; keepalive_timeout 65; Server { hören 80; server_name localhost; Standort/{ root /src; index.html; try_files $uri $uri//index.html; } error_page 500 502 503 504 /50x.html; Standort = /50x.html { root /usr/share/nginx/html; } } }

Dies ist nur ein HTTP-Webserver. Die einfachste Möglichkeit, HTTPS einzurichten, besteht darin, den certbot von LetsEncrypt lokal auszuführen und das Zertifikat von /etc/letsencrypt/live/example.com/fullchain.pem in den Produktionscontainer zu kopieren. Diese Zertifikate sind 90 Tage lang gültig und müssen daher regelmäßig erneuert werden. Sie können dies als Teil des Container-Build-Prozesses automatisieren.

Werbung

Sobald alles in Ordnung ist, können Sie den Docker-Build ausführen:

docker build . -t my-app

Dadurch wird der Container als my-app erstellt. Anschließend können Sie ihn mit Tags versehen und an ECS oder eine Container-Registry zur späteren Bereitstellung senden. Sie sollten es natürlich zuerst lokal testen, indem docker run binding localhost:8080 an Port 80 der NGINX-Instanz bindet:

docker run -d -p 8080:80 my-app

Sobald Sie ein erstelltes Image haben , ist die Bereitstellung in der Produktion ziemlich einfach. Sie können unseren Leitfaden zum Einrichten einer automatisch skalierenden Containerbereitstellung auf AWS ECS lesen, um mehr zu erfahren, oder unseren Leitfaden zum Einrichten einer CI/CD-Pipeline mit Containern lesen, um automatisierte Builds und Bereitstellungen zu verarbeiten.

< strong>VERWANDTE: Was ist eine PEM-Datei und wie wird sie verwendet?


Posted

in

by

Tags: