Overzicht van Docker-volumes
Een Docker-volume is een directory of bestand dat wordt gekoppeld aan een specifiek pad in het bestandssysteem van de host. Het stelt gegevens in staat om onafhankelijk van de levenscyclus van de container te worden beheerd, wat flexibeler en efficiënter is dan het bundelen van gegevens met de container-image. Volumes kunnen ook gelijktijdig door meerdere containers worden gedeeld.
Waarom volumes nodig zijn
Containers zijn van nature vluchtig. Dit betekent dat wanneer een container wordt verwijderd, alle gegevens die erin zijn opgeslagen ook verloren gaan. Om belangrijke gegevens zoals databases, logbestanden of door gebruikers geüploade bestanden permanent te bewaren, moet u volumes gebruiken. Volumes lossen dit probleem op, waardoor de stabiliteit en flexibiliteit van op containers gebaseerde applicaties wordt verbeterd.
Voordelen van volumes
De belangrijkste voordelen van het gebruik van Docker-volumes zijn als volgt:
- Gegevenspersistentie: Gegevens blijven behouden, zelfs als de container wordt verwijderd.
- Gegevens delen: Meerdere containers kunnen hetzelfde volume delen om toegang te krijgen tot gegevens.
- Prestaties: Het kan betere I/O-prestaties bieden dan bind mounts.
- Portabiliteit: Volumes zijn niet opgenomen in het Dockerfile, waardoor images lichter blijven.
- Back-up/Herstel: Volumes kunnen eenvoudig worden geback-upt en hersteld.
Belangrijke Docker Volume-commando's
Laten we verschillende commando's verkennen voor het efficiënt beheren van Docker-volumes. Probeer elke optie te combineren om volumes te maken, te inspecteren, te verwijderen en te verbinden met containers.
1. Volumes maken en weergeven
2. Volumes verwijderen
3. Een volume verbinden met een container
Gegenereerde opdracht:
Probeer de opdrachtcombinaties.
Uitleg:
`docker volume` Voer het commando uit.
Combineer deze opties en voer de opdracht virtueel uit met de AI.
Soorten volumes
In Docker zijn er twee primaire soorten koppelingen om gegevens met containers te verbinden: Volumes en Bind mounts. Elk heeft verschillende gebruikssituaties en kenmerken.
1. Volumes
Dit is de meest geprefereerde methode voor het permanent opslaan van gegevens in Docker. Het wordt opgeslagen in een specifiek gedeelte van het bestandssysteem van de host dat door Docker wordt beheerd.
- Creatie en beheer: Ze worden gemaakt en beheerd via de Docker CLI, met behulp van de `docker volume`-commando's.
- Locatie: Opgeslagen in het `/var/lib/docker/volumes/`-pad van de host. Het wordt niet aanbevolen dat gebruikers dit interne pad rechtstreeks benaderen.
- Kenmerken: Ze zijn onafhankelijk van de levenscyclus van de container en kunnen worden gedeeld door meerdere containers. Ze bieden prestatievoordelen, met name in Docker Desktop.
2. Bind mounts
Elke locatie op het bestandssysteem van de host kan binnen een container worden gekoppeld. Dit is handig voor directe toegang tot de bestandssysteemstructuur van de host.
- Creatie en beheer: Ze zijn direct afhankelijk van het bestandssysteem van de host en worden niet expliciet beheerd door Docker.
- Locatie: Elke directory of elk bestand op het bestandssysteem van de host kan in een container worden gekoppeld.
- Kenmerken: Ze zijn voornamelijk nuttig in ontwikkelomgevingen voor het koppelen van broncode aan een container om wijzigingen in realtime te reflecteren, of wanneer een container een specifiek configuratiebestand van de host moet gebruiken.
Gebruiksvoorbeelden
Begrijp hoe u gegevenspersistentie beheert door verschillende scenario's te verkennen waarin Docker-volume-commando's praktisch worden toegepast.
Een benoemd volume maken en gebruiken
docker volume create my_db_data
docker run -d --name my-mysql --mount source=my_db_data,target=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword mysql:latest
Maakt een volume met de naam 'my_db_data' en koppelt het aan het gegevensopslagpad van een MySQL-container. De DB-gegevens blijven behouden, zelfs als de container wordt verwijderd.
Een hostdirectory koppelen met een bind mount
docker run -d --name my-nginx-dev -p 80:80 --mount type=bind,source=/path/to/my/app,target=/usr/share/nginx/html nginx:latest
Koppelt de huidige directory van de host (`/path/to/my/app`) aan de webservicedirectory van een Nginx-container (`/usr/share/nginx/html`), zodat wijzigingen die in bestanden op de host worden aangebracht onmiddellijk in de container worden weerspiegeld.
Alle ongebruikte volumes verwijderen
docker volume prune
Maakt schijfruimte vrij door alle Docker-volumes te verwijderen die niet aan een container zijn gekoppeld. Er wordt een bevestigingsbericht weergegeven.
Een specifiek volume geforceerd verwijderen (Waarschuwing)
docker volume rm -f old_volume
Verwijdert geforceerd een volume met de naam 'old_volume', ongeacht of het in gebruik is of niet. Dit moet met uiterste voorzichtigheid worden gebruikt, aangezien het kan leiden tot gegevensverlies.