‫Oke. Volumes lijken van tevoren vrij eenvoudig, maar er komt veel bij kijken.
‫De eerste manier waarop u een container kunt vertellen dat deze zich zorgen moet maken over een volume, is in een Dockerfile.
‫Laten we er een paar gaan bekijken.
‫Ik ga gewoon doen wat ik veel doe.
‫Ik ga op zoek naar MySQL.
‫Dit is hoe ik zoveel heb geleerd over Dockerfiles, en hoe ik ze correct kan gebruiken, is dat de
‫officiële repositories echt degelijke standaardinstellingen en best practices hebben ingebouwd.
‫Als ik hier naar MySQL één ga, klik ik hier op het nieuwste Dockerbestand. Ik wed dat het een
‫database is, er zit waarschijnlijk een volume-opdracht in.
‫Daar gaan we.
‫Dit is de standaardlocatie van de MySQL-databases. Deze afbeelding is zo geprogrammeerd om Docker te
‫vertellen dat wanneer we er een nieuwe container van starten, om daadwerkelijk een nieuwe volumelocatie te maken en
‫deze toe te wijzen aan deze map in de container. Dat betekent dat alle bestanden die we daar in de container
‫plaatsen, de container overleven totdat we het volume handmatig verwijderen.
‫En dat is iets waar we hier op moeten wijzen, is dat volumes handmatig moeten worden verwijderd.
‫Je kunt ze niet opruimen door alleen een container te verwijderen.
‫Ze zijn een extra stap. Dat is eigenlijk alleen voor verzekeringen, want het hele punt
‫van een volumeopdracht is om te zeggen dat deze gegevens bijzonder belangrijk zijn, in ieder geval veel belangrijker dan de container zelf.
‫Als we een docker-pull op MySQL doen, en dan
‫doe ik een docker-afbeeldingsinspectie op MySQL, krijgen we het Docker-bestand niet te zien omdat het Docker-bestand niet echt deel uitmaakt
‫van de metadata van de afbeelding, wat u in dit zult opmerken config gebied, dat het dat
‫volume daar specificeerde.
‫Ik kan altijd zien dat de configuratie, die uit de Dockerfile kwam toen het werd gebouwd, een volume aan dat
‫pad toewees.
‫Laten we er een container van maken.
‫Dus docker container run -d --name mysql.
‫Als je je eerder herinnert, is de MySQL-versie weinig bijzonders.
‫Het vereist nu een omgevingsvariabele
‫voordat het werkt.
‫Het is MYSQL_ALLOW_EMPTY_PASSWORD.
‫OKE.
‫Wat je ziet is dat MySQL draait. Als we een docker-container mysql inspecteren,
‫zouden we hetzelfde moeten zien waar het ons in de configuratie vertelt dat er een volume is.
‫Hier.
‫We kunnen het ook hier onder bergen zien. Wat dit is, is dat dit eigenlijk de draaiende container is die zijn
‫eigen unieke locatie op de host krijgt, om die gegevens op te slaan, en dan is het op de achtergrond, in kaart gebracht of gemonteerd, naar die
‫locatie in de container, zodat de locatie in de container denkt eigenlijk
‫gewoon dat het naar /var/lib/mysql schrijft.
‫In dit geval kunnen we zien dat de gegevens zich daadwerkelijk op die locatie op de host bevinden. Dus laten we een docker-volume ls doen,
‫en we kunnen zien
‫dat we nu één volume hebben. Nu merken we dat dit die unieke ID heeft waarvan we nooit zullen weten
‫waar dat in godsnaam naar toe gaat,
‫toch?
‫Dus laten we dat eens inspecteren.
‫Je hoeft niet alles uit te typen.
‫Je kunt gewoon de eerste paar tekens typen en op Tab drukken om het te voltooien. U krijgt dezelfde
‫informatie over het volume zelf.
‫Als je dit echt op een Linux-machine doet, kun je naar die locatie op je harde schijf
‫navigeren en de gegevens bekijken.
‫Er zullen daar inderdaad enkele databases zijn.
‫Als je een Mac of Windows gebruikt, onthoud dan dat Docker voor Windows en Docker voor Mac
‫eigenlijk een klein beetje op de achtergrond doen dat voor ons verborgen is, waar het feitelijk een Linux-VM maakt.
‫Dus deze gegevens bevinden zich technisch gezien binnen die Linux-VM. U kunt niet naar dat pad op uw Windows- of
‫Mac-computer gaan en de gegevens bekijken. Het zit eigenlijk in die VM.
‫We zullen straks, met gemonteerde volumes, zien hoe we die beperking ook kunnen omzeilen.
‫Als je hiernaar kijkt, merk je dat het niet erg gebruiksvriendelijk is om ons te vertellen wat
‫erin zit of waaraan dit volume is toegewezen.
‫We kunnen vanuit het perspectief van de container zien welk volume het gebruikt, maar we kunnen niet zien vanuit het perspectief van
‫het volume waarmee het is verbonden.
‫Rechts?
‫Als ik gewoon op de pijl omhoog zou drukken en, laten we eens kijken, een mysql2.
‫Dat heeft nu een andere MySQL-server gemaakt die op de achtergrond draait.
‫Als ik nog een docker-volume ls doe, zie je er twee.
‫Je begint het probleem te zien, toch?
‫Er is hier geen gemakkelijke manier om het een van het ander te onderscheiden.
‫Als we gewoon, om een punt te bewijzen, een docker-container stop mysql doen, en een docker een container-stop
‫mysql2.
‫We doen een docker-container ls, we zien geen containers lopen. Als we een ls -a doen, krijgen we
‫ze allemaal te zien. En merk op dat ze gestopt zijn. En dan doen we een docker-volume ls, je merkt dat
‫we nog steeds de twee volumes hebben.
‫Als ik een docker-container rm mysql en vervolgens mysql2 doe, omdat ik beide in één opdracht
‫kan doen, worden beide containers verwijderd. Als ik nu een docker-volume ls doe, zijn mijn volumes
‫er nog steeds. Mijn gegevens zijn nog steeds veilig.
‫We hebben dus één probleem opgelost.
‫De databases overleven het uitvoerbare bestand.
‫Hoe maken we dit wat gebruiksvriendelijker?
‫Dat is waar benoemde volumes binnenkomen en de mogelijkheid voor ons om dingen te specificeren op de opdracht
‫docker run.
‫Als ik een paar keer de pijl omhoog raak totdat ik bij de docker-containerloop kom, maakt het niet echt uit
‫welke je weer gaat rennen.
‫In dit geval gaan we eigenlijk een -v commando invoeren. Met A -v kunnen we ofwel een nieuw volume specificeren dat
‫we willen maken voor deze container die op het punt staat te worden uitgevoerd, of het geeft ons twee
‫andere opties.
‫Een daarvan is het maken van een benoemd volume.
‫Als ik net -v deed, en dan de var lib mysql, zou dat hetzelfde doen als
‫onze volumeopdracht in de Dockerfile.
‫Dat hoeven we hier niet echt te doen. Maar wat we kunnen doen, is dat ik er een naam voor kan
‫zetten met een dubbele punt. Dat staat bekend als een "genoemd volume. " Als
‫ik dat doe, en dan een docker-volume ls doe, zul je zien dat mijn nieuwe container een nieuw volume gebruikt en een
‫beschrijvende naam gebruikt.
‫Als we een docker-volume-inspectie doen op die mysql, zul je zien dat dit hier gemakkelijker te gebruiken is.
‫Als ik mijn container opnieuw heb verwijderd, en we moeten een -f invoeren omdat
‫deze nog steeds actief is, en dan voer ik een andere uit. En deze keer zal ik het
‫een andere naam geven. En dan doen we nog een docker-volume ls, je zult zien
‫dat het lijkt alsof we geen nieuw volume hebben gemaakt. Hij gebruikt nog steeds hetzelfde volume.
‫Laten we een docker-container inspecteren op de mysql3. Wat we dan hier zullen zien is, ja, dit is
‫wat er is geconfigureerd, maar wat gebruiken we?
‫Dit zijn onze bergen hier.
‫We zullen hier zien dat niet alleen de naam vriendelijker is, maar dat de bronlocatie ook een
‫beetje vriendelijker is geworden.
‫Voor mij is een kleine tip hier dat wanneer ik dagen of weken achter elkaar een bepaalde database, in een bepaalde container
‫die ik steeds opnieuw moet gebruiken en ik geen lege databaseserver wil, ik Ik
‫zal uiteindelijk mijn containers op deze manier maken en ze een naam geven voor het project, zodat ik weet waar dat volume
‫voor is en
‫dat het moet blijven hangen.
‫Een laatste ding hier.
‫Waarom zou je Docker Volume Create willen doen?
‫Als we ze tijdens runtime kunnen maken op basis van een opdracht voor het uitvoeren van een docker-container en we kunnen ze maken door ze op te geven in het Dockerbestand, zijn er
‫maar een paar gevallen waarin je het van tevoren wilt maken. En dat kun je eigenlijk vrij
‫snel achterhalen door het help-commando te gebruiken.
‫Omdat dit de enige manier is waarop we daadwerkelijk een andere driver kunnen specificeren.
‫Weet je nog die plug-in-dingen waar ik het later over ga hebben?
‫Dan alle stuurprogramma-opties waarvoor we de -o willen gebruiken.
‫Als we er dan labels op willen plakken, waar we het later in de productiesectie ook over zullen hebben.
‫Soms, in speciale gevallen, moet u het Docker-volume van tevoren maken, maar meestal voor uw lokale ontwikkelingsdoeleinden is het
‫prima om het gewoon op te geven in een Dockerfile of bij het run-commando.