Docker volumes
Op deze pagina:
Gegevens buiten een container opslaan
Docker containers zijn standaard vluchtig. Veranderingen in het bestandssysteem van een container blijven niet bestaan nadat een container is gestopt. Het is dus niet veilig om bestanden te bewaren in een container die met de standaard "run" opdracht is gestart.
Er zijn drie soorten mount types: bind, volume en tmpfs. Deze kunnen met de "docker run" opdracht worden meegegeven via de --mount vlag.
Bind mounts hebben beperkte functionaliteit in vergelijking met volumes en zijn een erfenis uit het verleden. Wanneer je een bind mount gebruikt, wordt een bestand of map op de hostcomputer in een container gemount. Er wordt naar het bestand of de map verwezen door het absolute pad op de hostcomputer. Hierbij worden de toegangsrechten op bestanden en directories overgenomen van de host. Het eigendom van deze bestanden en mappen staat op een UID en GID die in de host bekend is, maar in de container niet hoeft te bestaan. Als er vanuit de container bestanden en directories worden aangepast, dan krijgen die de UID en GID die in de container bestaat, maar niet in de host hoeft te bestaan. Host en container delen één kernel, dus één set gebruikers en groepen, maar de gebruikers en groepen worden niet bepaald door de kernel, maar ingesteld via bestanden als "/etc/passwd". Dit gedoe met rechten is een reden om geen Bind mounts te gebruiken. Wanneer je daarentegen een volume gebruikt, wordt er een nieuwe directory gemaakt in de opslagdirectory van Docker op de hostcomputer en beheert Docker de inhoud van die directory. Een reden om toch Bind mounts te gebruiken kan zijn omdat je tijdens de ontwikkeling van een app regelmatig code- of configuratiebestanden moet aanpassen en je niet telkens na iedere kleine aanpassing een nieuwe container wil maken.
Voorbeeld van een Bind mount:
docker run -d -it --name mijn-container --mount type=bind,source=/nginxconfig,target=/etc/nginx nginx:latest
Met tmpfs mounts maak je een tijdelijk bestandssysteem aan in het geheugen. In tegenstelling tot volumes en bindkoppelingen, is een tmpfs koppeling tijdelijk. Wanneer de container stopt, wordt de tmpfs koppeling verwijderd en worden de bestanden die daar zijn geschreven niet bewaard. Dit is handig om gevoelige bestanden die je niet wilt bewaren tijdelijk op te slaan. In tegenstelling tot volumes en bindkoppelingen, kun je geen tmpfs koppelingen tussen containers delen. Deze functionaliteit is alleen beschikbaar als je Docker op Linux gebruikt.
Volumes zijn meestal de beste keuze voor het opslaan van gegevens buiten een container. Volumes zijn opslag eenheden die worden gemount op container bestandsystemen. De gegevens in een "volume" zullen blijven bestaan nadat de gelinkte container is gestopt. Dit "volume" kan dan later weer gemount worden op een andere container. Volumes werken op zowel Linux- als Windows-containers.
Voorbeeld van het maken en mounten van een Volume:
docker volume create nginx-config
docker run -d --name mijn-container --mount source=nginx-config,target=/etc/nginx nginx:latest
In Linux zijn de volumes hier te vinden: /var/lib/docker/volumes/*volumeID*/_data