Wat is Docker Compose?

Docker Compose is een tool waarmee je multi-container Docker applicaties eenvoudig kunt definiëren en draaien. In een docker-compose.yml bestand beschrijf je de configuratie van één of meerdere containers, zodat ze samen als één applicatie functioneren.

Casus

Een ontwikkelaar wil een webapplicatie draaien die bestaat uit een frontend, backend en database. Met Docker Compose definieert hij in één bestand hoe deze drie containers met elkaar samenwerken, zodat de gehele applicatie eenvoudig gestart kan worden.

Hoe zit Docker Compose in elkaar?

Een docker-compose.yml bestand is een YAML bestand waarin je de configuratie van je applicatie vastlegt. Hieronder staan de belangrijkste onderdelen van dit bestand.

Tip

Het is mogelijk om Het in meerdere bestanden op te splitsen door met include: naar andere compose bestanden te verwijzen.

version

Specificeert de Compose-versie die wordt gebruikt. Dit veld is bij recente Docker-versies optioneel geworden, maar kan helpen bij compatibiliteit met oudere systemen.

services

Hier definieer je de verschillende containers(services) die deel uitmaken van je applicatie. Als je de service een naam hebt gegeven gebruik je het commando build:, waarmee je de build-context of een verwijzing naar een Dockerfile aangeeft. Je kunt ook direct een image opgeven met het image: commando. Bij iedere service stel je via ports de koppeling van containerpoorten naar de host in en bepaal je met environment de benodigde variabelen voor de service. Daarnaast kun je ook een depends_on: meegeven, waarna je andere services kunt definiëren die moeten opstarten voordat de huidige service opstart om problemen te voorkomen.

volumes

Met volumes kun je data delen tussen de host en de container of tussen verschillende containers. Dit zorgt ervoor dat data behouden blijft, ook als containers verwijderd worden.

networks

Netwerken regelen hoe de services binnen de applicatie met elkaar communiceren. Standaard maakt Docker Compose één netwerk aan waarin alle services automatisch met elkaar verbonden zijn. Daarnaast biedt Docker Compose de mogelijkheid om meerdere netwerken te definiëren en aan specifieke services toe te wijzen. Dit geeft je meer controle over de communicatie.

develop & watch

Voor ontwikkelomgevingen is het handig om codewijzigingen automatisch door te voeren zonder handmatig opnieuw te hoeven opstarten. Dit bereik je met volume-mounting en een watcher-tool binnen je container.

Codevoorbeeld

version: "3.8"
 
services:
  web:
    build: .
    ports:
      - "80:80"
    environment:
      - APP_ENV=production
    depends_on:
      - db
 
  db:
    image: postgres:13
    environment:
      - POSTGRES_USER=example
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=example_db
    volumes:
      - db_data:/var/lib/postgresql/data
 
volumes:
  db_data:

Hoe gebruik je Docker Compose?

Met Docker Compose start je alle gedefinieerde services met één enkel commando. Door in de directory van je docker-compose.yml bestand het commando docker-compose up uit te voeren, worden de containers in de juiste volgorde opgebouwd en gestart. Dit zorgt voor een gestroomlijnde en consistente deployment van je applicatie.

Casus

Een team ontwikkelt een applicatie met meerdere services en wil het deployment-proces automatiseren. Door Docker Compose te gebruiken, kunnen alle benodigde containers in één keer worden opgestart, wat de ontwikkel- en testfase aanzienlijk vereenvoudigt.


Volgende stap: Stappen Docker Compose