docker volumes en netwerken beheren
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. ```bash 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. ```yaml volumes: db-data: services: database: image: postgres:16 volumes: - db-data:/var/lib/postgresql/data ```
3. Maak een user-defined bridge network aan In plaats van het default netwerk gebruik je een named netwerk voor betere DNS-resolutie en isolatie. ```yaml networks: app-net: driver: bridge ```
4. Koppel services aan het netwerk Geef aan welke services met elkaar moeten communiceren. Een database hoeft niet direct bereikbaar te zijn voor de buitenwereld. ```yaml services: web: image: nginx:latest networks: - app-net database: image: postgres:16 networks: - app-net ```
5. Isoleer een netwerk met `internal: true` Gebruik dit voor databases of backend-services die geen internettoegang nodig hebben. ```yaml networks: internal-net: driver: bridge internal: true ```
6. Voeg een service toe aan meerdere netwerken Een applicatieservice kan bijvoorbeeld zowel in een publiek als een intern netwerk zitten. ```yaml services: app: image: my-app:latest networks: - frontend-net - backend-net ```
7. Ruim ongebruikte volumes op Volumes die niet meer aan een container gekoppeld zijn, blijven schijfruimte innemen. Maak ze periodiek schoon. ```bash 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. ```yaml volumes: shared-data: driver: nfs driver_opts: server: nfs-server.example.com path: /exports/data ```
Verificatie
Controleer of volumes correct zijn aangemaakt en netwerken functioneren: ```bash Lijst alle volumes docker volume ls
Inspecteer een volume docker volume inspect mijn-data
Toon netwerken en aangesloten containers docker network ls docker network inspect app-net ```
Test DNS-resolutie tussen services: ```bash 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.