Docker compose
Op deze pagina:
Meerdere containers tegelijk met Docker Compose
De Docker opdracht werkt alleen met één container tegelijjk. Als je met meerdere containers tegelijk wilt werken, dan is Docker Compose een oplossing. Docker Compose is een gereedschap waarmee je containers kunt definiëren in een YAML bestand. Je kunt deze containers dan allemaal starten met een enkele opdracht. Dit kan handig zijn als je project afhankelijk is van andere diensten, zoals een web app die afhankelijk is van een database server. Je kunt beide containers definiëren in je docker-compose.yml en profiteren van een gestroomlijnd beheer en geautomatiseerd netwerk.
Een voorbeeld van een docker-compose.yml bestand:
version: "3"
services:
app:
image: app-server:latest
ports:
- 8000:80
database:
image: database-server:latest
volumes:
- database-data:/data
volumes:
database-data:
Dit definieert twee containers (app en database). Een volume wordt gemaakt voor de database. Deze wordt gemount op /data in de container. De app server's poort 80 wordt gekoppeld aan poort 8000 van de host. Gebruik docker-compose up -d om beide services te starten, inclusief het netwerk en de volume.
Met Docker Compose kun je herbruikbare container definities schrijven die je kan delen met anderen.
Wat doet 'version' in een docker compose file?
In een docker-compose.yml-bestand wordt version gebruikt om de versie van het Docker Compose-bestandsformaat aan te geven. Dit hielp eerder Docker te bepalen hoe het bestand geïnterpreteerd moest worden.
Oorspronkelijk waren er verschillende versies zoals:
Version 1: De originele syntax, zonder ondersteuning voor netwerken en volumes.
Version 2: Introduceerde ondersteuning voor geavanceerde netwerk- en volumeconfiguraties.
Version 3: Geoptimaliseerd voor gebruik met Docker Swarm, met extra orkestratiefuncties.
Echter, vanaf Docker Compose v3.0+ en met de huidige Docker-versies is het specificeren van de version in het bestand niet langer vereist en wordt het meestal weggelaten. De moderne implementaties van Docker Compose detecteren automatisch het juiste formaat.
Wachtwoorden gebruiken zonder deze in docker-compose.yml op te slaan
Er zijn verschillende manieren om wachtwoorden veilig te gebruiken in Docker Compose zonder ze direct in docker-compose.yml op te slaan, waaronder:
Omgevingsvariabelen
Je kunt wachtwoorden opslaan in een .env-bestand en deze refereren in je docker-compose.yml.
Bijvoorbeeld:
version: '3.8'
services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
In .env:
MYSQL_ROOT_PASSWORD=supergeheimwachtwoord
Docker Secrets (voor Docker Swarm)
Als je Docker Swarm gebruikt, kun je secrets gebruiken om wachtwoorden veilig op te slaan:
version: '3.8'
services:
db:
image: mysql
secrets:
- db_password
secrets:
db_password:
file: ./db_password.txt
Dit zorgt ervoor dat het wachtwoord als een bestand wordt gemount in '/run/secrets/db_password' binnen de container.