Achtergrond
Docker Volume stelt ons in staat om bepaalde bestanden (zoals configuratiebestanden) dynamisch te mounten om de originele bestanden in de image te overschrijven bij het starten van een docker-container, maar wat gebeurt er als we een map of bestand dat nog niet op de host bestaat aan de container koppelen? LZ kwam dit probleem tegen in zijn werk, dus oefende hij het zelf en noteerde de experimentele resultaten als volgt:
Vouwhouder
Het gedrag van Docker bij het monteren van mappen is uniform, als volgt:
- Als de map niet bestaat, wordt deze eerst aangemaakt (of recursief als het een meerlagige map is)
- Overschrijf de mapinhoud in de container met de mapinhoud op host
De details zijn als volgt:
De map op de host bestaat en is niet leeg
gastheer | container | Mount resultaat | | Er bestaat niet-lege map A | Map B die niet bestaat | Maak eerst map B aan in Contanier, en kopieer daarna alle bestanden in map A naar B | | Er bestaat niet-lege map A | Er bestaat niet-lege map B | Maak eerst de originele inhoud van de containermap Chinese-map B leeg en kopieer vervolgens A Chinese kopie naar B |
Ongeacht of map B in de container bestaat of niet, zal A de inhoud van B volledig overschrijven
De map op host bestaat, maar is leeg
gastheer | container | Mount resultaat | | Lege map A die bestaat | Er bestaat niet-lege map B | De inhoud van container Chinese map B wordt geleegd |
De inhoud van de bijbehorende map in de container wordt geleegd
De hostmap bestaat niet
gastheer | container | Mount resultaat | | Map A die niet bestaat | Er bestaat niet-lege map B | Maak map A aan op host, en de inhoud van container Chinese map B wordt geleegd | | Mappen A/B/C die niet bestaan | Er bestaat niet-lege map B | Maak mappen A/B/C aan op de host, en de inhoud van container Chinese map B wordt leeggehaald |
De inhoud van de bijbehorende map in de container wordt geleegd
samenvatting
De hostmap zal zeker de containermap Chinese overschrijven:
gastheer | container | Mount resultaat | | Map bestaat niet/map bestaat maar is leeg | De map bestaat niet/bestaat maar is leeg/bestaat en is niet leeg | Container Chinese stuk is afgedekt (leeggemaakt) | | De map bestaat en is niet leeg | De map bestaat niet/bestaat maar is leeg/bestaat en is niet leeg | De inhoud van de Chinese container map wordt overschreven (de originele inhoud wordt geleegd en de inhoud van de map op de host wordt overschreven) |
Bestandsmontage
Het grootste verschil tussen bestandsmontage en mapmontage is:
- Docker verbiedt het mounten van bestanden die niet op de host bestaan aan bestanden die al in de container bestaan
- Bestandsmounting heeft geen effect op andere bestanden onder dezelfde map
Daarnaast is het overschrijfgedrag consistent met het mounten van mappen, d.w.z.:
- Overschrijf de inhoud van het bestand in de container met de inhoud van het bestand op de host
De details zijn als volgt:
gastheer
gastheer | container | Mount resultaat | | Bestanden die niet bestaan configA.js | Documenten die al bestaan congfigB.js | Fout, probeer je een map op een bestand te mounten (of andersom)? Controleer of het opgegeven hostpad bestaat en het verwachte type is. Het genereert twee lege mappen configA.js en configB.js tegelijk op de host, maar de container kan niet starten |
gastheer
gastheer | container | Mount resultaat | | Huidig dossier configA.js | Huidig dossier congfigB.js | Container Chinese items configB.js hetzelfde blijven, maar de inhoud van het bestand wordt overschreven door de congfigA.js inhoud | | Huidig dossier configA.js | Bestanden die niet bestaan congfigB.js | Een nieuw bestand configB.js in de container met de inhoud van het configA.js bestand blijft ongewijzigd configB.js alle andere bestanden onder het bestand |
samenvatting
Het bestand op de host zal altijd de container Chinese map overschrijven
gastheer | container | Mount resultaat | | Bestanden die niet bestaan | Documenten die al bestaan | Verboden handelingen | | Bestaande documenten | Bestanden die niet bestaan / bestanden die al bestaan | Toevoegen/overschrijven (maakt een map aan als die niet bestaat) |
conclusie
Vouwhouder
- Als je niet-bestaande of lege mappen in de container laat monteren, worden de bijbehorende mappen in de container geleegd
- Het toevoegen van een niet-lege map aan een container overschrijft de oorspronkelijke map in de container
Bestandsmontage
- Het is verboden om niet-bestaande bestanden te mounten op bestanden die al in de container bestaan
- Bestaande bestanden worden overschreven wanneer ze aan de container worden gekoppeld, en als de bestanden niet bestaan, worden ze aangemaakt
Toepassingsscenario's
- Uit bovenstaande analyse blijkt dat mapmounting wordt gebruikt om bestanden in de hele map te overschrijven, dus het kan worden gebruikt wanneer een groot aantal bestanden in de container moet worden gemount; bovendien, als een lege map of een niet-bestaande map wordt gemount, wordt het meestal omgekeerd gebruikt: dat wil zeggen, nadat de container is gestart, kunnen sommige bestanden (zoals logs) worden gegenereerd onder de map van het mountingpunt in de container, en op dat moment is het direct zichtbaar in de map op de overeenkomstige host.
- Bestandsmounting wordt vaak gebruikt om configuratiebestanden te mounten om de standaardconfiguratie dynamisch te wijzigen tijdens runtime, omdat het slechts één bestand overschrijft zonder andere bestanden in dezelfde map in de container te beïnvloeden.
Overgedragen van:De hyperlink-login is zichtbaar.
(Einde) |