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

Hosten Sie mehrere Websites in Docker-Containern

Docker ist eine äußerst nützliche Plattform, die es Entwicklern ermöglicht, Anwendungen einfach zu entwickeln und bereitzustellen. In diesem Artikel sehen wir uns an, wie Sie Docker-Container verwenden, um mehrere Websites auf einem einzigen Server zu hosten. Einer der wichtigsten Vorteile der Verwendung von Docker-Containern besteht darin, dass sie leichtgewichtig, schneller und einfacher zu verwalten sind.

Diesen Monat habe ich zwei meiner benutzerdefinierten Anwendungen von zwei separaten Servern auf einen einzigen Server verschoben, jeder in seinem eigenen Docker-Container. Es ist einfacher, beide Anwendungen zu verwalten, und es hat auch meine Produktionskosten gesenkt.

Jede Anwendung wird in ihrer eigenen sicheren Umgebung eingerichtet und ist über einen Domänennamen zugänglich. Bevor wir zu den Anweisungen übergehen, lassen Sie uns kurz besprechen, wie es funktionieren wird und welche Werkzeuge wir benötigen, um alles einzurichten. Fangen wir also an.

Was wollen wir einrichten?

Wir möchten Docker-Container verwenden, um einen einzelnen Server einzurichten, der mehrere Anwendungen oder Websites bedienen kann. Wenn ein Benutzer eine URL für eine der gehosteten Websites anfordert, sollte der Hauptserver die Anforderung an den Container weiterleiten, der dann den Inhalt bereitstellen sollte.

Dazu müssen wir einen Server einrichten. Ich habe für diesen Artikel einen Server mit einer statischen IP-Adresse eingerichtet. Sehen Sie sich MassiveGRID, DigitalOcean oder Vultr an, wenn Sie nach einem guten Cloud-Hosting-Service suchen.

Zweitens erstellen wir einen Proxy, um Benutzeranfragen an die entsprechenden Container weiterzuleiten. Es gibt viele Tools für diesen Zweck, aber ich werde nginx-proxy verwenden, weil es extrem einfach einzurichten ist und fast alle Funktionen hat, die wir benötigen. Schließlich verwenden wir Cloudflare als DNS-Manager, um den Domainnamen auf den Hostserver (IP-Adresse) zu verweisen.

Ich empfehle auch die Verwendung von Portainer, einer benutzerfreundlichen grafischen Oberfläche zum Verwalten von Docker-Containern. Um Portainer einzurichten, folgen Sie bitte dieser Anleitung.

Sobald Ihr Server betriebsbereit ist, ssh in den Server und aktualisieren Sie ihn.

ssh [email protected]

Wenn Sie den ssh-Schlüssel zum Anmelden eingerichtet haben, verwenden Sie bitte die Option -i option in the ssh command to log in mit dem privaten ssh-Schlüssel.

ssh -i path-to-ssh-key [email protected]

Server vorbereiten

Auf dem Host-Rechner führe ich Ubuntu 20.04 aus. Die Anweisungen sind die gleichen, unabhängig davon, ob Sie Debian oder eine andere Debian-basierte Distribution verwenden. Für jede andere Distribution unterscheiden sich nur die Anweisungen zum Konfigurieren von Docker, und alles andere bleibt gleich. Bitte folgen Sie dieser Anleitung, um Docker auf Ubuntu zu installieren.

SSL-Zertifikat mit nginx-proxy verwenden

Der zweite Schritt besteht darin, ein Verzeichnis zu erstellen, in dem die SSL-Zertifikate und -Schlüssel für jede Domain gespeichert werden. Erstellen Sie auf dem Hostserver ein Verzeichnis im Verzeichnis /etc/. Sie können dieses Verzeichnis beliebig benennen. Für diesen Artikel nenne ich es Cloudflare.

mkdir /etc/cloudflare

Später werden wir dieses Verzeichnis mit nginx-proxy binden, um auf SSL-Zertifikate und Schlüssel für jeden Domänennamen zuzugreifen.

Docker-Netzwerk erstellen

Wir werden auch ein virtuelles Netzwerk erstellen, mit dem sich jeder Docker-Container, einschließlich nginx-proxy, verbindet.

docker network create nginx-proxy

nginx-proxy einrichten

Wenn wir möchten, können wir einen Proxy erstellen, um mit solchen Situationen fertig zu werden. Glücklicherweise haben die nginx-Entwickler ein vollständiges Docker-Image erstellt, das alle Container verfolgt und aktualisiert, sobald ein neuer Container erstellt wird. Um einen nginx-proxy-Docker (unter Berücksichtigung von SSL) zu erstellen, führen Sie bitte den folgenden Befehl aus –

docker run -d –name nginx-proxy -p 80:80 -p 443:443 –net nginx-proxy -v /etc/cloudflare:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro nginxproxy/nginx-proxy

