docker-compose.yml¶
Die Konfigurationsdatei docker-compose.yml (auch
compose.yml möglich)
ist die Textdatei mit allen benötigten Anweisungen (Direktiven)
für das Tool docker compose!
Erstes Beispiel compose.yml¶
Ein vollständiges Beispiel folgt in einem weiteren Kapitel. Mit dem folgenden Code wollen wir uns dem Thema weiter annähern.
# Datei test/docker-compose.yml
# version: '3.7'
services:
db:
image: mariadb:latest
volumes:
- /var/dc-test-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: geheim
restart: always
wordpress:
image: wordpress:latest
volumes:
- /var/dc-test-www:/var/www/html
ports:
- "8082:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: geheim
restart: always
Dieses Hello WordPress!-Beispiel zu docker compose zeigt die
zusätzliche Intelligenz des docker compose-Tools
gegenüber den Basistools Docker.
CLI docker compose¶
Kommando: docker compose … (Auszug)
config (Analyse)
up | down (up normalerweise kombiniert mit -d)
events
kill (falls stop|down nicht funzt)
logs
pause | unpause
ps
Compose Projektordner¶
Nach Bereitstellung eines Projektordners mit docker-compose.yml reicht
der letzte Befehl aus der folgenden Liste:
cd test # hier befindet sich das docker-compose.yml
mkdir /var/dc-test-www # Volume Wordpress HTML; kann man weglassen (!)
mkdir /var/dc-test-db # Volume MariaDB Databases; kann man weglassen (!)
# der eigentliche Startbefehl für alle Container inkl. Netzwerk + Volumes
docker compose up -d
Test hier einfach wieder mit Browser (URL): localhost:8082
Danach kann man alles beenden und löschen:
# Alle Compose Container beenden und entfernen!
docker compose down # hier bleiben die Volumes erhalten!
rm -Rf /var/dc-test-db /var/dc-test-www # Volumes werden in diesem Beispiel manuell gelöscht
Anm.: bei Nutzung von docker compose down --volumes werden die volumes
auch mit entfernt!
Compose Netzwerke und Volumes¶
Netzwerke für docker-compose.yml
services:
web:
...
networks:
- mynet
# auf Top-Level die Netzwerke definieren
networks:
mynet:
external:
name: host
Bei der letzten Konfiguration ist das Docker-eigene Host-Netzwerk gemeint (siehe docker network ls).
Netzwerkports
ports:
- "8080:80"
- "8443:443"
Auf die Hierarchie-Ebene für Definitionen achten.
Volumes
# Docker docker-compose.yml in Ordner testing
version: '3.7'
services:
nginx:
volumes:
- webdata:/var/www/html
...
volumes:
webdata:
Docker erstellt selbst ein Volume: /var/lib/docker/volumes/testing_webdata/_data
Mit einem weiteren docker-compose Beispiel (Joomla-Installation) können wir die Nutzung von Docker Volumes sehen:
Beispiel mit CMS Joomla und Volume webdata:
# Datei: joomla/docker-compose.yml
# version: '3.1'
services:
joomla:
image: joomla:apache-php7
ports:
- 8080:80
volumes:
- webdata:/var/www/html
environment:
JOOMLA_DB_HOST: mariadb
JOOMLA_DB_NAME: dockerbuch
JOOMLA_DB_USER: dockerbuch
JOOMLA_DB_PASSWORD: johroo2zaeQu
mariadb:
image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: eengi7suXeut
MYSQL_DATABASE: dockerbuch
MYSQL_USER: dockerbuch
MYSQL_PASSWORD: johroo2zaeQu
volumes:
webdata:
Testen der Persistierten Speicherung von Webdaten und Diskussion die Volumes in eigene Datenstrukturen zu binden.
Compose restart¶
Für viele Dienste wollen und können wir die automatisierten Starts bzw. Neustarts der Container definieren. Hierfür hat Compose die Direktive restart.
Eine kurze Erläuterung aus GitHub Compose Specs - restart:
restart definiert die Richtlinie, die die Plattform bei der Beendigung eines Containers anwendet.
no: Die Standard-Neustart-Richtlinie. Sie startet den Container unter keinen Umständen neu.
always: Die Richtlinie startet den Container immer wieder neu, bis er entfernt wird.
on-failure: Die Richtlinie startet den Container neu, wenn der Exitcode einen Fehler anzeigt.
unless-stopped: Die Richtlinie startet den Container unabhängig vom Exitcode neu, stoppt das Neustarten jedoch, wenn der Dienst gestoppt oder entfernt wird.
Insofern kann man sich fragen, ob in vielen Beispielcodes nicht vielleicht
start restart: always doch besser ein restart: unless-stopped
genutzt werden sollte.