Een hostdirectory koppelen aan een docker-container

0
190

Docker biedt tools om de bestandssystemen van containers en het draaiende hostbesturingssysteem te overbruggen de container, zoals bind-mounts en volumes. Deze kunnen erg handig zijn in zowel ontwikkel- als productieomgevingen.

Waarom mounten vanaf de host?

Over het algemeen wil je met Docker dat afbeeldingen onafhankelijk van het hostsysteem worden uitgevoerd. Als u bijvoorbeeld de code of configuratiebestanden van een app wilt bijwerken, wilt u waarschijnlijk een nieuwe versie van de container bouwen en opnieuw implementeren. Dit stelt je in staat om snel afbeeldingen te schalen en te verplaatsen zonder je zorgen te maken over de hardware waarop ze draaien.

In een ontwikkelomgeving kan het echter moeilijk zijn om direct een directory te kunnen mounten om hot-reloading van configuratie of code mogelijk te maken. zeer nuttig. U werkt bijvoorbeeld aan een JS-bestand of PHP-plug-in die u gewoon naar de container kunt slepen en neerzetten. Of misschien wilt u een volledige NGINX-configuratiemap koppelen om op uw website te werken. Wat je gebruik ook is, het koppelen van bestanden is geen slechte oplossing.

Het is ook handig in productie, als je hostservices hebt die afhankelijk zijn van bestanden in containers. U hebt bijvoorbeeld een service voor het opnemen en aggregeren van logboeken die er de voorkeur aan geeft dat de logboekbestanden van de container zich in een map bevinden die toegankelijk is vanaf de host. Hoewel er waarschijnlijk enkele pure in-Docker-oplossingen voor uw problemen zijn, is het soms eenvoudiger om gewoon een volume te koppelen.

macOS-compatibiliteit

Opmerking: aangezien koppelingen worden afgehandeld via de Docker-API, werken ze ongeacht het host-besturingssysteem. MacOS heeft echter extra beveiligingen en koppelingen buiten een paar hostdirectory's kunnen mislukken met “aankoppelingen geweigerd” tijdens runtime. Dit omvat /Users, dat de meeste bewerkingen dekt, maar indien nodig kunt u dit oplossen in de Docker-instellingen onder Voorkeuren > Bronnen > Bestandsdeling door de doelmap aan de lijst toe te voegen.

Een hostmap koppelen

Het maken van een bind mount is vrij eenvoudig. Voeg het toe met de –mount type=bind-vlag bij het opstarten, waarbij u een bron- en doelmap opgeeft waarnaar moet worden gekoppeld.

docker run -d -it –name container –mount type=bind,source= /nginxconfig,target=/etc/nginx nginx:laatste advertentie

Bind-mounts zijn het eenvoudigst, maar Docker biedt wel de Volume API om dit soort mounts een beetje beter te beheren. De opgeslagen gegevens worden beheerd door Docker en de volumemap wordt automatisch gemaakt in de map van Docker. Dit is misschien niet wat u wilt als u een bestaande map in gedachten heeft, maar deze methode is beter omdat deze niet afhankelijk is van de bestandsstructuur van het host-besturingssysteem.

docker volume create nginx-config docker run -d –name devtest –mount source=nginx-config,target=/etc/nginx nginx:latest

U kunt Docker Compose ook gebruiken om volumes te definiëren:

versie: “3.0” services : web: image: nginx:laatste poorten: – “80:80” volumes: – nginx-config:/etc/nginx/volumes: nginx-config:

Deze worden opgeslagen in een standaard formaat dat toegankelijk is voor Linux:

/var/lib/docker/volumes/volumeID/_data

Op macOS moet u echter verbinding maken met de virtuele Docker-machine om volumes te kunnen bekijken.

GERELATEERD: Wat zijn Docker-volumes en hoe gaat u ermee om Ze gebruiken?

Afzonderlijke bestanden koppelen

Het koppelen van volledige mappen werkt goed als u veel configuratie /code-bestanden die op de host zijn opgeslagen. Soms wil je echter misschien een enkel bestand aankoppelen om te bewerken, zonder de andere bestanden aan te raken.

Om dit te doen, kun je de container uitvoeren met een bind-mount, die individuele bestanden ondersteunt als je de pad:

docker run -it –mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg nginx sh Advertentie

Als je veel bestanden om op deze manier te koppelen, kunt u ze allemaal in dezelfde hostdirectory plaatsen en die directory op een andere locatie in de container koppelen. U kunt dan symlinks in de container gebruiken om bestanden in de aangekoppelde map naar de juiste locatie te linken.