docker volumes en netwerken beheren
Docker Volumes en Netwerken Beheren
Dit artikel legt uit hoe je Docker volumes en netwerken beheert voor persistente data en veilige servicecommunicatie in multi-container applicaties.
Vereisten
- Docker Engine 24.0 of hoger - Docker Compose V2 (ingebouwd in Docker Desktop of los geïnstalleerd) - Basiskennis van Docker containers en `docker-compose.yml` - Terminal of CLI met `docker` commando beschikbaar
Stappen
1. Maak een named volume aan voor persistente data
Gebruik `docker volume create` in plaats van bind mounts. Dit geeft Docker volledig beheer over de opslag.
docker volume create mijn-data
2. Definieer volumes declaratief in docker-compose.yml Voeg een top-level `volumes` sectie toe en koppel deze aan een service. Dit zorgt voor reproduceerbaarheid en duidelijke scheiding.
volumes:
db-data:
services:
database:
image: postgres:16
volumes:
- db-data:/var/lib/postgresql/data3. Maak een user-defined bridge network aan In plaats van het default netwerk gebruik je een named netwerk voor betere DNS-resolutie en isolatie.
networks:
app-net:
driver: bridge4. Koppel services aan het netwerk Geef aan welke services met elkaar moeten communiceren. Een database hoeft niet direct bereikbaar te zijn voor de buitenwereld.
services:
web:
image: nginx:latest
networks:
- app-net
database:
image: postgres:16
networks:
- app-net5. Isoleer een netwerk met `internal: true` Gebruik dit voor databases of backend-services die geen internettoegang nodig hebben.
networks:
internal-net:
driver: bridge
internal: true6. Voeg een service toe aan meerdere netwerken Een applicatieservice kan bijvoorbeeld zowel in een publiek als een intern netwerk zitten.
services:
app:
image: my-app:latest
networks:
- frontend-net
- backend-net7. Ruim ongebruikte volumes op
Volumes die niet meer aan een container gekoppeld zijn, blijven schijfruimte innemen. Maak ze periodiek schoon.
docker volume prune
8. Gebruik volume plugins voor multi-host setups Voor clusters (Docker Swarm, Kubernetes) gebruik je externe storage via plugins. Dit maakt volume migratie tussen hosts mogelijk.
volumes:
shared-data:
driver: nfs
driver_opts:
server: nfs-server.example.com
path: /exports/dataVerificatie
Controleer of volumes correct zijn aangemaakt en netwerken functioneren:
Lijst alle volumes
docker volume ls</p><p>Inspecteer een volume
docker volume inspect mijn-data</p><p>Toon netwerken en aangesloten containers
docker network ls
docker network inspect app-netTest DNS-resolutie tussen services:
docker compose exec web ping database
Veelgestelde problemen
1. Container kan andere service niet vinden op hostnaam Oorzaak: Services zitten niet in hetzelfde user-defined netwerk. Oplossing: Voeg beide services expliciet toe aan hetzelfde named netwerk in `docker-compose.yml`.
2. Data verdwijnt na container verwijdering Oorzaak: Gebruik van container-internal storage in plaats van een volume. Oplossing: Definieer een named volume en koppel dit aan de service. Committen van containers is geen vervanging.
3. Volume ruimte raakt vol, maar container draait nog Oorzaak: Ongebruikte volumes blijven bestaan. Oplossing: Draai `docker volume prune` regelmatig of automatiseer dit in een cronjob. Voeg `--filter` toe om specifieke volumes te behouden.
Veelvoorkomende fouten ontstaan door het mixen van bind mounts en volumes in dezelfde applicatie — kies één strategie en blijf daarbij.