Mehrere Websites in Docker Container

  • Guten Morgen


    Für ein neues Projekt habe ich mich in den letzten Wochen immer mehr mit Docker beschäftigt. Da ich mehrere Entwicklungsumgebungen benötigt habe mit der selben Seite habe ich das ganze mit Docker gelöst da ich so in wenigen Sekunden jeweils genau die selbe Umgebung wieder neu aufgebaut habe um alles zurück zu setzen.


    Früher oder später müssen die Seiten (aktuell vermehrt Wordpress) natürlich auch wieder ins Internet. Also beschäftige ich mich gerade mit den root Servern bei Netcup.


    Bisher hatte ich es so, dass ich für die Mails einen vServer z.B. mit Mailcow oder einem eigenen E-Mailserver verwendet habe, und einen root Server mit allen Homepages (Keine Verwaltungssoftware). Hier dann je nach Verwendung einfach sicher mit einzelnen Benutzern getrennt. Bei etwas grösseren Projekten war es ein zweiter root Server auf dem dann die nur MariaDB drauf war.


    Durch die Entwicklungsumgebung frage ich mich nun natürlich ob es Sinnvoll wäre einen nginx Container als reverser Proxy laufen zu lassen, und dann als Beispiel mehrere Container für Wordpress (jeweils mit nginx, php, mysql sowie Wordpress), oder so wie bisher in einem anderen Bereich einfach ein Server und alles "zusammen".


    Beim Docker wäre ggf noch die Frage ob man ein extra Container für MariaDB verwendet und dann alle Wordpress auf die selbe Datenbank legt, aber auch etwas ob man dann nicht Mailcow oder den Mailserver als Container ebenfalls auf dem selben Server legt anstelle eines vServers.


    Mir stellt sich nun aber etwas die Frage ob das Sinnvoll ist, und ob es Vorteile bringt (Ausser natürlich während der Entwicklungszeit das ich immer sehr einfach die selbe Umgebung habe). Ich habe dazu schon sehr viel hier im Forum aber auch im Internet gesucht. Die Meinungen gehen hier weit auseinander. Ggf hat ja der ein oder andere Erfahrungen ob es Sinnvoll wäre?

    Was ich bisher gelesen habe dürfte es ja z.B. mit einem RS1000 kein Problem sein mehrere Container zu verwenden. Das haben ja einige hier so gelöst.


    Gruss


    Oliver

  • Rollen wir die Katze mal von hinten auf: bei Docker hast du einen Overhead im I/O und Netzwerkbereich. Die Programme sind abschließend alles nur Prozesse, die durch Kernelmechaniken (C-Groups) von einander getrennt sind.


    Insofern kannst du Docker auch auf einem VPS 200 einsetzen - das erfordert keine große Leistung. Die Wahl es Servers sollte abhängig sein von den Programmen (und deren Anforderungen), die im Container laufen.


    Ich gehe mal davon aus, dass du den nginx auch zur TLS Terminierung nutzen wirst. Das kann man in einem Container machen, allerdings musst du bei Configänderungen und dem Hinzufügen neuer Seiten den Container immer wieder neu aufbauen - je Nachdem, mit welchen Methoden du ihn konfigurierst.

    Hier kann man effizienter arbeiten mit einem nativen nginx, oder sogar Caddy[1] oder traefik[2] - Letzteres hat den Vorteil der automatischen Konfiguration über Docker. Traefik kennt die Container und kann sie so ans Netz bringen.


    Caddy sorgt sich selbst um Let's Encrypt Zertifikate und die Konfiguration braucht nur zwei bis drei Zeilen je Domain / Dienst.


    Bei Datenbanken ist die Frage: willst du dich mit persistent Storage abmühen, willst du den Datenbank Server immer wieder abreißen und neu aufziehen können - oder brauchst du einen Fels in der Brandung. Da stellt sich die Frage wie du persönlich deinen Datenbankserver administrieren möchtest. Ich persönlich halte meine Datenbanken von Docker fern.


    Mit: auf die selbe Datenbank meinst du sicherlich auf den selben Datenbankserver in unterschiedlichen Datenbanken? Ja, bitte. Wenn du je Wordpress einen Datenbankserver hast, hast du am Ende wirklich Overhead. Und ein Datenbankserver ist besser im Backup als 10 Datenbankserver ;)

  • Da ich mehrere Entwicklungsumgebungen benötigt habe mit der selben Seite habe ich das ganze mit Docker gelöst da ich so in wenigen Sekunden jeweils genau die selbe Umgebung wieder neu aufgebaut habe um alles zurück zu setzen.

    Schau dir auch mal Virtuozzo an. Denn bei diesem System hast du diese vom Nutzer H6G beschriebenen folgenden Probleme nicht.

    Das kann man in einem Container machen, allerdings musst du bei Configänderungen und dem Hinzufügen neuer Seiten den Container immer wieder neu aufbauen - je Nachdem, mit welchen Methoden du ihn konfigurierst.

    Bei Datenbanken ist die Frage: willst du dich mit persistent Storage abmühen, willst du den Datenbank Server immer wieder abreißen und neu aufziehen können - oder brauchst du einen Fels in der Brandung.


    Besondere Zusatzoptionen, die der Provider für Nested Virtualisierung noch durchreichen müßte, benötigt man für Virtuozzo - sofern man nur Container verwendet - nicht. Zudem ist dieses System für die private Nutzung kostenlos.


    Ich selber setzte dieses System seit ca. mehr als 10 Jahren ausschließlich für Container auf virtuelle Server, wie sie z.B. vom Provider Netcup angeboten werden, ein und bin damit sehr zufrieden.


    Für Softwareentwickler aus meiner Sicht einer der besten Systeme, welches ich kenne.

  • andreas. verwechselst du gerade App Container mit OS Container? Für OS Container gibt es nämlich lxc und lxd - ich denke das ist besser als mit Virtuozzo zu jonglieren. Docker zielt aber noch in eine andere Richtung.

  • Vielen Dank für eure Antworten.


    Wenn ich Docker verwenden würde hätte ich bisher folgende Idee zusammen gesponnen:


    Auf dem Debian direkt entweder zwei Docker Container für nginx und MariaDB. Hier hätte ich dann für die SSL Zertifikate eventuell Dehydrated verwendet. Aber auch dein Vorschlag muss ich mal anschauen. Wie ich ihn Konfiguriere habe ich mir noch nicht überlegt.

    Hier könnte ich ja mittels eines Shell Scriptes mich immer am nginx Container anmelden, oder die Conf Dateien über ein Mount regeln und den Container neu starten. Aber damit habe ich mich noch zu wenig Beschäftigt da ich noch kein Domain Routing vorgenommen habe sondern alles über ein nginx direkt im Container läuft und ich per IP:Port alles aufrufe.

    Alternativ habe ich überlegt beides direkt auf die Maschine zu packen ohne Docker.


    Dann hätte ich pro Anwendung einen entsprechenden Container meist bestehend aus der Anwendung, PHP und nginx.


    Soweit mal zu meiner Überlegung mit Docker. Wie gesagt ich arbeite erst wenige Wochen damit. Aber mir gefallen einige Aspekte wie schnell man eine Umgebung aufbauen kann. Ich hatte mal ein Projekt wo die User Demo Umgebungen "bestellen" konnten. Dies wäre mit Docker einiges einfacher gewesen. Ebenfalls wären sie isoliert falls die Demo "geknackt" wird das sie nicht sehr weit kommen. Die selbe Überlegung besteht natürlich bei einem WordPress Container da WordPress gerne mal angegriffen wird.


    Gruss


    Oliver

  • Sorry. Habe den Beitrag zu früh abgesendet und kann ihn nicht mehr bearbeiten.


    Ich werde mir sicherlich mal traefik anschauen da ich dort schon mal vor einer weile etwas drüber gelesen habe.

    Mit der Verwaltung habe ich vor einiger Zeit mal eine Anleitung mit "jwilder/nginx-proxy" gesehen, habe es aber relativ schnell wieder verworfen da ich lieber das offizielle Image von nginx vrrwendet hätte was immer aktualisiert wird.

  • Sorry. Habe den Beitrag zu früh abgesendet und kann ihn nicht mehr bearbeiten.


    Ich werde mir sicherlich mal traefik anschauen da ich dort schon mal vor einer weile etwas drüber gelesen habe.

    Mit der Verwaltung habe ich vor einiger Zeit mal eine Anleitung mit "jwilder/nginx-proxy" gesehen, habe es aber relativ schnell wieder verworfen da ich lieber das offizielle Image von nginx vrrwendet hätte was immer aktualisiert wird.

    Ich verwende privat auch das Image von jwilder als reverse proxy, da es eine sehr schöne (automatische!) Integration mit Lets Encrypt gibt. Aktualisiert wird dieses Image moderat oft, dahinter kannst du aber immer noch einen aktuellen nginx betreiben.