_/mariadb¶
Link MariaDB Official Image: https://hub.docker.com/_/mariadb
Environment Variables für MariaDB Container - Password required!¶
Weitere Info-Links zum Image MariaDB:
MariaDB Container Environment Variables - Das ist die URL für den Screenshot oben.
Das Image stellt mit dem MariaDB-Service einen Background Prozess zur Verfügung!
Wichtig
Container ohne Prozess(e) werden gleich wieder beendet - siehe: hello-world!
Aber natürlich kann der Datenbankprozess nicht im luftleeren Raum existieren. Die Analyse des MariaDB Image mariadb:latest ergibt, dass es historisch von ubuntu:jammy abstammt.
Das heißt, dass die MariadDB Entwickler uns ein quasi kombiniertes Ubuntu (Version: Jammy 22.04) + MariadDB Server 11.3.2 Image offerieren.
Hier ein paar der Layers für das Image:
# hier wird das Ubuntu:Jammy hinzugefügt - SHA s.a. Jammy Image!
4 ADD file:a5d32dc2ab15ff0d7dbd72af26e361eb1f3e87a0d29ec3a1ceab24ad7b3e6ba9 in /
# ein Volume verdrahten - siehe später Volume list
18 VOLUME [/var/lib/mysql]
# Standard-Port anbieten
22 EXPOSE map[3306/tcp:{}]
# der Dienst, der den Container am Laufen halten soll als Letztes
23 CMD ["mariadbd"]
Es folgt ein Minimal-Aufruf für einen (immer neuen!) Container mit Name mariadb-test1 und die Nutzung:
docker run -d --name mariadb-test1 -e MYSQL_ROOT_PASSWORD=geheim mariadb
# der Container mit MariaDB Server läuft im Hintergrund (-d | --detached)
# und kann manuell gestoppt werden!
# Containerinfos auslesen:
docker inspect maria-db-test1
# Stoppen eines Containers:
docker stop mariadb-test1
Beachten: MariaDB Datenbank Verzeichnis /var/lib/mysql liegt im Docker-Container!
docker inspect maria-db-test1 | jq # oder einfach less
Man sollte die Zeilen mit Bezeichner Mounts analysieren.
Die Datenbank - wenn diese läuft - mit MySQL/MariDB-Client checken:
docker exec -it mariadb-test1 mariadb -u root -p # client mysql funzt nicht
Und gerne immer wieder den Container analysieren - mit inspect oder auch manuell.
docker exec -it mariadb-test1 /bin/bash
# Aufrufe:
cat /etc/os-release
ps ax
mysqld --version
exit
Das Logging übernimmt Docker für den Hintergrund-Daemon Mysqld:
docker logs mariadb-test1
Jetzt erweitern wir das Beispiel mit eigenem Volume im Userdir Home:
mkdir /home/joeb/varlibmysql # manuelles mkdir - nicht nötig!
docker run -d --name mariadb-test2 \
-e MYSQL_ROOT_PASSWORD=geheim \
-v /home/joeb/varlibmysql/:/var/lib/mysql mariadb
So jetzt haben wir einen neuen Container mariadb-test2 mit den Datenbank-Dateien im Homedir eines Users.
Hinweis
Diese Umleitung für Volumes kann bei Nicht-Linuxen problematisch sein! Auf Windows-basierten Docker Hosts (z.B. Docker Desktop für Windows mit WSL2) haben wir im Host-Bereich NTFS-Dateisysteme.
Jetzt noch ein Container - hier publishen (s.a. gedanklich: Portumleitungen) wir den Container-internen Port 3306 nach außen an unseren Docker-Host Port 13306. Wir nutzen das selbe Volume.
docker run -d --name mariadb-test3 \
-v /home/joeb/varlibmysql/:/var/lib/mysql \
-p 13306:3306 mariadb
Und jetzt klappt der Zugriff auch direkt über den Docker-Host, wenn wir noch schnell den MySQL/MariaDB Client bereitstellen.
mysql -u root -p --port 13306 --protocol=tcp
Auf Debian also bitte einfach den MariaDB Client
per sudo apt install mariadb-client nachinstallieren.
Bei dieser Variante funktioniert sowohl Aufruf mysql (Symlink) als auch
mariadb für den Datenbankclient.