GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So führen Sie NGINX in 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 Content-Delivery-Flotte auszuführen, die einfach automatisch skaliert und verwaltet werden kann. Wir zeigen Ihnen, wie Sie es mit NGINX einrichten.

Einrichten von NGINX in Docker

Docker ist eine Containerisierungsplattform, die verwendet wird, um Ihre Anwendung und ihren gesamten Code in ein einfach zu verwaltendes Container-Image zu packen. Der Prozess dafür ist ziemlich ähnlich wie beim Einrichten eines neuen Servers – der Container ist ein unbeschriebenes Blatt, also müssen Sie Abhängigkeiten installieren, Ihren Code erstellen, die Build-Artefakte kopieren und wieder kopieren jede Konfiguration. Glücklicherweise 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.

Abhängig von der Anwendung, die Sie containerisieren, kann dies natürlich etwas komplizierter sein. Wenn Sie ein CMS wie WordPress bereitstellen, benötigen Sie wahrscheinlich eine externe Datenbank, da Container nicht darauf ausgelegt sind, dauerhaft zu sein. Ein guter Ausgangspunkt für WordPress wäre insbesondere der Docker-Container von WordPress.

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

Erstellen Sie im Stammverzeichnis Ihres Projekts eine neue Datei mit dem einfachen Namen Dockerfile ohne Verlängerung. Dies fungiert 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.

Die folgende Konfiguration ist ziemlich einfach. Da dies eine Knotenanwendung ist, müssen wir npm run build ausführen um einen vertriebsfertigen Build zu erhalten. Wir können das 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 run build

FROM nginx as production-stage
RUN mkdir /src
COPY --from=build-stage /src/dist /src
COPY nginx.conf /etc/nginx/nginx.conf

Die erste Zeile ist FROM Befehl zieht den node Container von Docker Hub und erstellt einen neuen Container namens build-stage . Die nächste cd ’s in dieses Verzeichnis und kopiert die package.json . Dann wird npm install ausgeführt , 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 Zustand zieht den nginx Container, der als Produktionsbereitstellung dienen soll. Es macht den src Verzeichnis und kopiert dann aus der build-stage Container, der /src/dist/ Ordner, der die Build-Artefakte enthält, in den Ordner /src Ordner des Produktionscontainers. Es kopiert dann eine NGINX-Konfigurationsdatei.

Sie sollten auch eine neue Datei mit dem Namen .dockerignore erstellen , um es anzuweisen, node_modules zu ignorieren sowie alle Build-Artefakte von lokalen Builds.

**/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 vielleicht einen neuen Ordner für Ihre NGINX-Konfiguration erstellen und diesen hinüber kopieren.

user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
  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        on;
  keepalive_timeout  65;
  server {
    listen       80;
    server_name  localhost;
    location / {
      root   /src;
      index  index.html;
      try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   /usr/share/nginx/html;
    }
  }
}

Dies ist nur ein HTTP-Webserver. Der einfachste Weg, HTTPS einzurichten, wäre, den certbot von LetsEncrypt lokal auszuführen und das Zertifikat von /etc/letsencrypt/live/example.com/fullchain.pem zu kopieren in den Produktionscontainer. Diese Zertifikate sind 90 Tage gültig, Sie müssen sie also regelmäßig erneuern. Sie können dies als Teil des Containererstellungsprozesses automatisieren.

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 , danach können Sie es frei taggen und zur späteren Bereitstellung an ECS oder eine Containerregistrierung senden. Sie sollten es natürlich zuerst lokal mit docker run testen Bindung localhost:8080 an Port 80 der NGINX-Instanz:

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 Containerbereitstellung mit automatischer Skalierung 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 handhaben.

VERBINDUNG: Was ist eine PEM-Datei und wie wird sie verwendet?


Docker
  1. Wie führe ich ein Programm in einem Docker-Container aus?

  2. So stellen Sie Microservices mit Docker bereit

  3. So verwenden Sie ein Dockerfile zum Erstellen eines Docker-Images

  4. So stellen Sie einen Nginx-Container mit Docker auf Linode bereit

  5. So führen Sie MySQL in einem Docker-Container aus

So führen Sie eine .NET-App in Docker aus

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

So führen Sie PHPMyAdmin in einem Docker-Container aus

So führen Sie Grafana in einem Docker-Container aus

So erstellen Sie Docker-Images in einer GitLab-CI-Pipeline

So führen Sie Docker-Container aus