Netzwerk
Docker Compose Network
In diesem Beispiel Konfigurieren wir eine MySql Datenbank und eine phpMyAdmin
Weboberfläche, wie in der Übung 8 der Netzwerk-Aufgaben. Nun soll es aber
möglich sein, diese Services so zu konfigurieren, dass ein docker compose up
genügt, damit alles korrekt startet.
Die Docker Befehle ohne Compose lauten:
docker network create db-net
docker run -d \
--name compose-uebung03-mysql \
--network db-net \
-e MYSQL_ROOT_PASSWORD=rootpassword \
-e MYSQL_DATABASE=mydatabase \
mysql
docker run -d \
--name compose-uebung03-phpmyadmin \
--network db-net \
-e PMA_HOST=mysql \
-e PMA_USER=root \
-e PMA_PASSWORD=rootpassword \
-p 8080:80 \
phpmyadmin/phpmyadmin
docker container stop compose-uebung03-mysql
docker container stop compose-uebung03-phpmyadmin
docker network rm db-net
docker container prune
Auftrag
Wir wollen jetzt diese Befehle in ein docker-compose.yml überführen.
-
Erstellen Sie eine Datei
docker-compose.yml -
Fügen Sie ein Service
services.mysqlhinzu. -
Versuchen Sie den docker Befehl zu mysql zu übertragen.
-
Fügen Sie eine Service
services.phpmyadminhinzu. -
Versuchen Sie den docker Befehl zu phpmyadmin zu übertragen.
-
Fügen Sie auf Toplevel im
docker-compose.ymlein Netzwerkdb-netmit demdriver: bridgehinzu. -
Starten Sie die Services mit dem Befehl:
docker compose up -d -
Öffnen Sie den Browser unter
http://localhost:8080. -
Wenn Sie zu schnell sind, erscheint eine Warnung, dass MySql nicht korrekt konfiguriert ist. Diese erscheint, da der MySql Server noch nicht gestartet ist.
Healthcheck und depends_on
Damit unterschiedliche Services aufeinander warten, gibt es zum einen die
Möglichkeit eines "Healthcheck" in Kombination mit depends_on. Dies ist ein
Befehl, der angibt, ob ein Service läuft. Für Mysql ist dies
mysqladmin ping -h localhost.
- Healthcheck definieren
Fügen Sie dem Service mysql folgende Konfiguration bei:
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 5s
retries: 20
Damit wird alle 5 Sekunden, 20 Mal versucht zu pingen. Also zu schauen, ob die DB antwortet. Also zu schauen, ob die DB antwortet.
depends_ondefinieren
Damit dies Sinn macht, muss der Service phpmyadmin auf den Service mysql
warten. Dies erreichen wir mit folgender Konfiguration, die dem Service
phpmyadmin hinzugefügt werden muss.
depends_on:
mysql:
condition: service_healthy
- Neustarten
Stoppen und starten Sie nun die services neu mit den Befehlen:
docker compose down
docker compose up -d
Nun wartet der Service phpmyadmin bis der Service mysql gestartet ist. Wenn
jetzt im Browser http://localhost:8080 eingegeben wird, kommt sehr lange
"Verbindung fehlgeschlagen", bis alles gestartet ist. Dafür hat phpmyadmin nie
ein Verbindungsfehler.
Diagram erstellen
- Erstellen Sie ein Diagramm mit dem Befehl:
- Bechten Sie, dass die docker-compose.yml Datei mit einer
version: "3"starten muss, damit die Visualisierung funktioniert.
docker run --rm -it --name dcv -v $(pwd):/input pmsipilot/docker-compose-viz render -m image docker-compose.yml
- Öffnen Sie die erstellte Datei
docker-compose.png