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

Stellen Sie NGINX auf Docker bereit und erhöhen Sie die Serverkapazitäten

Die Containerisierung von Webserver-Workloads wie NGINX ist in der modernen IT-Branche üblich geworden. NGINX macht einen perfekten Container-Workflow und die Verbindung von NGINX mit Docker ist eine vollkommen logische Aufgabe.

In diesem Tutorial erfahren Sie, wie Sie einen neuen NGINX-on-Docker-Container bereitstellen, der auf einem beliebigen Betriebssystem wie Windows, macOS oder Linux ausgeführt wird!

Voraussetzungen

Um diesem Tutorial zu folgen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Docker Desktop – Dieses Tutorial verwendet Version 3.5.1.
  • Windows 10 – Das Tutorial verwendet Windows, um Docker auszuführen, aber die gleichen allgemeinen Schritte können auch auf Linux oder macOS angewendet werden.
  • Die Docker-Engine, wenn Sie Linux verwenden.

Bereitstellung eines NGINX auf einem Docker-Container

Beginnen wir damit, zunächst ein Linux-Docker-Image mit bereits installiertem NGINX zu erstellen. Dieses Tutorial verwendet eine minimale Linux-Distribution namens Alpine Linux, auf der die neueste verfügbare NGINX-Version ausgeführt wird, die in diesem Tutorial 1.21.1 ist.

1. Öffnen Sie zunächst eine Terminalsitzung, in der Sie alle erforderlichen Docker-Befehle ausführen.

2. Führen Sie den docker pull aus Befehl zum Abrufen oder pull , das neueste nginx image aus dem NGINX Docker Hub-Repository mit dem mainlin-alpine Zweig. Der Docker Hub ist ein Open-Source-Repository von Docker-Images, das Docker-Benutzern zur Verfügung steht.

docker pull nginx:mainline-alpine

Das Abrufen des neuesten Images eignet sich hervorragend für Entwicklung und Tests, aber es ist oft eine bewährte Produktionspraxis, eine bestimmte Version wie docker pull nginx:1.21.0-alpine anzugeben .

3. Führen Sie als Nächstes docker run aus Befehl zum Ausführen eines Containers aus nginx:mainline-alpine Bild.

  • -i – Dieser Parameter fordert eine interaktive Konsole an, die interne Containerausgaben an das Terminal zurückgibt.
  • -t – Hier fordern Sie eine Pseudo-TTY-Konsole zum laufenden Container an, die die Verwendung des Tastaturbefehls ctrl-c ermöglicht um den interaktiven Container zu verlassen.
  • --name – Der Name dieses Containerlaufs muss für jeden neuen Container eindeutig sein (es sei denn, vorherige Container mit demselben Namen werden entfernt).
  • -p – Welcher interne zu externem Port soll verwendet werden, was in diesem Fall der interne Port von 80 ist sollte dem externen Port von 80 zugeordnet werden .
  • „Image-Name“ – Aus welchem ​​Docker-Image der Container bereitgestellt werden soll, in diesem Fall das zuvor abgerufene nginx:mainline-alpine Bild.
docker run -i -t --name nginx-mainline -p 80:80 nginx:mainline-alpine

4. Navigieren Sie in einem Webbrowser zum ausgeführten Docker-Container, indem Sie zu http://localhost gehen . Bei Erfolg wird die standardmäßige NGINX-Willkommensseite angezeigt. Da Sie im vorherigen Schritt den Container gestartet haben, der den externen Port 80 dem Port 80 des Containers zuordnet (-p 80:80 ), sollte NGINX verfügbar sein.

5. Öffnen Sie abschließend wieder Ihre Kommandozeilenkonsole und drücken Sie die Tastenkombination ctrl-c um den laufenden Container zu verlassen. Sie haben noch einiges zu tun!

Website-Dateien einem Container zuordnen

An dieser Stelle können Sie ganz einfach einen NGINX-Docker-Container mit der Beispiel-Webseite aufrufen. Sie müssen jetzt Ihre benutzerdefinierte Website auf NGINX hochladen. Da Container unveränderlich sind und alle Änderungen an ihnen gelöscht werden, wenn sie neu erstellt werden, müssen Sie eine Websitequelle außerhalb des Docker-Images angeben.

