‫In deze lezing gaan we het hebben over bind-mounting en persistente data in die mounts. De vereisten zijn eigenlijk dat u alleen
‫weet over containerbeheer en hoe u containers moet uitvoeren.
‫Laten we erin springen. Laten we het hebben over bind-mounts. Ze zijn eigenlijk best cool.
‫Toen ik er voor het eerst over hoorde, kreeg ik een soort aha van hoe ik Docker gemakkelijk kon gebruiken voor
‫lokale ontwikkeling.
‫Echt, een bind-mount is slechts een toewijzing van de hostbestanden, of mappen, in een containerbestand
‫of map. Dat kan je gewoon doen.
‫U kunt een map opgeven of slechts een enkel bestand. Op de achtergrond is het
‫eigenlijk gewoon dat de twee locaties naar dezelfde fysieke locaties op schijf wijzen.
‫Nogmaals, dit slaat de UFS eigenlijk over zoals de andere volumes doen, zodat uw hostlocatie niet
‫wordt gewist wanneer u de container verwijdert.
‫Als er zich bestanden in de container bevinden waaraan u de hostbestanden toewijst, winnen de hostbestanden. Het verwijdert niet echt de bestanden in
‫de container die het heeft overschreven, omdat het niet echt iets in de
‫container overschrijft.
‫Het is er gewoon terwijl de bind mount bestaat.
‫Op het moment dat je de bind-mount niet meer nodig hebt en je de container opnieuw uitvoert zonder
‫deze, zou je de onderliggende gegevens zien die er eerder waren. Omdat bind-mounts meestal hostspecifiek zijn, hebben ze specifieke
‫gegevens op de harde schijf van de host nodig om te kunnen werken.
‫Je kunt ze niet specificeren in een Dockerfile.
‫U moet ze tijdens runtime gebruiken wanneer u de opdracht docker container run gebruikt. Je kunt het formaat hier
‫bekijken.
‫Het is echt de -v die we eerder gebruikten, alleen aan de linkerkant van de dubbele
‫punt, we plaatsen eigenlijk een volledig pad in plaats van alleen een naam.
‫En de manier waarop de Docker het verschil kan zien tussen het genoemde volume, zoals
‫we een tijdje geleden deden, en de bind-mount, is dat de bind-mount begint met een schuine streep.
‫In Windows zul je merken dat het twee schuine strepen naar voren zijn en dan de stationsletter en dan
‫je pad.
‫Zolang je de linker dubbele punt en rechterkant hebt, kun je echt alles wat je wilt van de
‫host in de container indelen, en je kunt ook dingen specificeren zoals alleen-lezen.
‫Waar dit echt tot uiting komt, is bij het ontwikkelen en uitvoeren van services in uw container
‫die toegang hebben tot bestanden die u op uw host gebruikt of wijzigt.
‫Laten we dat doen met Nginx.
‫Als je naar de root van onze repository voor deze cursus gaat, en dan gaan we naar de Dockerfile
‫sample 2-directory. Nu waren we hier eerder.
‫Als je het je herinnert, zijn er twee bestanden. Dit is voor Nginx, toch?
‫Als we heel snel naar de Dockerfile kijken, is het vrij eenvoudig. Het is gewoon een werkmap specificeren en vervolgens een
‫indexbestand naar die map kopiëren.
‫Er zijn hier geen volumes.
‫Een bind mount vereist geen volume om te werken, hoewel er zeker een zou kunnen zijn.
‫De gastheer wint altijd, weet je nog? Dus als we een docker-containerrun doen, dan doen
‫we een -d... laten we het nginx noemen.
‫Laten we het de poort 8080 geven zoals voorheen.
‫Dan gaan we het deze keer het volume geven. En ik moet het vertellen dat mijn huidige werkdirectory daadwerkelijk
‫in die werkdirectory in de container wordt gemount. Omdat mijn indexbestand hier in deze map staat, wil
‫ik dat het
‫in de container staat, zodat ik het hier kan bewerken en het live in de container te zien is.
‫Dus het zal logisch zijn in een seconde.
‫Hier is een snelle kleine tip. In plaats van dat ik mijn
‫hele pad moet uitzoeken en het hele ding moet typen, kun je pwd hier zo gebruiken.
‫Dat is een shell-snelkoppeling die zegt: 'print de werkmap af en vervang deze opdracht door dat pad.
‫' Dan gaan we gewoon dezelfde werkdirectory gebruiken uit de Dockerfile daar, en dan gaan
‫we de Nginx-afbeelding specificeren.
‫Wat ik ga doen, heel snel, is dat ik een ander terminalvenster ga openen, zodat we twee
‫dingen tegelijk kunnen doen.
‫Je hoeft dit niet echt te doen.
‫Kortom, we gaan gewoon het bestand op onze host bewerken, en dan ga ik in de container zitten en kijken
‫wat er gebeurt.
‫Dus om er zeker van te zijn dat
‫het werkt, gaan we naar localhost.
‫OK, dit is dus niet het standaard Nginx HTML-bestand.
‫En we gebruikten de gewone Nginx-afbeelding.
‫We hebben de aangepaste uit deze map niet echt gebruikt.
‫We hebben zojuist een stockfoto gebruikt. Om dat punt te bewijzen, kunnen we datzelfde, exacte commando
‫opnieuw doen, maar de -v eruit halen, en ik zal het in plaats daarvan op poort 8080 uitvoeren. En ik noem deze nginx2.
‫Als ik naar mijn browser ga en naar localhost 8080 ga, is dat de standaard nginx-index. html-bestand.
‫Dit is de aangepaste die we in deze map hebben.
‫We kunnen dus al zien dat het het correct in kaart heeft gebracht.
‫Als ik hier een ander tabblad open en een opdrachtregel in de container krijg.
‫Ga dan naar die map.
‫U zult merken dat we het Dockerbestand daadwerkelijk kunnen zien omdat we de hele map in kaart brengen.
‫Als we aan de linkerkant een nieuw bestand hebben gemaakt en ik kan dat Linux-aanraakcommando hier gewoon gebruiken om een
‫nieuw bestand te maken. Dan rechts... oeps... vergeet dat maar steeds... ls -al, en je zult dat
‫in je bestand zien.
‫Hopelijk begrijp je wat hier aan de hand is, dat beide locaties dezelfde locatie zijn.
‫En als ik iets in dat testme-bestand echode, en
‫dan...
‫daar ga je.
‫Onze nginx kan de wijzigingen zien omdat het gewoon een normaal bestandspad in de container is en
‫die bestanden zich op de host bevinden.
‫Als ik ze in de container zou verwijderen, zouden ze op de host worden verwijderd omdat het hetzelfde
‫bestand is.
‫Dit is wanneer ik meestal een ontwikkelaar laat nadenken over al hun ontwikkelomgevingen die
‫ze hebben met deze gecompliceerde installatie. Misschien gebruiken ze Vagrant of een andere handmatige
‫methode om hun perfecte omgeving in te stellen, en kunnen ze beginnen te zien hoe dit dat zoveel eenvoudiger kan maken.
‫Omdat ik geen ingewikkelde installatie op mijn Mac hoefde te doen, heb ik gewoon een container uitgevoerd.
‫Ik gebruikte het -v commando met de mount, en nu kan mijn code, op mijn host, worden bewerkt op mijn host.
‫En ik hoef echt nooit in de schaal van de container te gaan.
‫Gewoonlijk kunt u de container gewoon uitvoeren en de logboeken bekijken om te zien of er fouten zijn tijdens
‫het coderen.
‫Dit is natuurlijk een eenvoudig voorbeeld met Nginx. Later zullen we specifieke voorbeelden
‫hebben van verschillende ontwikkelomgevingen voor lokale ontwikkeling en containers.