Docker-volumes en -netwerken beheren
Docker Volumes en Netwerken Beheren
Dit artikel legt uit hoe u Docker volumes en netwerken beheert voor persistente gegevens en veilige servicecommunicatie in multi-container applicaties.
Vereisten
- Docker Engine 24.0 of hoger - Docker Compose V2 (ingebouwd in Docker Desktop of afzonderlijk geïnstalleerd) - Basiskennis van Docker containers en `docker-compose.yml` - Terminal of CLI met het `docker` commando beschikbaar
Stappen
1. Maak een named volume aan voor persistente gegevens
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 een duidelijke scheiding.
volumes:
db-data:
services:
database:
image: postgres:16
volumes:
- db-data:/var/lib/postgresql/data3. Maak een user-defined bridge netwerk aan In plaats van het standaard netwerk gebruikt u 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 rechtstreeks 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 langer aan een container gekoppeld zijn, blijven schijfruimte innemen. Maak ze regelmatig schoon.
docker volume prune
8. Gebruik volume plugins voor multi-host setups Voor clusters (Docker Swarm, Kubernetes) gebruikt u externe opslag via plugins. Dit maakt volumemigratie 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 bevinden zich niet in hetzelfde user-defined netwerk. Oplossing: Voeg beide services expliciet toe aan hetzelfde named netwerk in `docker-compose.yml`.
2. Gegevens verdwijnen na verwijdering van de container Oorzaak: Gebruik van container-interne opslag in plaats van een volume. Oplossing: Definieer een named volume en koppel dit aan de service. Het committen van containers is geen vervanging.
3. Volume ruimte raakt vol, maar de container draait nog Oorzaak: Ongebruikte volumes blijven bestaan. Oplossing: Voer `docker volume prune` regelmatig uit of automatiseer dit in een cronjob. Voeg `--filter` toe om specifieke volumes te behouden.
Veelvoorkomende fouten ontstaan door het mengen van bind mounts en volumes in dezelfde applicatie — kies één strategie en blijf daarbij.