Learning Docker, Part 6: Working with Data

In dit deel van de vertaling van de serie artikelen over Docker gaan we het hebben over werken met gegevens. In het bijzonder over Docker-volumes. In deze materialen hebben we de softwaremechanismen van Docker constant vergeleken met verschillende eetbare analogieën. Laten we ook hier bij deze traditie blijven. Gegevens in Docker kunnen beschouwd worden als specerijen. Er zijn veel soorten specerijen in de wereld, en in Docker zijn er vele manieren om met gegevens om te gaan.

→ Deel 1: basisprincipes
→ Deel 2: termen en concepten
→ Deel 3: Dockerfile-bestanden
→ Deel 4: het verkleinen van afbeeldingen en het versnellen van hun bouw
→ Deel 5: commando's
→ Deel 6: werken met gegevens

Learning Docker, Part 6: Working with Data

Let op dat dit materiaal is voorbereid met behulp van Docker-engine versie 18.09.1 en API-versie 1.39.

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

Tijdelijke opslag van gegevens

In Docker-containers zijn er twee manieren om met tijdelijke gegevens om te gaan.

Standaard worden bestanden die door een applicatie in een container worden aangemaakt, opgeslagen in de schrijfondersteunde laag van de container. Voor deze mechanismen hoeft verder niets speciaal ingesteld te worden. Het is goedkoop en eenvoudig. De applicatie hoeft alleen maar gegevens op te slaan en haar werkzaamheden voort te zetten. Echter, zodra de container niet meer bestaat, verdwijnen ook de gegevens die op deze eenvoudige manier zijn opgeslagen.

Voor tijdelijke bestandopslag in Docker kan nog een andere oplossing worden gebruikt, geschikt voor gevallen waarin een hoger prestatieniveau vereist is dan datgene wat kan worden bereikt met de standaard tijdelijke opslagmechanismen. Als je niet wilt dat je gegevens langer bewaard worden dan de container bestaat, kun je tmpfs aan de container koppelen — een tijdelijke opslag die het RAM-geheugen van de host gebruikt. Dit versnelt de schrijf- en leesoperaties.

Het gebeurt vaak dat gegevens moeten worden opgeslagen, zelfs nadat de container niet meer bestaat. Hiervoor hebben we mechanismen voor permanente gegevensopslag nodig.

Permanente gegevensopslag

Er zijn twee manieren om de levensduur van gegevens te verlengen, die langer is dan de levensduur van de container. Een van de manieren is het gebruik van bind mount-technologie. Bij deze benadering kan er een bestaand mapje aan de container worden gekoppeld. Gegevens die in zo'n map zijn opgeslagen, kunnen ook worden benaderd door processen buiten Docker. Zo ziet het eruit bij het koppelen van tmpfs en bind mount-technologie.

Learning Docker, Part 6: Working with Data
Koppeling van tmpfs en bind mount

De nadelen van bind mount-technologie zijn dat het gebruik ervan het maken van back-ups, migratie van gegevens en het delen van gegevens tussen meerdere containers bemoeilijkt. Voor permanente dataopslag is het veel beter om Docker-volumes te gebruiken.

Docker-volumes

Een volume is een bestandssysteem dat zich op de hostmachine buiten de containers bevindt. Docker is verantwoordelijk voor het maken en beheren van volumes. Hier zijn de belangrijkste eigenschappen van Docker-volumes:

  • Het zijn middelen voor permanente informatieopslag.
  • Ze zijn op zichzelf staand en gescheiden van de containers.
  • Verschillende containers kunnen ze gezamenlijk gebruiken.
  • Ze maken efficiënte lees- en schrijfoperaties mogelijk.
  • Volumes kunnen worden geplaatst op middelen van een externe cloudprovider.
  • Ze kunnen worden versleuteld.
  • Ze kunnen namen krijgen.
  • Een container kan vooraf gegevens aan een volume toevoegen.
  • Ze zijn handig voor testen.

Zoals je ziet, hebben Docker-volumes geweldige eigenschappen. Laten we het hebben over hoe je ze kunt maken.

Volumes maken

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

Hier is een instructie in Dockerfile waarmee je een volume kunt maken bij het starten van een container.

VOLUME /my_volume

Bij het gebruik van een dergelijke instructie in Docker, zal er na het maken van de container een volume worden aangemaakt met gegevens die al op de opgegeven locatie aanwezig zijn. Let op dat als je een volume maakt met een Dockerfile, dit je niet ontlast van de noodzaak om een mountpunt voor het volume op te geven.

Volumes in Dockerfile kunnen ook worden gemaakt met het JSON-formaat.

Bovendien kunnen volumes vanuit de opdrachtregel worden gemaakt tijdens het uitvoeren van de container.

