Meer informatie over Docker Compose
Stappen in de Systematische Probleem Aanpak
1. Doel
Applicaties met meerdere containers gestructureerd en efficiënt starten met één configuratiebestand.
2. Subdoelen
Splits het proces in subdoelen, zoals:
- Definiëren van services (bijv. frontend, backend, database)
- Inrichten van netwerken en volumes
- Configureren van omgevingsvariabelen
- Opzetten van afhankelijkheden tussen services
Casus
Webapplicatie bestaande uit drie services:
Onderdeel Compose Configuratie Resultaat Frontend web:
service met poortmappingWebinterface beschikbaar op poort 80 Backend api:
serviceAPI beschikbaar voor frontend en andere services Database db:
serviceDatabase is beschikbaar om data in op te slaan Relaties depends_on
en netwerkServices starten in juiste volgorde
3. Fasen
-
Aanmaken docker-compose.yml Actie: Maak een bestand aan met de naam
docker-compose.yml
in de root van je projectmap. Resultaat: Een YAML-bestand waarin je de configuratie van je containers opslaat. -
Definieer versienummer (optioneel) Actie: Voeg bovenaan het bestand de juiste versie toe. bijvoorbeeld:
version: "3.8"
. Resultaat: Docker Compose weet welke syntax gebruikt wordt. -
Services aanmaken Actie: Voeg onder
services:
één of meerdere containers als services toe. Dit doe je door de service eerst een naam te geven. bijvoorbeeld:Backend:
. Door in de regel daaronderbuild:
te gebruiken met een verwijzing naar de locatie van een dockerfile of doorimage:
te gebruiken en te verwijzen naar een bestaande image definieer je welke containers opgestart of gemaakt moeten worden. Resultaat: Elke service wordt als aparte container gedefinieerd en geconfigureerd. -
Poorten configureren Actie: Om de applicatie te bereiken moet je een poort van je host machine koppelen aan een poort van een service (vaak doe je dit dus alleen voor de frontend). Dit doe je door in de service
ports:
met daaronder bijvoorbeeld- "80:80"
. De eerste poort (voor de:
) is de hostpoort vanuit waar jij je applicatie benadert. De tweede poort is de poort die je applicatie aanspreekt. Dit verschilt per applicatie dus controleer dit. Resultaat: Een gekoppelde poort naar de service. -
Afhankelijkheden opzetten Actie: Gebruik binnen een service
depends_on:
gevolgd door de naam van een andere service om aan te geven in welke volgorde services moeten starten. Bijvoorbeeld:
services:
api:
image: image-naam
depends_on:
db:
db:
image: db-image-naam
Resultaat: Bijvoorbeeld: backend wacht op database.
-
Netwerk configureren (optioneel) Actie: Voeg indien nodig een eigen netwerk toe onder
networks:
en wijs deze toe aan services. Resultaat: Beter controle over communicatie tussen containers. -
Compose uitvoeren Actie: Ga naar de map met het
docker-compose.yml
bestand en voerdocker-compose up
uit in de terminal. Resultaat: Alle containers worden opgebouwd en gestart zoals gedefinieerd.
Correctieve feedback tijdens de uitvoer
- Fout:
service ... failed to build
➔ Controleer het pad en deDockerfile
van de service. - Fout:
connection refused
➔ Mogelijk is de afhankelijkheid nog niet klaar (gebruikdepends_on
). - Fout:
volume not found
➔ Controleer of volumes correct gedefinieerd zijn en controleer de indentatie.
Tips voor efficiënt gebruik van Docker Compose
- Gebruik
.env
bestanden voor herbruikbare omgevingsvariabelen. - Gebruik
docker-compose down -v
om ook volumes te verwijderen tijdens opruimen. - Gebruik
docker-compose logs -f
om live de output van je containers te volgen. - Scheid services logisch (bijv. frontend/backend/db) om debugging makkelijker te maken.
- Gebruik
docker compose watch
om automatisch je containers te herstarten bij wijzigingen in je broncode.
Volgende stap: Uitleg Docker Volumes