Der unter Linux laufende NGINX-Webserver speichert Website-Dateien in /usr/share/nginx/html Verzeichnis. Anstatt Dateien direkt in dieses Verzeichnis hochzuladen, sollten Sie diesem Speicherort einen Speicherort zuordnen, damit der Container diese Dateien beim Booten aus dem Speicherort zieht.

Auf Ihrem lokalen Host-Betriebssystem:

1. Erstellen Sie zunächst ein Verzeichnis, das dem NGINX-Docker-Container zugeordnet werden soll. In diesem Beispiel C:\Artikel\NGINX wird zur Zuordnung zu /usr/share/nginx/html. verwendet

2. Erstellen Sie im neu erstellten Verzeichnis eine Datei index.html , die Folgendes enthält. Diese Datei ist die Datei, die NGINX beim Navigieren zur Website bereitstellt.

<html>
    <head></head>
    <body>
        <h1>ATA Test!</h1>
        <p>Welcome to your custom NGINX index file.</p>
    </body>
</html>

3. Rufen Sie als Nächstes in der Befehlszeile docker run auf mit fast denselben Parametern wie Schritt drei im vorherigen Abschnitt. Aber schließen Sie dieses Mal den Lautstärkeparameter -v ein Wie nachfolgend dargestellt.

Im Beispiel unten ist das -v -Parameter bildet das lokale C:\Articles\NGINX ab in das Verzeichnis /usr/share/nginx/html des Images Verzeichnis. Wenn Sie diese Zuordnung erstellen, können Sie den Inhalt von /usr/share/nginx/html ändern container-Verzeichnis, indem Sie den Inhalt von C:\Articles\NGINX ändern Verzeichnis.

Dies zeigt einen Windows-Dateispeicherort, aber dieser Befehl funktioniert genauso unter Linux. Beispiel:-v /usr/share/myfiles:/usr/share/nginx/html .

docker run -i -t -v c:\Articles\NGINX:/usr/share/nginx/html --name nginx-mainline -p 80:80 nginx:mainline-alpine

4. Öffnen Sie abschließend einen Webbrowser und navigieren Sie zu http://localhost . Basierend auf der neu erstellten index.html wird Folgendes angezeigt Datei, da es jetzt Dateien aus dem lokalen C:\Articles\NGINX zieht Verzeichnis.

Ausführen einer PHP-FPM-Anwendung mit einem Docker-NGINX-Container

Inzwischen können Sie einen NGINX-Docker-Container aufrufen und den Inhalt einer Website einfach ändern. Wenn Sie ein super einfaches Setup benötigen, könnte dies funktionieren. Wenn Sie jedoch vorhaben, eine Webanwendung auf NGINX auszuführen, müssen Sie etwas mehr Arbeit leisten.

Lassen Sie uns als Beispiel das soeben erstellte NGINX-Image aktivieren, um die beliebte Web-Skriptsprache PHP mit PHP FastCGI Process Manager (FPM) auszuführen.

Für diesen Abschnitt müssen mehrere neue Konzepte eingeführt werden. Um auf einfache Weise eine Reihe von Containern und deren Verknüpfungen zu definieren, verwenden Sie am besten eine Docker-Compose-Datei. Docker Compose definiert die Reihe von Diensten und zugehörigen Anwendungen in einer YAML-Datei (Yet Another Markup Language).

Da Sie außerdem eine benutzerdefinierte Konfigurationsdatei für die Standard-Site kopieren müssen, in den NGINX-Container, eine benutzerdefinierte Version von nginx:mainline-alpine Bild wird benötigt. Um ein vorhandenes Image zu erweitern, ein dockerfile wird mit dem build verwendet und gebaut step in der Docker Compose-Datei.

1. Erstellen Sie ein Verzeichnis für Ihre Konfigurationsdateien. In diesem Beispiel das Verzeichnis C:\Articles\NGINXPHP verwendet wird.

2. Erstellen Sie zuerst die Datei dockerfile , mit folgendem Inhalt.

