Container - Hilfestellung für Anfänger

  • Hallo zusammen,


    ich habe mir vor kurzem ein neues NAS gekauft, da ich endlich ecoDMS und nextcloud darauf laufen lassen will (also nur lokal in meinem Netzwerk). Nun scheint es mit der Docker-Container-Geschichte doch nicht so einfach zu sein, auch wenn ich hier irgendwo gelesen habe, das dies auch kein Hexenwerk ist. Ich würde mich freuen, wenn ihr mir diesbezüglich weiterhelfen könnt, zumindest raucht mein Kopf gerade.


    Vorbetrachtung:

    • Scheinbar kann man einen einmal eingerichteten Container nicht einfach aktualisieren. Wenn es z.B. zu nextcloud eine neue Version gibt, muss ich den Container löschen und neu aufsetzen. Deswegen sollte man versuchen sämtliche Daten, auf die das Was-auch-immer (wie z.B. nextcloud) zugreift, vom Container selbst zu entkoppeln. Mit etwas Glück braucht man beim neuen Container nur die alten Einstellungen zu übernehmen. Richtig? Nach linuxserver.io wär es angeblich geplant, dass man auch Container updaten kann, allerdings ist der Eintrag über 4 Jahre alt X/
    • Der Container ist nicht automatisch nach außen hin erreichbar, so würde nextcloud über der ihr zugewiesenen IP und den dann entsprechenden Ports die jeweiligen Dienste anbieten, die man sozusagen aus dem Container weiterleiten muss. Passt das so von der Umschreibung?

    Vorgehen:

    Ich möchte z.B. nextcloud installieren, in Container Station ausgesucht (bei Docker Hub gelandet) und (was ich jetzt auch gelernt habe) nicht gleich auf installieren klicken, sondern auf den Namen, womit ich zu https://hub.docker.com/_/nextcloud weitergeleitet werde. Von dort bekomme ich dann (hoffentlich) alle benötigten Informationen, was ich alles brauche und was ich einrichten muss.

    1. Befehl, hier hatte ich zuerst gedacht, dass es sich um eine zu startende ausführbare Datei handelt, aber nach bmc.com werden nur Argumente/Parameter angegeben. tutorialspoint.com sieht es ähnlich, obwohl bei der Syntax explitzit von "command" geschrieben wird und der echo-Befehl als Beispiel herhalten muss. Verwirrend, jedenfalls stand bei ecodms im Installations-Handbuch der entsprechende Befehl dankenswertweise drinne, aber wie sieht es bei nextcloud aus? In der eben verlinkten Doku steht bei der fpm-Variante $ docker run -d nextcloud:fpm, wäre somit nextcloud:fpm der gesuchte Befehl? Aber ich habe dann dennoch nicht verstanden, wie man bei z.B. MariaDB laut [Howto] MariaDB + phpMyAdmin im Docker-Container auf den Befehl (oder sollte ich eher Argument schreiben?) mysqld kommt.
    2. Eingangspunkt, hier kann demnach eine entsprechende ausführbare Datei angegeben werden, welche beim Containter-Start gestartet werden soll. Da habe ich in dem Artikel [Howto] MariaDB + phpMyAdmin im Docker-Container auch nicht verstanden, wie man darauf kommt. Woher erhält man die Information?
    3. Erweitere Einstellungen - Umgebung: Hier kommen alle Informationen hin, die für den ordentlichen Betrieb gebraucht werden, wie Zugangsdaten oder Konfigurationen. Bei z.B. https://hub.docker.com/_/nextcloud/ findet man in der Dokumentation "Auto configuration via environment variables", hier stehen demnach alle Variablen, die ich übernehmen muss, oder? Bei der MariaDB-Variante wären es somit MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD und MYSQL_HOST Oder fehlt etwas?
    4. Erweiterte Einstellungen - Netzwerk: Es ist schön, wenn alles im Container funktioniert, aber irgendwie möchte man von außen darauf zugreifen. Bei ecodms konnte ich alles finden, bei nextcloud habe ich nur "The apache image contains a webserver and exposes port 80." bzw. "For fpm connection this container exposes port 9000." gefunden. Das heißt, ich kann mit NAT eine Port-Weiterleitung machen und muss diesen dort genannten auf einen freien Port von meinem NAS weiterleiten. Oder fehlen da welche bzw. gibt es eine andere Stelle, wo ich weiterlesen müsste? Ich dächte, ich hätte auch mal was von 443 gelsen (?) Gibt es eigentlich irgendwo eine Übersicht, welche Ports bereits verwendet werden und welche frei sind? Gibt es da Einschränkungen oder kann ich mir, insofern nicht bereits vergeben bei den User-Ports (also zwischen 1024 und 49151) austoben? Bei MariaDB wäre nur Port 8080 entsprechend weiterzuleiten, richtig?
      Es gibt neben NAT auch noch die Bridge-Variante, die hier schon öfters zum Einsatz kommt. Bei der NAT-Variante geht alles über die IP-Adresse des NAS, bei der Bridge-Variante erhält der Container eine eigene IP-Adresse und scheinbar kann man auch eine statische IP-Adresse festlegen, wobei ich insofern verwirrt bin, also dass doch eigentlich mein Router die IP-Adressen zuweist und sich das "Endgerät" nicht eine aussuchen kann, oder?
    5. Erweiterte Einstellungen - Gerät: Ich vermute mal, dass sich das eher auf Hardware bezieht, also ob auf einen USB-Port oder so zugegriffen werden kann, richtig?
    6. Erweiterte Einstellungen - Freigabeordner: Normalerweise werden alle Daten im Container angelegt, was schlecht ist, wenn der Container neu augesetzt wird (davon abgesehen, wäre es aber nicht problematisch, oder?), weil z.B. eine Aktualisierung erfolgt. Somit muss man auch hier schauen, wo normalerweise Daten abgelegt werden. Bei z.B. nextcloud findet man das unter "Persistent data": /var/www/html, /var/www/html/custom_apps, /var/www/html/config, /var/www/html/data, /var/www/html/themes/<YOUR_CUSTOM_THEME> sowie entweder /var/lib/mysql oder /var/lib/postgresql/data Nicht alles muss gemountet werden, aber die Datenbank wäre schon gut. Bei dem Beispiel mit MariaDB habe ich unter dem Punkt "Where to Store Data" /var/lib/mysql gefunden.

    Ich habe öfters von der Link-Problematik gelesen. Mir ist klar, dass z.B. nextcloud auf eine Datenbank zugreifen muss, die auch im Container ist. Da beim Neuaufsetzen die Daten weg wären, muss die Datenbank extern gehalten werden (wobei es spannend wird, wenn ich die Datenbank auf eine neuere Version bringen möchte... gibt es dazu auch schon threads, jetzt ist es für mich zu spät zum suchen :/). Den Speicherort und welche Datenbank usw. kann ich über die Umgebungsvariablen festlegen. Aber reicht das aus, also kann sich nextcloud dann automatisch mit der Datenbank verbinden?


    PS: Habe ich eine schöne Dokumentation dazu übersehen? Das QNAP-How-To bringt mir herzlich wenig und qnap-dev.github.io bezieht sich eher auf das Erstellen von Containern und weniger das Einbinden. Vermutlich ist es zu spät für mich, um vernünftig weiterzusuchen, ich würde mich auch über Links zu schönen Dokumentationen freuen, ob speziell zum Einrichten von nextcloud als docker oder allgemein zum Einpflegen eines containers.


    PPS: Bezüglich nextcloud habe ich nur noch Lokaler Zugriff auf Docker Container gefunden, wo man die Compose File einfach kopieren könnte, aber ich würde es schon in groben Zügen gerne nachvollziehen, zudem habe ich mich bezüglich Compose File noch nicht so belesen, ich sehe hier vor allem den Vorteil, dass man alle Eigenschaften in einer Datei hat und beim Neu-Erstellen nicht alles manuell auswählen muss. Ansonsten dürfte da doch kein Unterschied bestehen, also zwischen dem klassischen Installieren eines Containers und der Verwendung einer compose file, oder?


    Viele Grüße und eine gute Nacht!

  • Hallo Frank,

    zunächst einmal Willkommen im Forum :qclub:


    Also man kann auf jeden Fall sagen, dass du deine Hausaufgaben gemacht hast und du schon ziemlich weitreichend in die Thematik vorgedrungen bist. Vielleicht etwas zu tief, denn wir mir scheint sind einige Sachen durcheinander geraten.


    Zu "Befehl" und "Eingangspunkt":

    Wenn du nur "fertige" Container betreiben willst, hast du damit in der Regel nichts zu tun. Die entsprechenden Argumente werden vom jeweiligen Container vorgegeben und müssen (im Normalfall) nicht angepasst werden. Du kannst die also in Falle von Nextcloud einfach "so lassen".


    Zu "Umgebung":

    Ja hier liegst du richtig. Über die Umgebungsvariablen die du dem Container mitgibst, wird er konfiguriert und setzt z.B. das Datenbankpasswort mit dem Wert den du dort hinterlegst.


    Zu "Netzwerk":

    Deine Aussage stimmt, Container sind zunächst nicht von außen zu erreichen. Damit du die Dienste von außen nutzen kannst musst du ein sogenanntes Portmapping durchführen. Dabei bindest du einen Port des Hosts (also von deinem NAS) an einen Port im Container. Wenn du Docker über die Kommandozeile bedienst würde z.B. -p 8088:80 den Port 8088 vom NAS auf den Port 80 im Container binden. Wenn der Webserver der Nextcloud also im Container auf Port 80 lauscht, könntest du über http://NAS_IP:8088 auf den Dienst zugreifen.

    Und ja in der Regel vergibt dein Router die IP Adressen über DHCP, aber wenn man das nicht möchte, kann man auch statische IP Adressen vergeben. Dann muss man sich nur selbst darum kümmern welches Endgerät welche Adresse bekommt.


    Zu "Gerät":

    Hast du richtig erkannt, sollte für deinen Fall aber nicht relevant sein, da deine genannten Container nix mit Hardware zu tun haben.


    Zu "Freigabeordner":

    Hier verhält es sich eigentlich genauso wie mit den Ports. Du kannst "von außen" einen Ordner reichreichen und Docker sagen, wo er diesen innerhalb des Containers einbinden soll. Und ja das sollte man auf jeden Fall machen, damit, wie bereits von dir beschrieben, die Nutzdaten von den Anwendungsdaten entkoppelt werden.


    Docker-Compose ist normal eine komplett eigene Baustelle. Das Tool dient hauptsächlich dazu mehrere Container miteinander zu verbinden. Demnach stimmt deine Aussage, dass sich sonst nicht wirklich was ändert im Vergleich zu "normalen Containern" voll und ganz. Technisch gesehen ist docker-compose nur ein Tool was im Hintergrund die "regulären" Dockerbefehle ausführt, damit man nicht mit den teilweise recht langen Befehlen rumhantieren muss.

  • Hallo tuxflo,


    vielen Dank für die ganzen Informationen. Was mich irritiert, du hast bezüglich den Punkten "Befehl" und "Eingangspunkt" geschrieben :

    Mod: Zitat ohne Quellenangabe ... korrigiert! :handbuch::arrow: Forenregeln beachten und Die Zitat Funktion des Forums richtig nutzen

    Wenn du nur "fertige" Container betreiben willst, hast du damit in der Regel nichts zu tun. Die entsprechenden Argumente werden vom jeweiligen Container vorgegeben und müssen (im Normalfall) nicht angepasst werden. Du kannst die also in Falle von Nextcloud einfach "so lassen".


    Wenn ich z.B. den nextcloud-Container installieren will, erhalte ich folgendes:

    nextcloud.PNG

    Müssten da jetzt Einträge drinne stehen oder müssen die nachgelesen werden. Im ersten Fall wüsste ich nicht, was schief gelaufen ist, da es sich um ein frisch installiertes System handelt, im zweiten Fall fällt es mir wie beschrieben schwer die korrekten Einträge herauszubekommen.

    Mod: Zitat ohne Quellenangabe ... korrigiert! :handbuch::arrow: Forenregeln beachten und Die Zitat Funktion des Forums richtig nutzen

    Docker-Compose ist normal eine komplett eigene Baustelle. Das Tool dient hauptsächlich dazu mehrere Container miteinander zu verbinden.


    Zur Sicherheits, die Verbindung mehrer Container (z.B. nextcloud und mariaDB) bekomme ich über die andere Variante hin, indem ich die Umgebungsvariablen korrekt setze oder muss mehr gemacht werden bzw. wo müsste man da dann weiterlesen? Ich persönlich möchte möglichst vorgefertigte Container verwenden, um nicht zuviel im System einzugreifen und Fehler zu provozieren (die scheine ich irgendwie anzuziehen:/), andererseits hätte ich schon gerne ein Grundverständnis von dem, was ich da mache. Oder geht das Verbinden von Containern aktuell nur über Docker-Composer?


    Viele Grüße und nochmals Danke für die Hilfe!

  • Hallo,


    man kann auch die QNAP SQL Datenbank verwenden.


    Uwe

  • Hallo Uwe,


    allein um die Zitatfunktion mal richtig zu nutzen:

    man kann auch die QNAP SQL Datenbank verwenden.

    stimmt, das würde einiges erleichtern. Wenn ich das richtig einsehe, wird dieser auch nicht von irgendwelchen systeminternen Resourcen verwendet, so dass ich diesbezüglich auch nichts kaputt machen kann und im schlimmsten Fall ihn lediglich neu aufsetzen muss.

  • Hallo,


    ich habe die Container-Station entfernt und neu installiert, dennoch fehlen bei sämtlichen Container die ganzen Angaben. Erstelle ich ohne was einzutragen einen Container (irgendwo im Forum hatte ich einen entsprechenden thread gelesen, finde ihn aber gerade nicht wieder), lädt er sich scheinbar das Image herunter und hat damit dann die Informationen. Nun kann ich den Container entfernen und wenn ich ihn erneut installiere (wobei das Image noch da ist), sind plötzlich alle Daten/Einträge sichtbar, so dass ich auch vernünftig Anpassungen vornehmen kann. Lösche ich das Image, sind diese wieder weg. Wenn jemand eine Idee hat, woran das liegt, wäre ich sehr daran interessiert, da dieser Umweg etwas unschön ist. Aus meiner Sicht liegt es an der Container-Station, da die Informationen da sind, aber nicht angezeigt werden (?)


    Puh, mal schauen wann ich mich herantraue nextcloud einzurichten, aber bei Problemen kann ich dann immernoch einen neuen thread starten. Das eigentliche Ansinnen dieses threads ist aus meiner Sicht erledigt, ich freue mich aber immer sehr über Hinweise, Richtigstellungen oder Links zu z.B. schönen Dokumentationen zu diesem Thema.