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