docker volumes en netwerken beheren
Docker Volumes En Netwerken Beheren
Docker volumes en netwerken beheren
Dit artikel legt uit hoe je Docker volumes voor persistente data en netwerken voor containercommunicatie beheert. Gericht op ontwikkelaars en DevOps-engineers die met Docker 24.0+ werken.
Vereisten
- Docker Engine 24.0 of hoger (check met `docker --version`) - Docker Compose v2.23+ (optioneel, voor stap 8; check met `docker compose version`) - Root/sudo toegang tot de Docker-host (of gebruiker in `docker` group) - Basiskennis van de commandoregel en Docker-concepten
Stappen
1. Maak een Docker volume aan Gebruik `docker volume create` om een persistent volume te maken. Docker beheert volumes in `/var/lib/docker/volumes/`, los van de container lifecycle. ```bash docker volume create mijn-data ```
2. Toon alle beschikbare volumes Overzicht helpt bij opschonen en debuggen. Volumes worden weergegeven met driver, naam en grootte. ```bash docker volume ls ```
3. Inspecteer een volume Bekijk details zoals mountpoint en driver. Handig om te verifiëren waar data fysiek staat. ```bash docker volume inspect mijn-data ```
4. Koppel een volume aan een container Mount het volume op een pad in de container. Data blijft behouden na container-verwijdering. Voeg `:ro` toe voor read-only mounten (best practice voor alleen-lezen data). ```bash docker run -d --name mijn-app -v mijn-data:/app/data nginx:latest ```
5. Maak een user-defined bridge network aan Standaard bridge-netwerken missen DNS-resolutie op containernaam. User-defined bridge-netwerken lossen dit op: containers vinden elkaar via naam, niet IP. ```bash docker network create mijn-netwerk ```
6. Start containers in een specifiek netwerk Containers in hetzelfde user-defined netwerk communiceren via containernaam. Bij host netwerk (optioneel) deelt de container het host-netwerk volledig. ```bash docker run -d --name api --network mijn-netwerk nginx:latest docker run -d --name db --network mijn-netwerk postgres:16 ```
7. Verwijder ongebruikte volumes `docker volume prune` ruimt alle volumes op die niet aan een actieve container zijn gekoppeld. Bespaart schijfruimte. Voeg `--force` toe om bevestiging over te slaan. ```bash docker volume prune ```
8. Gebruik Docker Compose voor volumes en netwerken (optioneel) Declaratief beheer via `docker-compose.yml` vereenvoudigt herhaalbare setups. Volumes en netwerken worden hier gedefinieerd, niet handmatig aangemaakt. ```yaml version: "3.9" services: db: image: postgres:16 volumes: - db-data:/var/lib/postgresql/data networks: - backend api: image: mijn-app:latest volumes: - ./config:/app/config:ro networks: - backend volumes: db-data: networks: backend: ``` Start met: ```bash docker compose up -d ```
Verificatie
Controleer of volume en netwerk correct werken:
```bash Check dat volume is aangemaakt en gemount docker volume ls | grep mijn-data docker inspect mijn-app --format '{{ .Mounts }}'
Test containercommunicatie via netwerk docker exec api ping db of via curl: docker exec api curl http://db:5432
Na stap 8: check alle resources docker compose ps docker volume ls docker network ls ```
Alle commando's moeten zonder fouten terugkeren. De ping/curl naar de db-container moet succesvol zijn.
Veelgestelde problemen
1. Container kan geen verbinding maken met andere container in hetzelfde netwerk
Oorzaak: je gebruikt het standaard bridge-netwerk in plaats van een user-defined network.
Oplossing: verwijder de containers, maak een user-defined network met `docker network create
2. Volume blijft schijfruimte innemen na verwijderen container
Oorzaak: `docker volume rm` is niet uitgevoerd; alleen `docker rm` verwijdert de volume niet.
Oplossing: voer `docker volume prune` of specifiek `docker volume rm
3. Permission denied bij schrijven naar een volume Oorzaak: de container draait als een andere user dan de eigenaar van het volume-mountpoint. Oplossing: gebruik `docker run --user` of pas de permissions aan op hostniveau. Voor PostgreSQL bijvoorbeeld: `docker run -e POSTGRES_USER=myuser ...` of voeg `:Z` toe bij SELinux-systemen.
Docker blijft evolueren — check de changelog voor jouw specifieke versie, want `docker volume prune` kreeg in v25 bijvoorbeeld een `--filter` optie voor gericht opschonen.