Werken met volumes vanuit de opdrachtregel

▍Volume maken

Een zelfstandig volume kan gemaakt worden met de volgende opdracht:

docker volume create --name my_volume

▍Informatie over volumes achterhalen

Om de lijst met Docker-volumes te bekijken, gebruikt u de volgende opdracht:

docker volume ls

Een specifiek volume kan als volgt worden onderzocht:

docker volume inspect my_volume

▍Volume verwijderen

U kunt een volume zo 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 u volumes verwijdert, vraagt Docker u om bevestiging voor deze bewerking.

Als een volume met een container is verbonden, kan dat volume niet worden verwijderd totdat de bijbehorende container is verwijderd. Zelfs als de container is verwijderd, begrijpt Docker dit soms niet. Als dat gebeurt - kunt u de volgende opdracht gebruiken:

docker system prune

Deze is bedoeld voor het opschonen van Docker-resources. Na het uitvoeren van deze opdracht zou u in staat moeten zijn om volumes te verwijderen waarvan de status eerder onjuist werd bepaald.

De vlaggen —mount en —volume

Voor het werken met volumes moet u, bij het aanroepen van de opdracht docker, vaak gebruikmaken van vlaggen. Bijvoorbeeld, om een volume te maken tijdens het creëren van een container, kunt u de volgende constructie gebruiken:

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

In het verleden (tot 2017) was de vlag --volume. Oorspronkelijk werd deze vlag (deze kan ook in een verkorte vorm worden gebruikt, dan ziet hij eruit als -v) voor zelfstandige containers gebruikt, en de vlag --mount — in de Docker Swarm-omgeving. Echter, sinds Docker 17.06 kan de vlag --mount in alle scenario's worden gebruikt.

Het is vermeldenswaard dat bij het gebruik van de vlag --mount de hoeveelheid extra gegevens die in de opdracht moet worden opgegeven, toeneemt, maar om verschillende redenen is het beter om deze vlag te gebruiken in plaats van --volume. De vlag --mount is het enige mechanisme waarmee met services kan worden gewerkt of parameters voor de volume-driver kunnen worden opgegeven. Daarnaast is het eenvoudiger om met deze vlag te werken.

In de bestaande voorbeelden van opdrachten die bedoeld zijn voor het werken met gegevens in Docker, kunt u veel voorbeelden tegenkomen van het gebruik van de vlag -v. Bij het proberen deze opdrachten voor uzelf aan te passen, houd er rekening mee dat de vlaggen verschillende formaten voor parameters gebruiken. Dat wil zeggen, u kunt niet zomaar vervangen --mount en --volume door -v en een werkende opdracht krijgen. --mount Het belangrijkste verschil tussen

is dat bij het gebruik van de vlag --mount en --volume de gebruiksmogelijkheden verschillen. --volume alle parameters worden samengevoegd in één veld, en bij gebruik --mount worden de parameters gescheiden.

Bij het werken met --mount worden de parameters gepresenteerd als paren van sleutel-waarde, en dit ziet er als volgt uit key=value. Deze paren worden gescheiden door komma's. Dit zijn vaak gebruikte parameters --mount:

  • type — type van de montage. De waarde voor de bijbehorende sleutel kan zijn bind, volume of tmpfs. We hebben het hier over volumes, dat wil zeggen — we zijn geïnteresseerd in de waarde volume.
  • source — de bron van de montage. Voor benoemde volumes is dit — de naam van het volume. Voor niet-benamde volumes wordt deze sleutel niet aangegeven. Hij kan worden verkort tot src.
  • destination — het pad waar het bestand of de map in de container wordt gemonteerd. Deze sleutel kan worden verkort tot dst of target.
  • readonly — geeft een volume aan dat bedoeld is alleen voor lezen. Het gebruik van deze sleutel is optioneel, er wordt geen waarde aan toegewezen.

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

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

Conclusies

Hier zijn nuttige commando's die je kunt gebruiken bij het werken met Docker-volumes:

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

Hier is een lijst van vaak gebruikte parameters voor --mount, toepasbaar in een commando van de vorm docker run --mount my_options my_image:

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

Nu we deze serie artikelen over Docker hebben afgerond, is het tijd om een paar woorden te zeggen over de richting waarheen degenen die Docker leren verder kunnen gaan. Hier is een uitgebreide goede gids over Docker. Hier is een boek over Docker (wanneer je dit boek koopt, probeer dan de meest recente editie te krijgen). Hier is nog een boek dat geschikt is voor degenen die geloven dat praktijk de beste manier is om technologieën te leren.

Geachte lezers! Welke materialen over Docker zou je aanbevelen voor beginners?

Learning Docker, Part 6: Working with Data

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster