Podman statt Docker

Dokumentation

Podman arbeitet im Gegensatz zu Docker im User-Kontext und ohne root Rechte.

Erstellen eines pods mit mariadb und phpmyadmin

Podman Netzwerke

Image Pull

podman pull docker.io/library/mariadb:11
podman pull docker.io/library/phpmyadmin

Pod erstellen

„Pods“ sind Gruppen von funktional miteinander verbundenen Containern. Das Konzept ähnelt den Pods in Kubernetes, ist aber weniger komplex.

Im Beispiel wird ein Pod erzeugt, der eine mariadb Datenbank und eine Web-Anwendung (phpmyadmin) sowie einen Webserver (Apache) enthält. Der Apache ist Teil des phpmyadmin Containers.

Der Pod enthält automatisch einen infra Container. Sein Zweck besteht darin, die mit dem Pod verbundenen Namespaces zu verwalten und es Podman zu ermöglichen, andere Container mit dem Pod zu verbinden.

Die gewünschten Ports, die nach aussen sichtbar sind, werden gleich angegeben

podman pod create --name mariadb -p 8080:80 -p 3306:3306 -p 8081:8081

Container zum Pod hinzufügen

Volume für persistente Daten anlegen

podman volume create mariadb-data

mariadb Container anlegen und zum Pod hinzufügen

mariadb mit root PW, Zusatz-Datenbank und Volume, auf dem die Daten liegen. Konfigurations-Parameter werden über Umgebungsvariablen mit „-e“ mit gegeben.

podman run -d --pod mariadb --name mariadb-db -e MYSQL_ROOT_PASSWORD=xxxxxx -e MYSQL_DATABASE=digikam -e MYSQL_USER=digikam -e MYSQL_PASSWORD=digikam -v mariadb-data:/var/lib/mysql:Z mariadb

phpmysql Container hinzufügen

Der Apache im Container horcht auf Port 8081

podman run -d --pod mariadb --name phpmyadmin -e PMA_HOST=127.0.0.1 -e PMA_PORT=3306 -e APACHE_PORT=8081 phpmyadmin:latest

Test

curl localhost:8081

Container betreten

root@thommienas:/# podman exec -it 81c9ba1625db mariadb -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 12.3.2-MariaDB-ubu2404 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Datenbanken im Container zeigen

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.000 sec)

Autostart

Weil die Container/Pods im Userkontext laufen, ist das Zusammenspiel mitn systemd etwas anders als bei Docker

Pod inspizieren

podman pod inspect mariadb

Welche Container sind im Pod

podman pod inspect mariadb --format '{{range .Containers}}{{.Id}}{{"\n"}}{{end}}'

Namen und IDs

podman pod inspect my-pod --format '{{range .Containers}}{{.Name}} ({{.Id}}){{"\n"}}{{end}}'

Podman Netzwerke

root@thommienas:~# podman pod inspect mariadb0 --format '{{.InfraConfig.PortBindings}}'
map[3306/tcp:[{0.0.0.0 3306}] 80/tcp:[{0.0.0.0 8080}]]

Netzwerk Name

podman pod inspect my-pod --format '{{.InfraConfig.Networks}}

Podman Quadlets

Dryrun

/usr/lib/systemd/system-generators/podman-system-generator --dryrun

Debug