Anleitung: NAS aus Containern basteln – mit minimalem Aufwand
Das heimische NAS dient vor allem dazu, Dateien im LAN zu speichern und zu verteilen. Hinzu kommen Funktionen wie Media- oder Webserver, E-Mail und viele weitere Funktionen. Solche Funktionen könnt Ihr aber auf jedem Rechner im LAN aufsetzen und diesen somit quasi zum NAS machen. Und mit Docker-Containern müsst Ihr dafür noch nicht mal umständlich Software einrichten. Mit dem Profi-Liebling heutiger Zeit schaffen das auch Einsteiger.
Nun, Container-Einsteiger, nicht unbedingt Computer-Einsteiger ;)
In dieser Anleitung zeigen wir Euch, wie Ihr auf einem Linux-Rechner (Debian, Mint, Ubuntu, etc.) Web-Dienste einrichtet und diese über das Netzwerk erreicht - ganz wie bei einem richtigen NAS. Beispielsweise CMS wie Wordpress und Pico, einen Apache-Webserver, die Dropbox-Alternative ownCloud oder den Musik-Player Client175 für mpd.
Docker? Container?
Wer weiß, was Container sind, kann dieses Kapitel überspringen.
Eine kurze Einführung zu Docker unter Windows haben wir hier. Leider verhält sich Docker unter Windows bei einigen wichtigen Punkten nicht so wie unter Linux (also wie es soll), grundsätzlich könntet Ihr aber auch Euren Windows-Rechner verwenden. Hier kommt eine Virtuelle Maschine mit Debian zum Einsatz - für Ubuntu ist es dasselbe Prozedere.
Das Konzept hinter Containern, hier konkret für das Programm Docker, ist nicht ganz trivial. Im Grunde handelt es sich um komplette oder abgespeckte Linuxe, die Ihr wie eine Virtuelle Maschine nutzen könnt. Interessanter sind aber die abgespeckten Systeme, die nur auf ein einziges Tool abzielen. Ein Wordpress-Container hat zum Beispiel nur einen einzigen Zweck: Euch ein fertig konfiguriertes, sofort startbereites Wordpress zu liefern. Ihr müsst also weder Wordpress einrichten, noch PHP, einen Webserver oder sonst etwas. Alles was Ihr braucht ist der Container.
Natürlich könntet Ihr alle Tools ganz "normal" unter Linux einrichten und verfügbar machen - aber das ist mit viel Aufwand, Frickelei und Wartungsarbeiten verbunden. Aber Container könnt Ihr jederzeit stoppen, löschen, pausieren und zurücksetzen, ohne Euch etwa um Wordpress selbst kümmern zu müssen. Zudem verbrauchen Container deutlich weniger Ressourcen als Virtuelle Maschinen, da eben kein kompletter Computer "simuliert" werden muss.
Die Ansprache eines Services von einem NAS sieht normalerweise so aus: Ihr ruft im Browser die Adresse des NAS auf, gefolgt von einem Port, zum Beispiel 192.168.178.100:8080. Über 192.168.178.100 adressiert Ihr das NAS selbst, über den Port (eine Art Tür) 8080 wird die Verwaltungsoberfläche aufgerufen. Ein Webserver wäre dann vielleicht über 192.168.178.100:80 erreichbar und ein Musik-Client über 192.168.178.100:6600. Kurz: Die einzelnen Dienste auf einem Rechner sprecht Ihr über solche Ports an. Im Internet müsst Ihr meistens keine Ports angeben, da es bei normalen Webseiten immer um Port 80 geht, der automatisch angenommen wird, wenn Ihr keinen Port eingebt. Ihr könntet aber auch google.de:80 aufrufen.
Das heißt für uns hier: Die Container laufen alle auf einem beliebigen Linux-Rechner, im Zweifelsfall einfach auf Eurem Standard-Computer im Hintergrund. Und wenn das ein Windows-Rechner ist, versucht Euer Glück mit Docker für Windows oder nutzt eine Virtuelle Maschine. Anschließend können sie lokal über localhost:8080 oder im LAN über 192.168.178.100:8080 angesprochen werden.
Ein letzter Hinweis: Natürlich gibt es elegantere Möglichkeiten, natürlich Professionellere, natürlich fertige Lösungen und und und. Aber mit separaten Containern für jede Anwendung habt Ihr ein schön modulares Baukastensystem, das sich mit den immer gleich drei, vier Standardbefehlen verwalten lässt. Das heißt nicht, dass Docker ein simples 1-Klick-System für Computer-Laien ist - aber in der hier gezeigten grundlegenden Nutzung können eben auch Laien Dinge aufsetzen, die sonst nur den Tekkies vorbehalten sind.
1. Docker installieren
Die Installation von Docker unter Linux benötigt ein paar Zeilen - die exakten Anweisungen für unterschiedliche Linuxe findet Ihr hier bei Docker. Genau genommen Docker CE (Community Edition). Für Ubuntu/Debian sind es folgende, nacheinander ausgeführte Befehle:
Update:
sudo apt-get update
Apt via HTTPS ermöglichen:
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Dockers GPG-Schlüssel hinzufügen:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Docker-Repository hinzufügen:
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Installation:
sudo apt-get update
sudo apt-get install docker-ce
Alternativ könnt Ihr das passende DEB-Paket herunterladen und installieren: Sucht Euch hier die passende Ubuntu-Version heraus, navigiert zu pool/stable und ladet das DEB-Paket herunter. Installiert es per Doppelklick oder:
sudo dpkg -i /pfad/zum/paket.deb
Damit ist die Installatin abgeschlossen.
2. Docker-Hub durchsuchen
Der Einfachheit halber beschränken wir uns auf die Beispiele httpd (simpler Apache-Webserver; "http daemon") und mpd mit Client175 (Netzwerk-Musik-Player) - alles andere ist eh nur Wiederholung.
Zunächst müsst Ihr die passenden Images (aus denen dann laufende Container werden) haben, was erfreulicherweise direkt mit Docker geht, beispielsweise mit:
sudo docker search httpd
In der ersten Spalte findet Ihr den Namen des Images, hier schlicht "httpd", den Ihr am besten kopiert.
3. httpd-Container starten
Der Start des Containers ist im Grunde selbsterklärend - bis auf zwei Kleinigkeiten:
sudo docker start -it -d -p 7777:80 httpd
-it steht für einen interktiven Container, -d für "detached" (losgelöst) und sorgt dafür, dass die Kommandozeile anschließend wieder frei ist. Ihr könntet auch einfach -dit schreiben, aber start it detached kann man sich so schön merken ;)
Wichtiger ist der Schalter -p - der eigentliche Knackpunkt des Artikels: Ein Webserver wird wie bereits erwähnt über Port 80 angesprochen. Was aber, wenn der Rechner, auf dem Docker läuft bereits einen eigenen Webserver hat? Wenn Ihr im Browser des Rechners dann localhost:80 eingebt, kommt eben die Webseite des Rechners, nicht des Containers. Also wird Port 80 des Containers auf den Port 7777 des Rechners umgeleitet. Wenn Ihr nun im Browser lokal localhost:7777 ansurft, seht Ihr, was der httpd-Container über Port 80 auswirft. (Statt 7777 könnt Ihr natürlich auch einen sonstigen (freien) Port verwenden.)
Es ist genau diese Port-Umleitung, die es Euch ermöglicht, etliche Container/Dienste auf einem Rechner laufen zu lassen und getrennt anzusprechen. Das ist auch nötig, da es immer wieder Dienste gibt, die auf dieselben Ports setzen. Viele Weboberflächen arbeiten beispielsweise mit Port 8080, auch viele echte NAS.
4. httpd-Container testen
Testet zunächst, ob der Container überhaupt läuft:
sudo docker ps
Die Ausgabe zeigt Euch die ID des Containers und einen generierten Namen. Das ist der Name des Containers - nicht verwechseln mit dem Namen des Images!
Nun könnt Ihr im Browser localhost:7777 aufrufen und solltet die Website des httpd-Containers sehen. Um ganz sicher zu gehen, könnt Ihr die Standardseite des Webservers verändern. Ruft dazu zunächst die Kommandozeile des httpd-Containers auf:
sudo docker exec -it ID-des-Containers bash
Dabei startet exec den bash-Terminal aus dem Container - Ihr seid nun "im" Container. Mit ls könnt Ihr Euch die Dateien anschauen und überhaupt ganz normal auf der Kommandozeile arbeiten.
Die Standarddatei des Webservers (index.html) liegt im Verzeichnis htdocs. Fügt also eine Zeile hinzu:
echo Hallo Welt >> htdocs/index.html
Verlasst den Container mit exit und ruft erneut im Browser localhost:7777 auf - jetzt solltet Ihr den Zusatz Hallo Welt sehen.
5. mpd-Container installieren
mpd steht für Music Player Daemon, ein simpler Musik-Server, der zum Beispiel bei vielen Raspberry-Pi-Projekten zum Einsatz kommt. Bedienen könnt Ihr den mit "echten" Desktop-Clients, zum Beispiel Cantata, oder über den Browser, sofern ein Client installiert ist - hier der bereits erwähnte Client175. Sucht also nach dem passenden mpd-Container:
sudo docker search client175
Verwendet das Image cdauth/mpd-client175 und startet es mit:
sudo docker run -it -d -p 9999:8080 -p 6600:6600 cdauth/mpd-client175
Der Zugriff auf die Weboberfläche des Clients läuft wieder über Port 8080, der hier auf Port 9999 umgeleitet wird - wie oben. Zusätzlich wird der Port 6600 veröffentlicht (p steht für publish), nun aber auf dieselbe Portnummer. mpd selbst streamt die Musik über Port 6600, muss also "aus dem Container heraus kommen" können. (Wenn auf dem Docker-Rechner auch ein mpd-Server laufen würde, müsstet Ihr den Port wieder umleiten, also etwa 6601:6600.)
Zum Testen nutzt Ihr wieder sudo docker ps und im Browser localhost:9999 oder alternativ in einem mpd-Client wie Cantata (sudo apt-get install cantata) einfach die IP des Rechners, also localhost oder 192.168.178.100 - der Port 6600 ist dort bereits vorgegeben.
Für die Praxis: Natürlich soll Eure Musik nicht im Container liegen, sondern auf dem Docker-Rechner. Also müsst Ihr dem Container noch mitteilen, welcher Ordner das denn sein soll. Der modifizierte Startbefehl:
sudo docker run -it -d -p 9999:8080 -p 6600:6600 -v /home/mirco/mpd/music:/music cdauth/mpd-client175
-v /home/mirco/mpd/music:/music gibt in diesem Fall den Pfad /home/mirco/mpd/music als mpd-Musikpfad an - der hintere Teil, :/music ist immer identisch. Das ist Container-spezifisch! Generell solltet Ihr bei Images auch mal im Netz nachschauen, ob es nicht weitere Infos gibt! beim mpd-Container ließe sich zum Beispiel auch die Bibliothek noch auslagern. Eine Google-Anfrage nach "docker + image-name" genügt in der Regel.
6. Und jetzt: Nutzen und abrunden
Im Grunde seid Ihr schon fertig: Ab sofort könnt Ihr von überall im LAN im Browser den Container-Webserver über 192.168.178.100:7777 und den Container-mpd-Player über 192.168.178.100:9999 aufrufen. Und selbstverständlich könnt Ihr auch auf dem Smartphone einen mpd-Client wie MPDroid installieren.
Weitere Dienste/Container installiert Ihr einfach nach obigem Muster. Vorsicht: Das geht nicht immer so einfach - im Zweifelsfall schaut auf der Homepage des Images vorbei.
Natürlich ist das System damit noch nicht ganz praxistauglich. Ihr müsst Euch zum Beispiel noch darum kümmern, dass Container gespeichert werden, sofern Ihr Änderungen daran vornehmt. Und die Tools selbst, hier im Beispiel vor allem Client175, können/müssen ebenso noch eingestellt werden. Die supereinfache Variante: Packt Euer Docker-Projekt komplett in eine Virtuelle Maschine, startet die Container und schaltet sie nie wieder aus! Ihr könnt einfach die VM über "Zustand der Virtuellen Maschine speichern" ausschalten - beim nächsten Start sind alle Container wieder da.
Ihr könnt Container aber auch einfach stoppen und später wieder starten, Eure Änderungen bleiben erhalten:
sudo docker stop name-des-containers
sudo docker start name-des-containers
Mit Containern lässt sich noch viel mehr anstellen, von selbst vergebenen Namen bis hin zu professioneller Container-Verwaltung. Und nein, nicht alles ist intuitiv. Wenn man mal ehrlich ist: Container sind vor allem für Nerds und professionelle IT-Anbieter wie Rechenzentren interessant. Aber mittlerweile gibt es so viele Images mit tollen Endnutzerfunktionen Out-of-the-Box, dass sich die kurze Einarbeitung schon dafür lohnt.
Und wenn Ihr nicht Euren Rechner als Nebenher-NAS nutzen, sondern ein echtes NAS selbst bauen wollt: Kauft Euch einen Raspberry Pi und setzt den ganzen Docker-Krempel dort auf. Dann bastelt Ihr Euch für den httpd-Container noch eine simple HTML-Seite mit Links zu den anderen Containern (einfach MPD-Client
) und schon habt Ihr einen rudimentären NAS-Server.
Doch! Siehe „-it“
Hallo,
vielen Dank für das interessante Tutorial.
Leider bekomme ich immer dieMeldung“unknown shorthand flag: ‚t‘ in -t“, wenn ich „docker start -it -d -p 7777:80 httpd“ eingebe… aber ich habe nirgends „-t“ eingegeben…
was mache ich falsch und wie kann ich es besser machen?
Grüße F.T.