# The image to pull the base configuration from
FROM nginx:mainline-alpine
# The directory where any additional files will be referenced
WORKDIR C:\Articles\NGINXPHP
# Copy the custom default.conf from the WORKDIR (.) and overwrite the existing internal configuration in the NGINX container
COPY ./default.conf /etc/nginx/conf.d/default.conf

3. Als nächstes erstellen Sie die Datei docker-compose.yml Datei, die Folgendes enthält.

# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
  # The NGINX custom container
  web:
    # Instead of referencing image: nginx:mainline-alpine here, use build to
    # reference the current directory (.), which will look for a dockerfile
    # by default
    build: .
    # The external directory location to map to an internal location
    volumes:
      - C:\Articles\NGINXPHP:/usr/share/nginx/html
    # The external port mapping to internal port mapping
    ports:
      - "80:80"
  php:
    image: php:fpm-alpine
    # It is important that both containers can reference the same files
    volumes:
      - C:\Articles\NGINXPHP:/usr/share/nginx/html

4. Erstellen Sie abschließend die NGINX-Konfigurationsdatei default.conf , mit den folgenden.

server {
    # The port to listen on
    listen 80;
    # The root directory, which must exactly match the internal volume share
    root /usr/share/nginx/html;

    # For all files with the PHP extension run the following
    location ~ ^/.+\.php(/|$) {
        # Pass the request to the host "php" and port 9000 (default PHP-FPM port)
        fastcgi_pass  php:9000;
	# Include the default NGINX FastCGI Parameters
        include       fastcgi_params;
	# Define one additional parameter telling PHP-FPM where to find the file
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Sie fragen sich vielleicht, woher „PHP“ für den Hostnamen kommt. Standardmäßig wird ein von allen im Dienst enthaltenen Anwendungen gemeinsam genutztes Netzwerk unter Verwendung des Namens des übergeordneten Verzeichnisses erstellt. Jedem Container wird ein Hostname zugewiesen, der dem Anwendungsnamen entspricht. In diesem Beispiel ist das Netzwerk nginxphp und die Hostnamen sind web und php .

5. Navigieren Sie in einer Terminalsitzung zum Verzeichnis Ihrer benutzerdefinierten Docker-Konfigurationsdatei, in diesem Beispiel C:\Articles\NGINXPHP . Führen Sie den Befehl docker-compose up aus um Ihren benutzerdefinierten Dienst zu generieren und zu starten.

6. Jetzt, da die Gruppe von Containern eingerichtet ist und ausgeführt wird, benötigen Sie eine PHP-Datei, um die Konfiguration zu testen. Erstellen Sie die Datei index.php , in Ihrem gemeinsam genutzten NGINX-Docker-Verzeichnis, das C:\Articles\NGINXPHP ist in diesem Tutorial.

<?php phpinfo(); ?>

7. Öffnen Sie einen Webbrowser und navigieren Sie zu http://localhost/index.php, um zu überprüfen, ob die PHP-Datei richtig angezeigt wird.

Fazit

Docker NGINX-Container sind unglaublich nützlich für Tests und Entwicklung. Mit der richtigen Pflege und Aufmerksamkeit können Docker-Container auch dazu beitragen, die Leistungsfähigkeit eines Produktions-Webservers erheblich zu steigern!

Nachdem Sie nun erfolgreich einen NGINX-Container und einen verknüpften PHP-FPM-Container bereitgestellt haben, versuchen Sie, einen Datenbankcontainer in die Mischung für eine vollständige Webanwendungsumgebung einzufügen.


Docker
  1. Docker-Image des Nginx-Webservers basierend auf Debian GNU/Linux

  2. Überwachen Sie den Linux-Server mit Prometheus und Grafana

  3. So installieren und hosten Sie einen OpenVPN-Server mit Docker

  4. Was ist Docker (und Linux-Container?)

  5. So packen und übertragen Sie Docker-Images von einem Server auf einen anderen

Tipps und Tricks zum Sichern Ihres Nginx-Webservers

So installieren Sie Docker in Ubuntu 20.04 und führen den Nginx-Container aus

Erstellen Sie einen NGINX-Reverse-Proxy in Docker und lernen Sie 1 neue Fähigkeit!

25 Muss Nginx-Befehle für Entwickler und Administratoren kennen

.NET Core und Docker

.NET und Docker