Dagelijks gebruik Docker
Docker in het dagelijkse leven
Gebruik van Docker Compose voor Multi-container Apps
Als je applicatie uit meerdere services bestaat, zoals bijvoorbeeld een backend, database, cache,..., kun je Docker Compose gebruiken om al deze services te definiëren en te beheren in een enkele docker-compose.yml file. Dit maakt het eenvoudig om je app lokaal op te starten en in één keer alle onderdelen te beheren.
Voorbeeld docker compose
Hieronder een voorbeeld van een docker compose file die een web service en een database opstart.
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=development
db:
image: postgres:latest
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Containers beheren met docker compose
Je kan met 1 simpel docker compose commando alle containers die je gedefinieerd hebt in je docker compose file starten en stoppen:
docker compose up -d # Start alle containers
docker compose down # Stop en verwijder alle containers en netwerken
Je kan er eventueel ook voor kiezen om te stoppen in plaats van te verwijderen:
docker compose stop
Over het algemeen is het echter best practise om down en up te gebruiken omdat je zo zeker bent dat je geen "zombie" resources hebt. Het down commando zorgt er namelijk voor dat alles netjes wordt opgeruimd.
Automatiseren van Docker Builds met CI/CD
In een moderne workflow is CI/CD (Continuous integration / Continuous deployment)een belangrijk onderdeel voor het continu testen en bouwen van applicaties.
Stel CI/CD Pipelines in voor Builds: Gebruik een CI/CD platform zoals GitHub Actions, GitLab CI, Jenkins, of CircleCI om elke keer dat je code pusht naar de repository automatisch je Docker-images te bouwen en (indien nodig) te pushen naar een Docker Registry.
Docker caching slim gebruiken
Docker gebruikt caching bij het bouwen van images om lagen die niet zijn veranderd over te slaan. Dit kan de buildtijd aanzienlijk verkorten, vooral bij veel builds.
Optimaliseer de Dockerfile: Plaats instructies die het meest veranderen onderaan je Dockerfile om optimaal gebruik te maken van caching.
Voorbeeld Dockerfile-optimalisatie:
# Plaats eerst basisinstructies die zelden veranderen
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
# Voeg hierna de app-bestanden toe (deze veranderen vaker)
COPY . .
CMD ["npm", "start"]
Automatisch Opschonen van Containers en Images
In een actieve ontwikkelomgeving kunnen ongebruikte Docker-images, volumes, en containers zich snel opstapelen en schijfruimte in beslag nemen. Gebruik tools zoals docker system prune om ongebruikte resources te verwijderen:
Automatisch opschonen met crontab: Stel een cronjob in om regelmatig overbodige Docker-resources op te schonen. Bijvoorbeeld, om elke nacht om middernacht ongebruikte resources te verwijderen:
0 0 * * * docker system prune -af
Gebruik van .env bestanden voor configuraties
Gebruik .env bestanden om configuraties en environment variabelen centraal op te slaan. Je kunt deze variabelen dan eenvoudig in je docker-compose.yml en Dockerfile gebruiken, wat het beheren van omgevingsconfiguraties vereenvoudigt.
Voorbeeld .env bestand:
NODE_ENV=development
PORT=3000
DATABASE_URL=postgres://user:password@db:5432/mydb
Gebruik in docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "${PORT}:3000"
env_file:
- .env
Automatiseren van taken binnen Docker Containers
Je kunt je tests draaien in een Docker-container om consistentie tussen lokale en CI/CD-omgevingen te waarborgen. Dit zorgt ervoor dat je tests draaien in een schone, consistente omgeving, ongeacht waar ze worden uitgevoerd.
Voorbeeld test-commando in Dockerfile:
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["npm", "test"]
Automatisch tests draaien: Met docker-compose kun je ook tests uitvoeren in een service:
version: '3.8'
services:
test:
build: .
command: npm test
env_file:
- .env