Skip to content

Kontajnery a zväzky Dockeru

Súborový systém kontajnera Dockeru možno prezerať v paneli ako ktorýkoľvek priečinok a to isté platí pre zväzok Dockeru. Zvoľte Pripojiť k Dockeru… v ponuke Sieť alebo kliknite na štítok Docker v lište jednotiek a stroj sa objaví v aktívnom paneli.

Je to zásuvný modul a dodáva sa vypnutý. Zapnite ho v Konfigurácia ▸ Zásuvné moduly…. Začína vypnutý, pretože spojenie s démonom Dockeru má na vašom Macu rovnaké práva ako vy sami — pozri K čomu má prístup nižšie.

Čo uvidíte

Najvyššiu úroveň tvoria tri priečinky:

  • Compose Projects — každý kontajner spustený nástrojom Docker Compose, zoskupený podľa projektu a ďalej podľa služby. Služba s jediným kontajnerom je tým kontajnerom: my-stack/backend/etc je /etc backendu. Služba s viacerými si pre ne úroveň ponecháva, jeden priečinok na kontajner.
  • Standalone Containers — všetko ostatné, či už beží, alebo nie.
  • Volumes — každý zväzok Dockeru ako samostatná jednotka.

Pod nimi ste v skutočnom súborovom systéme: F3 zobrazí súbor, F4 ho upraví, F5 ho skopíruje do druhého panela, F7 vytvorí priečinok. Druhý panel môže byť čokoľvek — miestny priečinok, archív, kontajner S3.

Zoskupenie sa číta zo značiek, ktoré Compose dáva svojim vlastným kontajnerom a zväzkom, takže platí aj pre stack, ktorého docker-compose.yml už dávno na tomto stroji nie je.

Zväzky sú vypísané osobitne zámerne. Zväzok prežije kontajner, ktorý ho vytvoril, môže ho zdieľať viac kontajnerov a zvyčajne sú práve v ňom údaje, kvôli ktorým ste prišli. Zväzok, ktorý práve nič nepripája, sa dá aj tak prezerať.

Stĺpce

Kliknutím pravým tlačidlom na záhlavie stĺpca panela pridáte vlastné stĺpce poskytovateľa:

  • Stav — ● running, ○ stopped, ◌ paused, ! restarting.
  • Prístup — RW, RO pre rootfs alebo pripojenie len na čítanie, VOL pre zväzok Dockeru, BIND pre váš priečinok pripojený do kontajnera, TMP pre tmpfs.
  • Image, ID.
  • Pripojenie — pri adresári, ktorý je v skutočnosti pripojením, čo to je: Volume: my-stack_db-data, alebo cesta na hostiteľovi za bind-pripojením. Takto zistíte, ktorý zväzok v Volumes obsahuje údaje kontajnera.

Zastavené kontajnery

Zastavené kontajnery sa vypisujú a ich súborové systémy sa dajú čítať aj zapisovať. Súborové API Dockeru odpovedá aj pre kontajner, ktorý mesiac nebežal, a práve vďaka tomu to pôsobí ako jednotka, a nie ako zoznam procesov.

Dve veci vyžadujú naozaj bežiaci kontajner: mazanie a premenovanie. API stroja Dockeru pre ne nemá žiadnu operáciu — jediný spôsob, ako súbor vnútri kontajnera odstrániť alebo presunúť, je niečo v ňom spustiť — takže pri zastavenom kontajneri sú obe odmietnuté, nie predstierané.

Čo od toho čakať

Zápisy idú dovnútra ako root, mazanie beží pod vlastným používateľom kontajnera. To je usporiadanie Dockeru, nie rozhodnutie urobené tu: skopírovanie súboru dovnútra používa archívne API stroja, ktoré zapisuje ako root; zmazanie alebo premenovanie spúšťa príkaz vnútri kontajnera, a ten beží pod používateľom, ktorého nastavil image. Mazanie preto môže byť odmietnuté ako prístup zamietnutý pri súbore, ktorý ste pred chvíľou dokázali skopírovať dovnútra. Peach Commander to neobchádza tým, že by vystupoval ako root — povie vám, čo povedal kontajner.

Kontajner alebo pripojenie len na čítanie zápis odmietne a ohlási to ako chybu oprávnení, nie ako zlyhanie.

Čítanie symbolického odkazu číta to, na čo ukazuje. Panel ho v stĺpci Attr naďalej zobrazuje ako odkaz; F3 ukáže obsah cieľa namiesto prázdneho súboru.

Koreň veľkého zastaveného kontajnera sa nemusí dať vypísať. Docker nemá žiadne volanie, ktoré by vypísalo adresár. Čítať adresár znamená vyžiadať si ho ako archív, a ten obsahuje všetko pod ním — pri zastavenom kontajneri postavenom na plnohodnotnom image to môžu byť mnohé gigabajty, a výpis je potom odmietnutý namiesto toho, aby sa všetko čítalo. Hlbšie adresáre to neovplyvňuje a bežiaci kontajner tiež nie: adresár príliš veľký na čítanie ako archív vypíše sám kontajner. Ak chcete iba archívnu cestu, pozri nastavenie nižšie.

