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:

OnderdeelCompose ConfiguratieResultaat
Frontendweb: service met poortmappingWebinterface beschikbaar op poort 80
Backendapi: serviceAPI beschikbaar voor frontend en andere services
Databasedb: serviceDatabase is beschikbaar om data in op te slaan
Relatiesdepends_on en netwerkServices starten in juiste volgorde

3. Fasen

  1. 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.

  2. Definieer versienummer (optioneel) Actie: Voeg bovenaan het bestand de juiste versie toe. bijvoorbeeld: version: "3.8". Resultaat: Docker Compose weet welke syntax gebruikt wordt.

  3. 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 daaronder build: te gebruiken met een verwijzing naar de locatie van een dockerfile of door image: 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.

  4. 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.

  5. 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.

  1. 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.

  2. Compose uitvoeren Actie: Ga naar de map met het docker-compose.yml bestand en voer docker-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 de Dockerfile van de service.
  • Fout: connection refused ➔ Mogelijk is de afhankelijkheid nog niet klaar (gebruik depends_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