_/mariadb

Link MariaDB Official Image: https://hub.docker.com/_/mariadb

Environment Variables für MariaDB Container - Password required!

Environment Variables für MariaDB Container - Password required!

Weitere Info-Links zum Image MariaDB:

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.