Docker leren, deel 6: werken met data

In het deel van vandaag van de vertaling van een reeks materialen over Docker zullen we het hebben over het werken met data. In het bijzonder over Docker-volumes. In deze materialen vergeleken we Docker-software-engines voortdurend met verschillende eetbare analogieën. Laten we ook hier niet van deze traditie afwijken. Laat de gegevens in Docker het kruid zijn. Er zijn veel soorten specerijen in de wereld, en in Docker zijn er veel manieren om met data te werken.

Deel 1: Basisprincipes
Deel 2: Termen en concepten
Deel 3: Dockerbestanden
Deel 4: Het verkleinen van de afbeeldingsgrootte en het versnellen van de opbouw ervan
Deel 5: commando's
Deel 6: werken met data

Docker leren, deel 6: werken met data

Houd er rekening mee dat dit materiaal is opgesteld met behulp van de Docker-engine versie 18.09.1 ​​​​en API-versie 1.39.

Gegevens in Docker kunnen tijdelijk of permanent worden opgeslagen. Laten we beginnen met tijdgegevens.

Tijdelijke gegevensopslag

In Docker-containers kunt u het werk met tijdelijke gegevens op twee manieren organiseren.

Standaard worden bestanden die zijn gemaakt door een applicatie die in een container draait, opgeslagen in de beschrijfbare laag van de container. Om dit mechanisme te laten werken, hoeft er niets speciaals te worden geconfigureerd. Het blijkt goedkoop en vrolijk. De applicatie hoeft alleen maar de gegevens op te slaan en zijn eigen ding te blijven doen. Nadat de container echter ophoudt te bestaan, zullen de op deze eenvoudige manier opgeslagen gegevens ook verdwijnen.

Er is een andere oplossing voor het opslaan van tijdelijke bestanden in Docker, geschikt voor gevallen waarin u een hoger prestatieniveau nodig heeft vergeleken met wat haalbaar is met het standaard tijdelijke opslagmechanisme. Als u niet wilt dat uw gegevens langer worden bewaard dan de container bestaat, kunt u tmpfs verbinden met de container: een tijdelijke informatieopslag die gebruikmaakt van het RAM van de host. Dit versnelt het schrijven en lezen van gegevens.

Het komt vaak voor dat gegevens moeten worden opgeslagen, zelfs nadat de container niet meer bestaat. Voor dit doel hebben we mechanismen nodig voor permanente gegevensopslag.

Permanente gegevensopslag

Er zijn twee manieren om de levensduur van de gegevens langer te maken dan de levensduur van de container. Eén manier is om de bind-mount-technologie te gebruiken. Met deze aanpak kunt u bijvoorbeeld een echte map aan de container koppelen. Processen die zich buiten Docker bevinden, kunnen ook werken met gegevens die in een dergelijke map zijn opgeslagen. Hier is hoe Look tmpfs montage- en bindmontagetechnologie.

Docker leren, deel 6: werken met data
Mount tmpfs en bind mount

De nadelen van het gebruik van bind mount-technologie zijn dat het gebruik ervan het maken van gegevensback-ups, gegevensmigratie en het delen van gegevens tussen meerdere containers bemoeilijkt. Het is veel beter om Docker-volumes te gebruiken voor permanente gegevensopslag.

Docker-volumes

Een volume is een bestandssysteem dat zich buiten containers op een hostmachine bevindt. Docker maakt en beheert volumes. Dit zijn de belangrijkste eigenschappen van Docker-volumes:

  • Ze zijn een middel om informatie permanent op te slaan.
  • Ze zijn onafhankelijk en gescheiden van containers.
  • Ze kunnen worden gedeeld tussen verschillende containers.
  • Hiermee kunt u het lezen en schrijven van gegevens efficiënt organiseren.
  • Volumes kunnen worden gehost op bronnen van een externe cloudprovider.
  • Ze kunnen worden gecodeerd.
  • Ze kunnen een naam krijgen.
  • De container kan ervoor zorgen dat het volume vooraf wordt gevuld met gegevens.
  • Ze zijn handig om te testen.

Zoals u kunt zien, hebben Docker-volumes een aantal geweldige eigenschappen. Laten we het hebben over hoe we ze kunnen maken.

Volumes creëren

Volumes kunnen worden gemaakt met Docker of met behulp van API-verzoeken.

Hier is een Dockerfile-instructie waarmee u een volume kunt maken wanneer de container start.

VOLUME /my_volume

Wanneer u een dergelijke instructie gebruikt, zal Docker, na het maken van de container, een volume maken met de gegevens die al op de opgegeven locatie aanwezig zijn. Houd er rekening mee dat als u een volume maakt met behulp van een Dockerfile, dit u niet ontslaat van de noodzaak om een ​​koppelpunt voor het volume op te geven.

U kunt ook volumes in een Dockerfile maken met behulp van het JSON-formaat.

