Insbesondere im Schulumfeld ist eine einfache Lösung für das Thema Datenbanken ideal. Docker bietet hier einen guten Mittelweg.
Warum Docker?
Für mich ist Docker Neuland. Stück für Stück begebe ich mich immer tiefer in den Kaninchenbau. Grund dafür ist meine Neugier, die Möglichkeit, eine flexiblere Entwicklungsumgebung zu haben und auch deshalb, um gemeinsam mit meiner Frau etwas für ihren Informatikunterricht auf die Beine zu stellen.
Gerade beim Thema Datenbanken ist es zumindest aus unserer Sicht spannend, wenn man nicht mit alten Hüten daher kommt und den Stoff auf die gleiche Weise durchzieht, wie man es von Jahren oder sogar Jahrzehnten gemacht hat. Über das eigentliche Unterrichtsthema hinaus lernen die Schülerinnen und Schüler zudem auch noch aktuelle Entwicklungstools kennen. Docker ist ja nicht nur für einfache Anwendungsfälle eine feine Sache.
Bei einer Kollegin meiner Frau aus Nordrhein-Westfalen kommt im Unterricht beim Thema Datenbanken immer ein USB-Stick mit einer XAMPP-Installation zum Einsatz. So was geht, aber wir finden unsere Vorgehensweise mit Docker spannender. Am Ende hat man bei beiden Vorgehensweisen eine (MySQL-)Datenbank, die man über phpMyAdmin anspricht. Wenn ich mich richtig erinnere, ist phpMyAdmin bei XAMPP schon dabei. Dafür ist man dann aber auf das festgelegt, was mit im Paket drin ist. Maria DB, PHP und Perl. Wenn man etwa Python haben will statt Perl, muss man selber ran.
Geschmacksrichtungen von Datenbanken
Ob man als Datenbank jetzt Maria DB oder MySQL verwendet, dürfte wohl eine Geschmacks- und Glaubensfrage sein. Deutlicher ist in jedem Fall an dieser Stelle der Unterschied zwischen dem Weg über Docker und XAMPP. Wenn man die Vorgehensweise bei Docker verstanden hat, kann man ohne Probleme die Datenbank austauschen.
Der erste Schritt in der Aufgabe für den Unterricht besteht darin, Docker auf dem eigenen Rechner zu installieren. Das ist auf der Seite von Docker recht gut beschrieben. Allerdings gibt es ein paar Fallstricke, über die wir gestolpert sind. Bei mir am Intel-Mac ging alles reibungslos. Für den Mac mini mit M1 Chip meiner Frau gibt es zur Zeit keine finale Version. Unter Windows auf dem Notebook muss man sicherstellen, dass im BIOS die Virtualisierungstechnologie aktiviert wurde. Wie das genau geht, hängt vom jeweiligen Rechner ab und ist etwas fummelig. Einen guten Hinweis für die Vorgehensweise findet man hier.
Wenn man das geschafft hat und Docke läuft, ist man bereit für das „Hallo Welt“-Beispiel. Dazu ruft man im Terminal beziehungsweise der Kommandozeile docker run hello-world
auf.
Da weder ein Image noch ein Container namens hello-world vorhanden sind, lädt sich Docker jetzt das passende Image aus der zentralen Bibliothek.
Danach sollte folgendes angezeigt werden:
Wer mag, kann sich mit folgende Fragen auseinandersetzen:
- Was ist der Unterschied zwischen Image und Container?
- Was ist ein Mount-Point?
- Was ist ein Netzwerk bei Docker?
Dann geht es weiter mit dem nächsten Schritt.
Installation von MySQL
Bei mySQL handelt es sich um eine Datenbank, die üblicherweise in einer LAMP Umgebung (Linux als Betriebssystem, Apache als Webserver, MySQL als Datenbank und PHP als Programmiersprache hat) läuft. In unserem Fall benötigen wir nur MySQL selber in einem eigenen Container.
Dazu führen wir folgende Befehl in der Kommandozeile bzw. im Terminal aus:
docker run -d --name jag -e MYSQL_ROOT_PASSWORD=4711 mysql:latest
Es wird ein neuer Docker-Container gestartet und da es noch keinen mit MySQL gibt, wird entsprechend aus der Bibliothek das Image dazu geladen. Der Container wird von uns mit „jag“ benannt, um später von einem anderen Container darauf zugreifen zu können.
Bei MySQL gib es standardmäßig einen administrativen Benutzer mit dem Namen „root“. Für diesen vergeben wir das Passwort „4711“. Im Rahmen der Installation weisen wir Docker an, die aktuellste Version von MySQL zu verwenden.
Nach Abschluss der Installation sollte im Dashboard von Docker jag mit mysql:latest als „running“ angezeigt werden.
Installation von phpMyAdmin
Um mit mySQL über den Webbrowser kommunizieren zu können, wird jetzt im nächsten Schritt pyhMyAdmin installiert. Dabei handelt es sich um eine in PHP geschriebene Applikation, mit der über eine Weboberfläche auf die Datenbank zugegriffen werden kann. Im Image für phyMyAdmin befindet sich die Bauanleitung mit allen Abhängigkeiten.
Über die Kommandozeile bzw. das Terminal wird folgender Befehl ausgeführt:
docker run --name myadmin -d --link jag:db -p 8080:80 phpmyadmin
Wieder wird von Docker geprüft, ob phpMyAdmin bereits vorhanden ist und dann im Bedarfsfall installiert. Der Container erhält den Namen „myadmin“ und wird mit dem Container „jag“ (in dem sich unser mySQL-Server befindet) verbunden. Zusätzlich wird noch der Port 8080 für den Aufruf von phpMyAdmin über den Browser festgelegt.
Nach Abschluss der Installation sollte im Dashboard von Docker myadmin mit phpMyAdmin als „running“ angezeigt werden.
Verwenden von phpMyAdmin
Über den Browser lässt sich jetzt phpMyAdmin unter folgender URL aufrufen: http://127.0.0.1:8080/
Der Benutzername ist dabei „root“ und das Passwort „4711“ (oder ein anders, falls man bei der Installation von mySQL ein anderes vergeben hat. Nach erfolgreicher Anmeldung sieht man die Oberfläche von phpMyAdmin und die Default-Datenbanken von mySQL.
Sollte es bei der Anmeldung Probleme geben, hast man eventuell das falsche Passwort eingegeben. Wenn man sich ganz sicher ist, dass richtige Passwort verwendet zu haben, hilft es, den Cache des Browsers zu löschen. Nach probiert man erneut aus, ob die Anmeldung gelingt.
Zusatz für Fortgeschrittene
Wenn man sich bereits etwas mit Docker, Images und Containern beschäftig hat, stößt man auf einen interessanten Punkt. Die angelegten Datenbanken befinden sich im Container. Direkt über den Computer hat man darauf keinen Zugriff, um etwa die Inhalte auf einen USB-Stick zu kopieren.
Wenn man die Datenbanken zum Beispiel in einem Verzeichnis auf dem eigenen Rechner auslagern will, musst man Docker beim erstellen des Containers anweisen, die Daten von mySQL in einem anderen Verzeichnis zu schreiben. Über die Docker App kann man in den Einstellungen den Punkt „File Sharing“ aufrufen.
Hierüber kann man Docker anweisen, weitere Verzeichnisse zu verwenden. Diese lassen sich dann an einen Container binden. Man erstellt jetzt auf dem eigenen Rechner das Verzeichnis „jagdata“ im Dokumentenverzeichnis und wähle es in Docker als neue Resource aus.
Anschließend muss „Apply & Restart“ angeklickt werden, damit die Änderung wirksam ist.
Docker zeigt in der Übersicht an, wie der genaue Pfad zum Verzeichnis lautet. Diese Angabe benötigt man im Folgendem. gleich. Zuerst musst sollte man aber beide laufenden Container beenden und löschen.
Anschließend erstellt man einen neuen Container für YySQL. Da das Image noch vorhanden ist, geht es diesmal schneller (Eingabe im Terminal bzw. der Kommandozeile):
docker run -d --name jag -e MYSQL_ROOT_PASSWORD=4711 -v /Users/tboley/Documents/jagdata:/var/lib/mysql mysql:latest
Der Pfad muss natürlich durch den eigenen Pfad ersetzt werden, so wie er in Docker unter „File Sharing“ angezeigt wurde.
Jetzt musst man nur noch einen neuen pyhMyAdmin Container erstellen:
docker run --name myadmin -d --link jag:db -p 8080:80 phpmyadmin
Der Aufruf von phpMyAdmin erfolgt wie zuvor über den Browser. Wenn man vorher eine Datenbank angelegt hat, ist diese nicht mehr vorhanden. Sie war Bestandteil des Containers. Jetzt mit dem externen Verzeichnis kann man nachverfolgen, wo und wie MySQL Tabellen anlegt und sie mit Inhalten von füllt.
2 Kommentare
Ich würde für Unterricht empfehlen ‚docker-compose‘ zu nutzen. Das gibt dann die Möglichkeit mit nur einer Datei in der alles steht für weniger Fehler zu sorgen.
Zusätzlich kann ein inkompatibles Update nicht den Unterricht vermasseln und dafür sorgen das man erst debuggen muss, weil das Update am
Morgen rausgekommen ist.
Bei Bedarf helfe ich da gern was zu erstellen. Einfach melden.
Danke für den Tipp :-) Bei Fragen melde ich mich gerne. Zur Zeit bastle ich jedoch an anderer Stelle (Wemos D1 mini ).