Wat zijn Docker-volumes en hoe gebruikt u ze?

0
177

Standaard zijn Docker-containers volledig staatloos. De gegevens die op de container zijn opgeslagen, zijn kortstondig en worden gewist wanneer de container wordt afgesloten. Dit is natuurlijk niet ideaal voor veel toepassingen, dus Docker biedt een aantal manieren om met staat om te gaan.

Wat zijn volumes?

De eenvoudigste manier om Docker-gegevens persistent te maken, is bind-mounts, die letterlijk een locatie op de schijf van de host binden aan een locatie op de schijf van de container. Deze zijn eenvoudig te maken en te gebruiken, maar zijn een beetje janky omdat je de mappen zelf moet instellen en beheren.

Volumes zijn als virtuele harde schijven die worden beheerd door Docker. Docker zorgt ervoor dat ze op schijf worden opgeslagen (meestal in /var/lib/docker/volumes/), en geeft ze een gemakkelijk te onthouden enkele naam in plaats van een mappad. Het is gemakkelijk om ze aan te maken en te verwijderen met de Docker CLI.

Deze hebben naast het beheer door Docker nog een aantal andere voordelen. Ze werken op zowel Linux- als Windows-containers, ze kunnen veiliger worden gedeeld tussen meerdere containers en dankzij de volumedrivers kunnen cloudproviders externe hosting bieden voor de onderliggende gegevens. Over het algemeen zijn volumes gemakkelijker te gebruiken dan bind-mounts en worden ze door Docker aanbevolen voor het beheren van de status.

Natuurlijk moet u overwegen of u Docker-gegevens echt op de server wilt opslaan. Voor veel toepassingen is het gebruik van een externe externe gegevensopslag zoals Amazon S3 of een externe database voldoende om de gegevens die ze gebruiken op te slaan zonder deze vast te leggen op de frontend-server.

Hoe gebruik je ze?

Je kunt een nieuw volume maken vanaf de opdrachtregel met het volgende commando:

docker volume create nginx-config Advertisement

En dan , wanneer u uw Docker-container gaat uitvoeren, koppelt u deze aan het doel in de container met de –mount vlag:

docker run -d –name devtest –mount source=nginx-config,target=/etc/nginx nginx:latest

Als u docker inspect <name> uitvoert, ziet u het volume vermeld onder de sectie Koppelingen.

Als je Docker Compose gebruikt, is de installatie ook eenvoudig. Voeg eenvoudig een volume-item toe voor elke containerservice die u heeft en wijs vervolgens een volumenaam toe aan een locatie in de guest. U moet ook een lijst met volumes opgeven in een volumesleutel op het hoogste niveau zodat Compose kan worden geleverd.

version: '3.0' services: web: image: nginx:latest ports: – '80:80' volumes: – nginx-config:/etc/nginx/volumes: nginx-config:

Hiermee wordt automatisch het volume gemaakt voor deze Componeren. Als u een vooraf gemaakt volume van buiten Compose wilt gebruiken, specificeert u external: true in de volumeconfiguratie:

volumes: cms-content: external: true

Als u in plaats daarvan wilt doe gewoon een bind-mount en doe geen moeite met volumes, voer gewoon een padnaam in in plaats van de volumenaam en definieer de volumenamen niet.

version: '3.0' services: web: image: nginx:latest ports: – '80:80' volumes: – /docker/nginx-config/:/etc/nginx/Advertisement

U kunt Docker's lezen 8217;s volledige documentatie over het gebruik van volumes met Compose als uw gebruikssituatie iets specifiekers vereist dan dit.

Docker-volumes overzetten

Docker-volumes zijn gewoon mappen die automatisch worden aangemaakt en worden opgeslagen in /var/lib/docker/volumes/, waarbij elk volume wordt opgeslagen onder ./volumename/_data/. Om een ​​back-up te maken en te herstellen, kunt u gewoon rechtstreeks een back-up van deze volumes maken.

Als u in plaats daarvan de Docker CLI wilt gebruiken, bieden ze helaas geen gemakkelijke manier om dit te doen. Om een ​​back-up te maken van de volumes van een container, heb je de containernaam nodig, evenals de aankoppellocatie waarin de gegevens zijn opgeslagen.

De manier om het te doen is een beetje een hack, je moet een opdracht uitvoeren in een nieuwe Docker-container, de huidige shell-directory koppelen, het volume aan die container koppelen en de directory vervolgens in een back-up tareren. Je krijgt een backup.tar van het volume:

docker run –rm –volumes-from containername -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar/mountlocation

Vervolgens kunt u op dezelfde manier het archief uitpakken in de doelmap:

docker run –rm –volumes-from containername -v $(pwd):/backup ubuntu bash -c “cd /mountlocation &&tar xvf /backup/backup.tar –strip 1”

Dit is echter nog steeds beter dan de hostlocatie te weten, dus u kunt dit automatiseren als u dat wilt.