Docker Compose: je diensten in één bestand
Met Docker Compose zet je alles wat een programma nodig heeft in één bestand: de image, poorten, volumes en instellingen. Starten, stoppen en bijwerken doe je met één opdracht, en je kunt het bestand bewaren als back-up van je instellingen. Compose zit bij de installatie van Docker; je gebruikt het met docker compose (zonder streepje).
Een eerste compose.yaml
Maak een map, bijvoorbeeld ~/web, en zet daarin het bestand compose.yaml:
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./site:/usr/share/nginx/html:ro
restart: unless-stopped
Zet een bestand index.html in de map site en start het:
docker compose up -d
Open http://je-server:8080. Let op de insprong van twee spaties in het bestand: dat is belangrijk in YAML. Een fout gemaakt? Controleer het bestand met onze YAML-tool of met docker compose config.
De belangrijkste opdrachten
Voer ze uit in de map met het bestand:
docker compose up -d # alles starten (en aanmaken)
docker compose ps # wat draait er
docker compose logs -f # het logboek volgen
docker compose restart # herstarten
docker compose pull # nieuwere images ophalen
docker compose down # stoppen en de containers verwijderen
Met docker compose down blijven je volumes en mappen gewoon bestaan. Voeg je -v toe, dan worden ook de named volumes verwijderd en zijn je gegevens weg. Doe dat dus alleen als je dat echt wilt.
Bijwerken in twee opdrachten
docker compose pull
docker compose up -d
Compose haalt de nieuwe image op en vervangt alleen de containers die veranderd zijn. Je gegevens in volumes blijven bewaard.
Een app met een database
Dit voorbeeld start een database en het beheerprogramma Adminer. De twee vinden elkaar op de naam db. De wachtwoorden zet je niet in het bestand, maar in een apart bestand .env in dezelfde map:
services:
db:
image: mariadb:11
environment:
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MARIADB_DATABASE: app
MARIADB_USER: app
MARIADB_PASSWORD: ${DB_PASSWORD}
volumes:
- db-data:/var/lib/mysql
restart: unless-stopped
adminer:
image: adminer
ports:
- "8081:8080"
depends_on:
- db
restart: unless-stopped
volumes:
db-data:
# .env
DB_ROOT_PASSWORD=gebruik-hier-een-lang-wachtwoord
DB_PASSWORD=en-hier-een-ander-wachtwoord
Maak sterke wachtwoorden met onze wachtwoordgenerator. Beperk daarna wie het bestand mag lezen met chmod 600 .env (zie de chmod-calculator) en zet .env nooit op GitHub.
Handige gewoontes
- Eén map per programma, met daarin
compose.yamlen eventuele gegevens. Zo kun je een programma eenvoudig verhuizen of een back-up maken. - Zet een versie achter de image (zoals
mariadb:11) in plaats vanlatest, zodat een update geen onverwachte grote sprong maakt. - Bekijk kant-en-klare voorbeelden in Handige Docker-programma’s voor thuis.