Taust
Docker Volume võimaldab meil dünaamiliselt ühendada mõningaid faile (näiteks konfiguratsioonifaile), et Docker konteineri käivitamisel algseid faile pildis üle kirjutada, aga mis juhtub, kui ühendame konteineri hostis veel kausta või faili? LZ puutus oma töös kokku sellise probleemiga, mistõttu harjutas seda ise ja salvestas eksperimentaalsed tulemused järgmiselt:
kaustakinnitus
Dockeri käitumine kaustade paigaldamisel on ühtne, järgmiselt:
- Kui kausta ei eksisteeri, luuakse kaust esimesena (või rekursiivselt, kui see on mitmetasandiline kaust).
- Kirjuta konteineri kausta sisu üle hosti kausta sisuga
Üksikasjad on järgmised:
Hosti kaust eksisteerib ja ei ole tühi
Vastuvõtva | konteiner | Mounti tulemus | | Eksisteerib mitte-tühi kaust A | Kaust B, mis ei eksisteeri | Loo esmalt kaust B Contanieris ja seejärel kopeeri kõik failid kaustas A B-sse | | Eksisteerib mitte-tühi kaust A | Eksisteerib mitte-tühi kaust B | Esiteks tühjenda konteineri hiina kausta B algne sisu ja seejärel kopeerida A hiina koopia B-sse |
Sõltumata sellest, kas konteineris on kaust B, kirjutab A täielikult üle B sisu
Hosti kaust eksisteerib, kuid on tühi
Vastuvõtva | konteiner | Mounti tulemus | | Tühi kaust A, mis eksisteerib | Eksisteerib mitte-tühi kaust B | Konteineri Hiina kausta B sisu tühjendatakse |
Konteineri vastava kausta sisu tühjendatakse
Hostkaust ei eksisteeri
Vastuvõtva | konteiner | Mounti tulemus | | Kaust A, mis ei eksisteeri | Eksisteerib mitte-tühi kaust B | Loo kaust A hostis ja konteineri Hiina kausta B sisu tühjendatakse | | Kaustad A/B/C, mida ei eksisteeri | Eksisteerib mitte-tühi kaust B | Loo hostis kaustad A/B/C ning konteineri Hiina kausta B sisu tühjendatakse |
Konteineri vastava kausta sisu tühjendatakse
Kokkuvõte
Hostkaust kirjutab kindlasti üle konteineri hiina kausta:
Vastuvõtva | konteiner | Mounti tulemus | | Kaust ei eksisteeri/kaust eksisteerib, kuid on tühi | Kaust ei eksisteeri/eksisteerib, kuid on tühi/eksisteerib ja ei ole tühi | konteiner Hiina tükk on kaetud (tühjendatud) | | Kaust eksisteerib ja ei ole tühi | Kaust ei eksisteeri/eksisteerib, kuid on tühi/eksisteerib ja ei ole tühi | konteineri hiina kausta sisu kirjutatakse üle (algne sisu tühjendatakse ja hosti kausta sisu kirjutatakse üle) |
Failikinnitus
Suurim erinevus failide ja kaustade paigaldamise vahel on:
- Docker keelab failide ühendamise, mis hostis ei eksisteeri, failidega, mis konteineris juba olemas on
- Failide paigaldamine ei mõjuta teisi sama kausta all olevaid faile
Lisaks on selle ülekirjutamise käitumine kooskõlas kaustade monteerimisega, st:
- Kirjuta faili sisu konteineris üle faili sisuga hostis
Üksikasjad on järgmised:
Vastuvõtva
Vastuvõtva | konteiner | Mounti tulemus | | Failid, mida ei eksisteeri configA.js | Dokumendid, mis juba eksisteerivad congfigB.js | Viga, kas sa üritad kausta failile lisada (või vastupidi)? Kontrolli, kas määratud hosti tee eksisteerib ja kas see on oodatud tüüp. See genereerib korraga kaks tühja kataloogi configA.js ja configB.js hostil, kuid konteiner ei saa käivituda |
Vastuvõtva
Vastuvõtva | konteiner | Mounti tulemus | | Esita fail configA.js | Praegune toimik congfigB.js | konteineri Hiina ese configB.js jääda samaks, kuid faili sisu kirjutatakse üle congfigA.js sisuga | | Esita fail configA.js | Failid, mida ei eksisteeri, congfigB.js | Uus fail, mis configB.js konteinerisse koos configA.js faili sisuga, jääb muutumatuks configB.js kõik teised faili all olevad failid |
Kokkuvõte
Hosti fail kirjutab alati üle konteineri Hiina kausta
Vastuvõtva | konteiner | Mounti tulemus | | Failid, mida ei eksisteeri | Dokumendid, mis juba eksisteerivad | Keelatud teod | | Olemasolevad dokumendid | Failid, mis ei eksisteeri / failid, mis juba eksisteerivad | Lisamine/ülekirjutamine (loob kataloogi, kui seda ei eksisteeri) |
Järeldus
kaustakinnitus
- Kui lubate konteinerisse paigaldada olematuid või tühje kaustu, tühjendatakse konteineri vastavad kaustad
- Mitte-tühja kausta lisamine konteinerisse kirjutab konteineri algse kausta üle
Failikinnitus
- On keelatud paigaldada olematuid faile failidele, mis konteineris juba eksisteerivad
- Olemasolevad failid kirjutatakse konteinerisse lisamisel üle, ja kui faile ei eksisteeri, luuakse need
Rakendusstsenaariumid
- Ülaltoodud analüüsist on näha, et kaustade monteerimist kasutatakse failide üle kirjutamiseks kogu kaustas, seega saab seda kasutada siis, kui konteinerisse tuleb paigaldada suur hulk faile; lisaks, kui on paigaldatud tühi või olematu kaust, kasutatakse seda tavaliselt vastupidises suunas: st pärast konteineri käivitamist võib konteineri paigalduspunkti kausta all genereerida mõned failid (näiteks logid) ning sel hetkel on see otse nähtav vastava hosti kaustas.
- Failide monteerimist kasutatakse sageli konfiguratsioonifailide ühendamiseks, et dünaamiliselt muuta vaikimisi konfiguratsiooni käitusajal, kuna see kirjutab üle ainult ühe faili, mõjutamata teisi faile samas kaustas konteineris.
Üleviidud:Hüperlingi sisselogimine on nähtav.
(Lõpp) |