‫Deze sectie zal vol staan met lezingen en opdrachten rond persistente data.
‫Eerst gaan we de problemen van persistente gegevens bespreken en hoe dat in de eerste
‫plaats zelfs een probleem werd.
‫Sleutelbegrippen daar die u moet begrijpen, zijn het idee van onveranderlijke infrastructuur.
‫En het idee rond containers is van nature vluchtig in ontwerp.
‫Die behandelen we in de eerste lezing. Daarna duiken we in datavolumes en hoe die een
‫aantal van onze problemen rond persistente data oplossen. Vervolgens gaan we in op bind-mounts en hoe dat
‫verschillende problemen met persistente gegevens oplost. Dan eindigen we deze sectie met een aantal opdrachten over
‫het bewaren van databasegegevens en het vervangen van containers voor databases. En dan ook rond het daadwerkelijk monteren van
‫code in een container vanaf de host terwijl u deze aan het bewerken bent,
‫zodat u die code live in de container kunt uitvoeren. Vereisten voor deze eerste lezing zijn alleen inzicht in het
‫uitvoeren van containers en de container- en afbeeldingsconcepten die we tot nu toe hebben besproken.
‫Tot nu toe maakte u zich alleen zorgen over wat er nodig is om een container te laten draaien, niet over de unieke gegevens die kunnen
‫worden gemaakt zodra een container wordt uitgevoerd.
‫Containers zijn bedoeld om onveranderlijk en vluchtig te zijn.
‫Dat zijn gewoon mooie modewoorden voor onveranderlijk en tijdelijk, of wegwerpbaar.
‫Het idee hier is dat we gewoon een container kunnen weggooien en een nieuwe kunnen maken van een afbeelding,
‫toch?
‫Dan hebben we het niet over een daadwerkelijke beperking van containers, maar meer over een ontwerpdoel, of
‫een best practice.
‫Dit is het idee van een onveranderlijke infrastructuur waar we dingen niet veranderen als ze eenmaal draaien.
‫Als er een configuratiewijziging moet plaatsvinden, of misschien moet de containerversie-upgrade plaatsvinden, dan implementeren
‫we een geheel nieuwe container.
‫Dit geeft ons enorme voordelen in betrouwbaarheid en consistentie, en het reproduceerbaar maken van wijzigingen.
‫Maar er is een afweging.
‫Hoe zit het met de unieke gegevens die uw app zal produceren? Die databases, of een sleutelwaarde, of iets anders dat
‫uw app in een bestand uitspuugt?
‫In het ideale geval mogen de containers niet uw unieke gegevens bevatten die zijn vermengd met de binaire bestanden van de toepassing. Dit staat bekend als "scheiding
‫van zorgen" en Docker geeft ons hier eigenlijk een groot voordeel.
‫We kunnen onze applicatie bijwerken door een nieuwe container opnieuw te maken, met een bijgewerkte versie van onze app, en idealiter zijn onze
‫unieke gegevens nog steeds waar ze moeten zijn en werden ze voor ons bewaard terwijl onze container werd gerecycled.
‫Voor het geval je het tot nu toe nog niet gemerkt hebt, de containers die we hebben gebruikt, waren standaard persistent.
‫Alle wijzigingen daarin werden bewaard tijdens herstarts en herstarts totdat we de container verwijderden.
‫Alleen omdat we de container hebben gestopt of de host opnieuw hebben
‫opgestart, betekent niet dat de bestandswijzigingen van de container verdwijnen.
‫Pas wanneer we de container verwijderen, verdwijnt de UFS-laag, maar we willen dat naar
‫believen kunnen doen.
‫Dit probleem van unieke data staat in de branche bekend als 'persistent data' en tot containers hadden
‫we daar niet echt een naam voor. Omdat, nou ja, de meeste dingen die we hebben gebouwd, waren
‫persistent, zoals je die oude servers kent waarop die oude app al vijf of tien jaar of langer draait.
‫Alles was standaard persistent.
‫In de nieuwe wereld van het automatisch schalen van containers en applicaties vormen persistente gegevens een
‫uniek probleem.
‫Docker heeft twee oplossingen voor dit probleem,
‫bekend als "datavolumes" en "bind mounts". " Docker-volumes zijn een configuratieoptie voor
‫een container die een speciale locatie creëert buiten het uniebestandssysteem
‫van die container om unieke gegevens op te slaan.
‫Hierdoor blijft het behouden bij het verwijderen van containers en kunnen we het aan elke gewenste container bevestigen.
‫En de container ziet het gewoon als een lokaal bestandspad.
‫Dan zijn er bind-mounts, wat simpelweg betekent dat we een hostdirectory of bestand in een container delen of mounten.
‫Nogmaals, het ziet er gewoon uit als een lokaal bestandspad of een mappad naar de container.
‫Het zal niet echt weten dat het van de host komt.