Skopírovať von celý kontajner znamená skopírovať celý jeho súborový systém — vrátane /proc a /dev. Kopírujte adresár, ktorý potrebujete, nie /.

K čomu má prístup

Zásuvný modul hovorí s tým strojom, ku ktorému by ste sa dostali z terminálu: DOCKER_HOST, ak ho máte nastavený, inak váš súčasný docker context, inak obvyklé sokety Docker Desktopu, Colimy, Rancher Desktopu, Limy a Podmanu. Podman funguje, lebo ponúka to isté API.

Prístup k démonovi Dockeru spravidla znamená veľmi rozsiahly prístup k stroju, na ktorom beží. Zásuvný modul má presne vaše práva a o žiadne ďalšie nežiada: neukladá žiadne prihlasovacie údaje, nikdy sa nedotýka vlastných adresárov Dockeru na vašom disku a nevykonáva za vás žiadne privilegované operácie.

Jediné, čo vytvára, je jednorazový kontajner — a to len preto, aby sa dostal k zväzku, ktorý žiadny existujúci kontajner nepripája, keďže zväzok vidno iba zvnútra niečoho, čo ho pripája. Nikdy sa nespúšťa, je označený ako kontajner Peach Commanderu a je odstránený, len čo jednotku opustíte.

Akcie nad kontajnerom alebo zväzkom

Kliknutie pravým tlačidlom na kontajner alebo zväzok ponúkne v podponuke Docker to, čo jednotka sama povedať nedokáže:

  • Inspect — všetko, čo o ňom engine vie, ako formátovaný JSON v okne, v ktorom sa dá rolovať a vyberať.
  • Show Logs — posledných 500 riadkov, ktoré kontajner zapísal.
  • Show Mounts — každé pripojenie, ktoré nesie, čím je a či sa doň dá zapisovať.
  • Copy ID — úplné id kontajnera alebo meno zväzku do schránky. Úplné id, nie dvanásť znakov zo stĺpca ID: je to určené na vloženie do príkazu docker, a krátke id je predpona, ktorá môže prestať byť jednoznačná.
  • Jump to Volume — pri adresári, ktorý je v skutočnosti zväzkom, prejsť na tento zväzok do Volumes. To je druhá polovica stĺpca Pripojenie: stĺpec zväzok pomenuje, toto vás k nemu zavedie.
  • Open Compose Project — prejsť k projektu, ku ktorému kontajner patrí.
  • Start, Stop, Restart, Pause, Unpause — tieto kontajner menia, namiesto aby ho čítali, takže sa najprv opýtajú. Start je zároveň východisko z oboch odmietnutí vyššie: mazanie a premenovanie potrebujú bežiaci kontajner.

Položky sa objavia len vnútri jednotky Dockeru; nad vlastným priečinkom tam nie sú vôbec.

Protokol je zároveň súbor. V koreni každého kontajnera leží docker-logs.txt — ktorý nie je súborom v kontajneri: jeho čítanie si vyžiada protokol od enginu. F3 naň ho otvorí v prehliadači, takže platí jeho hľadanie, skok na riadok aj voľba kódovania — čo samostatné okno dať nemôže. Kontajner, ktorý súbor toho mena naozaj nesie, ukáže svoj vlastný, a do virtuálneho sa nedá nič zapísať.

Nastavenia

Konfigurácia ▸ Nastavenia ▸ Docker obsahuje všetko z toho. Tie isté hodnoty ležia v malom súbore v ~/Library/Application Support/PeachCommander/Docker/docker.ini, ktorý upravíte, keď stroj pripravujete skriptom:

  • Endpoint — adresa, ktorá sa použije namiesto nájdenej.
  • ExecFallback — 0 spôsobí, že modul používa výhradne archívne API Dockeru: nikdy potom vnútri kontajnera nič nespustí, za cenu toho, že nedokáže vypísať veľmi veľký adresár, mazať ani premenovávať.
  • ProbeBudgetMB, MaxBudgetMB, MaxBudgetSeconds — koľko z archívu adresára sa oplatí prečítať, než sa ustúpi k náhradnému postupu alebo to modul vzdá.
  • HelperImage — image, z ktorého vzniká vyššie spomenutý jednorazový kontajner (predvolene ľubovoľný image, ktorý už na stroji je).
  • ShowAnonymousVolumes — 0 skryje zväzky, ktorým Docker dal za meno dlhý odtlačok, pretože ich nikto iný nepomenoval.

Nie je v tejto verzii

Vzdialené stroje cez SSH alebo TLS, interaktívny shell a image ako súborové systémy len na čítanie.