Welche Runtimes gibt es?
...
Die Variable hat einen besonderen Stellenwert. Darüber wird der Docker-Namespace organisiert. Domain und Ordner werden darüber verwaltet und zusammengehalten.
Konfiguration über Bind-Mounts
Viele Docker-Images benötigen eine zentrale Konfiguration innerhalb des Containers, damit die darunterliegende Anwendung lauffähig ist. Diese Konfigurationen sollen über eine Bind-Mount von außen in den Container gemappt werden.
Anwendungsfall: man möchte für Debug-Zwecke Slow-Logging im MariaDB-Container aktivieren. Da die zu Grunde liegende my.cnf, in der diese Einstellung gemacht wird, sich im Image und innerhalb des Containers befindet, lässt sich diese Änderung nicht persistent machen. Man müsste stattdessen eine Shell im Container öffnen, die Datei im Container anpassen und danach den Datenbankserver neu starten. Aufgrund fehlender Tools und Rechte ist dies oft überhaupt nicht möglich. In diesem Fall bietet es sich an, die my.cnf einfach über einen Bind-Mount in den Container zu mappen:
Codeblock |
---|
volumes:
...
- ./config/mariadb:/etc/mysql/conf.d |
Das Verzeichnis ./config/mariadb befindet sich parallel zur docker-compose.yml und enthält alle notwendigen Konfigurationsdateien, die MariaDB im Verzeichnis /etc/mysql/conf.d erwartet. So können Einstellungen an der Konfiguration von außen einfach geändert werden, es muss lediglich der Container bei einer Änderung neu gestartet werden.
Internes Netz und externes Netz
...
Codeblock | ||
---|---|---|
| ||
version: '2.4' services: application: depends_on: database: condition: service_healthy image-processing: condition: service_started |
Beachten Sie, dass depends_on
nicht garantiert, dass die aufgelisteten Dienste voll funktionsfähig sind, bevor der abhängige Dienst gestartet wird. Es garantiert nur, dass sie vorher gestartet werden. Für Dienste wie Datenbanken ist oft ein zusätzlicher Mechanismus erforderlich, um sicherzustellen, dass sie vollständig betriebsbereit sind, bevor Anwendungen, die von ihnen abhängen, gestartet werden.
Healthcheck
Die Garantie, dass der Dienst voll funktionsfähig ist, bringt ein HealtcheckHealthcheck. Der wird bspw. in der Datenbank durchgeführt:
Codeblock | ||
---|---|---|
| ||
version: '2.4' services: database: healthcheck: test: ["CMD", "mysql", "-uroot", "-proot", "-e", "SELECT version();"] interval: 1m timeout: 10s retries: 3 |
...