Ich verwalte Server, auf denen Benutzer ihre eigenen Websites haben, auf die über FTP zugegriffen werden kann (wie bei einem Hosting-Unternehmen), und anstatt LAMP-Stack-Prozesse zu isolieren, habe ich mich gefragt, ob es möglich ist, Docker zu implementieren und Bilder pro Website zu verwenden.
Soweit ich weiß, können Sie die Docker-Instanz über ihre Ports verfügbar machen. Wenn Sie also zwei Docker-Instanzen auf demselben Server ausführen, müssen Sie zwei verschiedene Ports verfügbar machen.
Ist es aber möglich, nicht Ports, sondern Servernamen zu exportieren, wie:
- www.somewebsite.com: Docker-Instanz 1
- www.otherwebsite.com: Docker-Instanz 2
- www.etc.com: Docker-Instanz ...
Und das auf demselben Server.
Ich dachte darüber nach, nur Apache auf dem Server zu installieren, der die Anforderung basierend auf dem Servernamen an die dedizierte Docker-Instanz umleitet, aber dann müsste ich Apache (erneut!) Und MySQL auf allen Docker-Instanzen installieren.
Ist das möglich und darüber hinaus auch leistungsmäßig (oder gar nicht) interessant?
Danke für deine Hilfe.
Antworten:
Ja, es ist möglich. Sie müssen lediglich mehrere 80 Ports bereitstellen. eine für jede URL. Dies können Sie z. B. mit Virtual Host of Apache tun, das auf dem Docker-Hostserver ausgeführt wird.
Die Apache-Konfigurationsdatei sieht folgendermaßen aus:
quelle
ProxyPreserveHost On
, so dass Sie am Ende nicht viele Links zu local.hostname.ofDockerHost: 12345 auf Ihrer Website haben. Hier sind weitere Informationen, die mir geholfenEs ist möglich. Sie können Apache (oder besser Haproxy, Nginx oder Firnish, das für diese Umleitungsaufgabe effizienter ist als Apache) auf dem Hauptserver verwenden, um zu den Apache-Ports jedes Containers umzuleiten.
Abhängig von den Sites, die Sie dort ausführen (und deren Apache-Konfigurationen), kann es jedoch weitaus mehr Speicher erfordern als die Verwendung eines einzelnen zentralen Apache mit virtuellen Hosts, insbesondere wenn Sie Module (dh PHP) haben, die viel RAM benötigen.
quelle
Ich weiß, dass dies bereits beantwortet wurde, aber ich wollte noch einen Schritt weiter gehen und Ihnen ein Beispiel dafür zeigen, wie dies getan werden könnte, um eine vollständigere Antwort zu geben.
In meinem Docker-Bild finden Sie Anweisungen zur Verwendung. Hier erfahren Sie, wie Sie zwei Sites konfigurieren. Https://hub.docker.com/r/vect0r/httpd-proxy/
Wie Jihun sagte, müssen Sie sicherstellen, dass Sie Ihre vhost-Konfiguration eingestellt haben. In meinem Beispiel wird Port 80 zum Anzeigen einer Testsite example.com und 81 zum Anzeigen der Testsite example2.com verwendet. Es ist auch wichtig zu beachten, dass Sie Ihren Inhalt angeben und erforderliche Ports in Ihrer Docker-Datei verfügbar machen müssen, wie z.
Hoffe, dies hilft, den Prozess ein wenig mehr zu erklären. Für weitere Fragen stehe ich Ihnen gerne zur Verfügung.
Grüße,
V
quelle
In meinem Fall musste ich SSLProxyEngine On , ProxyPreserveHost On und RequestHeader hinzufügen und Front-End-Https auf "On" setzen, da ich SSL für den Docker-Container aktivieren wollte. Über den local.hostname.ofDockerHost lautete in meinem Fall der Name des Hostservers , auf dem der Docker-Container ausgeführt wird, lucas , und der Port, der Port 443 des Docker-Containers zugeordnet ist, war 1443 (da Port 443 bereits von Apache auf dem Host verwendet wurde) Server), so dass die Zeile endete auf diese Weise https: // lucas: 1443 /
Dies ist das endgültige Setup und es funktioniert einwandfrei!
Schließlich musste ich im Docker-Container Proxy-SSL-Header einrichten. In meinem Fall lief auf dem Container Nginx und so etwas wie Omnibus zum Einrichten von Ruby-Apps. Ich denke, dass dies auch in einer Nginx-Konfigurationsdatei eingerichtet werden kann. Ich werde es aufschreiben, falls jemand dies hilfreich findet
Komplette Anleitung für Apache, ISP Config, Ubuntu Server 16.04 hier https://www.howtoforge.com/community/threads/subdomain-or-subfolder-route-requests-to-running-docker-image.73845/#post-347744
quelle