Lassen Sie uns den obigen Befehl Schritt für Schritt aufschlüsseln.

  • laufen – Diese Option erstellt den Container.
  • -d – Es aktiviert den Debug-Modus. Falls etwas schief geht, werden nützliche Informationen ausgegeben, um das Problem zu finden.
  • –Name – Der Name des Containers.
  • -p 80:80 – Es ist extrem wichtig. Der Parameter -p bindet den Host-Port an den Container-Port. Auf der linken Seite von 80:80 ist der Hostport und umgekehrt.
  • –net – Verbindet neu erstellte Container mit dem nginx-proxy-Netzwerk.
  • -v /etc/cloudflare:/etc/nginx/certs – Notwendig, wenn Sie SSL auf Ihren Websites verwenden. Binden des Hostverzeichnisses an das Verzeichnis des nginx-proxy-Containers, in dem die SSL-Zertifikate und -Schlüssel gespeichert werden.
  • -v /var/run/docker.sock:/tmp/docker.sock:ro – Docker-Socket mit dem Container verbinden, um mit dem Docker-Daemon zu kommunizieren.
  • nginxproxy/nginx-proxy – Die Adresse des nginx-proxy-Docker-Images, das auf hub.docker.com gehostet wird.

Wir haben das größte Rätsel des Spiels gelöst, sobald Sie den nginx-proxy-Container erstellt haben. Es war sehr einfach. Recht? Das alles ist dem nginx-proxy-Image zu verdanken; Andernfalls müssten wir alles manuell erledigen.

Container mit VIRTUAL_HOST-Umgebungsvariable erstellen

Die Umgebungsvariable VIRTUAL HOST wird von nginx-proxy verwendet, um zu bestimmen, welche Domain auf welchen Server verweisen soll. Jedes Mal, wenn Sie einen neuen Container erstellen, setzen Sie den Wert der VIRTUAL HOST-Variablen auf den Domänennamen, der auf diesen Container verweisen soll.

docker run -it -d --name gaminggroup.online -h gaminggroup.online --expose 80 --net nginx-proxy -e VIRTUAL_HOST=gaminggroup.online -e VIRTUAL_HOST=www.gaminggroup.online httpd

Lassen Sie uns den obigen Befehl Schritt für Schritt aufschlüsseln.

  • -h – setzt den vollqualifizierten Domainnamen (set the domain name)
  • –aussetzen – Gibt den Port 80 frei, um HTTP-Datenverkehr zuzulassen
  • –net – Verbinden Sie den neu erstellten Container mit dem nginx-proxy-Netzwerk
  • VIRTUAL_HOST=domain.xyz – Die Variable VIRTUAL_HOST wird von nginx-proxy verwendet, um Benutzeranfragen an ihre jeweiligen Container umzuleiten
  • httpd – Apache-Server-Image vom Docker-Hub ziehen

Der obige Befehl startet den Container mit dem beliebten Webserver Apache. Jede Anfrage, die den Hostserver erreicht, wird an den nginx-proxy umgeleitet, der sie dann an den Port 80 dieses Containers weiterleitet .

Domain auf den Server verweisen

Konfigurieren Sie abschließend den Domänennamen so, dass er auf den Hostserver verweist. Erstellen Sie einen A-Eintrag mit dem Namen „@“ und IPv4 als IP-Adresse des Hostservers. Warten Sie eine Weile, nachdem Sie fertig sind. Die DNS-Propagierung kann zwischen einigen Minuten und mehreren Stunden dauern.

Sobald die DNS-Propagierung abgeschlossen ist, zeigt Ihr Domänenname auf den neu erstellten Container, der den Apache-Webserver hostet. Jetzt ist alles eingerichtet. Sie müssen lediglich weiterhin Container mit der Variablen VIRTUAL_HOST erstellen, und nginx-proxy leitet den Datenverkehr ordnungsgemäß an den Container um.

SSL/HTTPS in Docker verwenden

Da die meisten von uns Inhalte lieber über HTTPS als über unsicheres HTTP bereitstellen, kann nginx-proxy problemlos damit umgehen. Den Parameter -v haben wir bereits mit dem Verzeichnis /etc/cloudflare übergeben wenn wir den nginx-proxy einrichten Container. Dieses Verzeichnis ist mit dem nginx-proxy verknüpft Verzeichnis /etc/nginx/certs .

Jedes SSL-Zertifikat und jeder Schlüssel müssen in /etc/cloudflare gespeichert werden mit dem richtigen Namen. Die SSL-Zertifikate und -Schlüssel sollten entsprechend dem Domänennamen umbenannt werden, für den sie bestimmt sind. Beispielsweise für den Domänennamen example.com , muss das SSL-Zertifikat in example.com.crt umbenannt werden und der Schlüssel muss example.com.key sein .

Fazit

Die Verwendung von nginx-proxy hat den Prozess stark vereinfacht. Stellen Sie einfach einen Container bereit, der alles andere erledigt. Danach können Sie beliebig viele Container bereitstellen, ohne sich um zu viele Konfigurationsdateien kümmern zu müssen. Container sind leichtgewichtig, aber wenn der Datenverkehr/die Arbeitslast zunimmt, werden mehr Ressourcen benötigt.

Wenn Sie Schwierigkeiten haben, die obigen Schritte auszuführen, lassen Sie es mich im Befehlsabschnitt unten wissen oder treten Sie unserem Discord-Server bei, um schnelle Hilfe zu erhalten.


Docker
  1. So konfigurieren Sie mehrere Websites mit dem Apache-Webserver

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

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

  4. So verwenden Sie Docker Compose

  5. So verbinden Sie Docker-Container

So verwenden Sie Docker Cp zum Kopieren von Dateien zwischen Host und Containern

So führen Sie Docker-Container aus

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So installieren Sie mehrere Discourse-Container auf demselben Server

Hosten Sie mehrere Websites auf einem einzigen Server mit Apache unter Ubuntu 18.04