Bovendien kunnen volumes worden gemaakt via de opdrachtregel terwijl de container actief is.

Werken met volumes vanaf de opdrachtregel

▍Een volume maken

U kunt een zelfstandig volume maken met de volgende opdracht:

docker volume create —-name my_volume

▍Informatie over volumes vinden

Gebruik de volgende opdracht om een ​​lijst met Docker-volumes te bekijken:

docker volume ls

U kunt een specifiek volume als volgt verkennen:

docker volume inspect my_volume

▍Een volume verwijderen

U kunt een volume als volgt verwijderen:

docker volume rm my_volume

Om alle volumes te verwijderen die niet door containers worden gebruikt, kunt u de volgende opdracht gebruiken:

docker volume prune

Voordat volumes worden verwijderd, zal Docker u vragen deze handeling te bevestigen.

Als een volume aan een container is gekoppeld, kan het volume pas worden verwijderd nadat de bijbehorende container is verwijderd. Tegelijkertijd begrijpt Docker dit niet altijd, zelfs als de container wordt verwijderd. Als dit gebeurt, kunt u de volgende opdracht gebruiken:

docker system prune

Het is ontworpen om Docker-bronnen op te ruimen. Nadat u deze opdracht hebt uitgevoerd, zou u volumes moeten kunnen verwijderen waarvan de status eerder onjuist was bepaald.

--mount en --volume vlaggen

Om met volumes te werken, moet u bij het aanroepen van de opdracht docker, zul je vaak vlaggen moeten gebruiken. Als u bijvoorbeeld een volume wilt maken tijdens het maken van containers, kunt u de volgende constructie gebruiken:

docker container run --mount source=my_volume, target=/container/path/for/volume my_image

In de oudheid (tot 2017) was de vlag populair --volume. In eerste instantie is deze vlag (deze kan ook in verkorte vorm worden gebruikt, dan lijkt het erop -v) werd gebruikt voor stand-alone containers en de vlag --mount - in de Docker Swarm-omgeving. Echter, vanaf Docker 17.06, de vlag --mount kan in elk scenario worden gebruikt.

Opgemerkt moet worden dat bij gebruik van de vlag --mount de hoeveelheid extra gegevens die in het commando moet worden opgegeven, neemt toe, maar om verschillende redenen is het beter om deze vlag te gebruiken in plaats van --volume. Vlag --mount - Dit is het enige mechanisme waarmee u met services kunt werken of parameters voor volumestuurprogramma's kunt opgeven. Bovendien is deze vlag makkelijker om mee te werken.

In bestaande voorbeelden van opdrachten gericht op het werken met gegevens in Docker vindt u veel voorbeelden van het gebruik van de vlag -v. Wanneer u deze opdrachten voor uzelf probeert aan te passen, houd dan rekening met vlaggen --mount и --volume gebruik verschillende parameterformaten. Dat wil zeggen, je kunt niet zomaar vervangen -v op --mount en zorg voor een werkend team.

Het belangrijkste verschil tussen --mount и --volume is dat bij gebruik van de vlag --volume alle parameters worden samen in één veld verzameld, en wanneer ze worden gebruikt --mount de parameters zijn gescheiden.

Bij het werken met --mount parameters worden weergegeven als sleutel-waardeparen, het lijkt er namelijk op key=value. Deze paren worden gescheiden door komma's. Dit zijn de veelgebruikte opties --mount:

  • type - Montage type. De waarde voor de overeenkomstige sleutel kan zijn binden, volume of tmpfs. We hebben het hier over volumes, dat wil zeggen dat we geïnteresseerd zijn in de betekenis volume.
  • source - mount bron. Voor benoemde volumes is dit de volumenaam. Voor naamloze volumes is deze sleutel niet gespecificeerd. Het kan worden ingekort tot src.
  • destination — het pad waarnaar het bestand of de map in de container is gekoppeld. Deze sleutel kan worden ingekort tot dst of target.
  • readonly - koppelt het beoogde volume aan alleen om te lezen. Deze sleutel is optioneel en er is geen waarde aan toegewezen.

Hier is een voorbeeld van gebruik --mount met veel parameters:

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Resultaten van

Hier zijn enkele nuttige opdrachten die u kunt gebruiken bij het werken met Docker-volumes:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Hier vindt u een lijst met veelgebruikte parameters voor --mount, toepasbaar in een commando zoals docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Nu we deze Docker-serie hebben voltooid, is het tijd om iets te zeggen over waar Docker-leerlingen naartoe kunnen gaan. Hier geweldig goed artikel over Docker. Hier een boek over Docker (als je dit boek koopt, probeer dan de nieuwste editie te krijgen). Hier Nog een boek dat geschikt is voor degenen die geloven dat oefenen de beste manier is om technologie te leren.

Beste lezers! Welke materialen over Docker zou je aanraden voor beginners om te leren?

Docker leren, deel 6: werken met data

Bron: www.habr.com

Voeg een reactie