Docker volumes en netwerken beheren
Docker volumes en netwerken beheren
Dit artikel legt uit hoe je Docker volumes en netwerken beheert op Pixzo, gericht op gebruikers die al met Docker-containers werken maar nog geen volumes of netwerken hebben geconfigureerd.
Vereisten
- Docker Engine 24.0 of hoger - Toegang tot een terminal met Docker-commando's - Bestaande Docker-containers om te koppelen aan volumes en netwerken
Stappen
1. Controleer bestaande volumes
docker volume ls
Deze opdracht toont alle volumes op je systeem. Volumes slaan gegevens op die moeten overleven nadat een container is gestopt of verwijderd. In tegenstelling tot de interne bestandssysteemlaag van een container, die verdwijnt bij het verwijderen van de container, blijven volumes behouden tenzij je ze expliciet verwijdert.
2. Maak een nieuw volume aan
docker volume create mijn-volume
Dit commando maakt een nieuw volume aan met de naam `mijn-volume`. Docker wijst standaard het `local`-stuurprogramma toe, wat betekent dat het volume wordt opgeslagen op de hostmachine onder `/var/lib/docker/volumes/`.
3. Koppel een volume aan een container
docker container run -d --name mijn-container -v mijn-volume:/data nginx:alpine
De `-v`-optie koppelt het volume `mijn-volume` aan het pad `/data` in de container. Alle gegevens die de container naar `/data` schrijft, worden opgeslagen in het volume en blijven bestaan als je de container verwijdert met `docker container rm mijn-container`.
4. Inspecteer volume-details
docker volume inspect mijn-volume
Deze opdracht toont metadata over het volume, waaronder het mountpoint op de host en het gebruikte stuurprogramma. Je ziet ook of het volume door containers wordt gebruikt.
5. Verwijder een volume
docker volume rm mijn-volume
Docker verwijdert alleen volumes die niet door een container worden gebruikt. Deze voorzorgsmaatregel voorkomt dat je per ongeluk gegevens verliest. Gebruik `docker volume rm -f mijn-volume` om een volume te verwijderen dat nog aan een container is gekoppeld — dit forceert de verwijdering.
6. Toon beschikbare netwerken
docker network ls
Dit commando toont alle netwerken op je systeem. Docker maakt standaard drie netwerken aan: `bridge`, `host` en `none`. Het `bridge`-netwerk is het standaardnetwerk voor containers en stelt ze in staat om met elkaar te communiceren via IP-adressen.
7. Maak een aangepast netwerk aan
docker network create --driver bridge mijn-netwerk
Met dit commando maak je een nieuw bridge-netwerk aan. Aangepaste netwerken bieden betere isolatie en gecontroleerde communicatie tussen containers. Je kunt ook een host-naar-IP-koppeling toevoegen bij het starten van een container met de `--add-host`-optie, wat de DNS-resolutie binnen de container aanpast.
8. Koppel een container aan een netwerk
docker network connect mijn-netwerk mijn-container
Deze opdracht verbindt een bestaande container met een netwerk. Je kunt een container aan meerdere netwerken koppelen. Containers binnen hetzelfde netwerk kunnen elkaar bereiken via hun containernaam, wat de communicatie tussen services vereenvoudigt.
Verificatie
Controleer of je volume en netwerk correct functioneren:
docker volume ls
docker network ls
docker container inspect mijn-container | grep -A 10 "Networks"De eerste twee commando's bevestigen dat het volume en netwerk bestaan. Het inspectiecommando toont aan welk netwerk de container is gekoppeld. Je ziet ook of het volume correct is gemount onder het pad `/data`.
Veelgestelde problemen
1. Kan een volume niet verwijderen
Docker weigert de verwijdering als een container het volume gebruikt. Los dit op door eerst de container te stoppen en te verwijderen:
docker container rm -f mijn-container
docker volume rm mijn-volume2. Containers kunnen elkaar niet bereiken via het netwerk
Containers op verschillende netwerken communiceren niet met elkaar. Zorg dat beide containers op hetzelfde netwerk zitten:
docker network connect mijn-netwerk container-a
docker network connect mijn-netwerk container-b3. Ongebruikte volumes nemen schijfruimte in
Ruim ongebruikte volumes op met het opruimcommando:
docker volume prune
Voeg `--filter` toe om alleen volumes ouder dan een bepaald tijdstip te verwijderen:
docker volume prune --filter "until=168h"
Docker hanteert dezelfde voorzichtigheid bij het opruimen van netwerken — `docker network prune` verwijdert alleen netwerken die door geen enkele container worden gebruikt.
De levenscyclus van volumes en netwerken is onafhankelijk van die van containers. Een container kan worden gepauzeerd met `docker container pause`, wat alle processen tijdelijk stillegt, maar het volume en de netwerkverbinding blijven intact. Wanneer je de container hervat, gaan toepassingen verder waar ze waren gebleven — met dezelfde volumegegevens en netwerkverbindingen. Die onafhankelijkheid betekent dat je volumes en netwerken kunt beheren zonder de containers te beïnvloeden, maar het vereist ook dat je zelf bijhoudt welke resources actief zijn.