GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak používat Docker Cp ke kopírování souborů mezi hostitelem a kontejnery

Potřebujete dostat nějaké soubory do nebo z kontejneru Docker? docker cp umožňuje kopírovat mezi hostitelskými a kontejnerovými souborovými systémy, takže můžete přidávat podrobnosti o konfiguraci, vytvářet zálohy a obnovovat stávající data.

Základní syntaxe

docker cp akceptuje zdrojovou a cílovou cestu jako své dva argumenty:

docker cp example.txt my-container:/example.txt

Zde example.txt se kopíruje z vašeho pracovního adresáře do /example.txt v my-container kontejner. Můžete obrátit dva argumenty a zkopírovat /example.txt z kontejneru do vašeho pracovního adresáře.

Argument odkazující na cestu kontejneru musí mít předponu ID nebo název kontejneru, za kterým následuje dvojtečka (: ). ID nebo název běžícího kontejneru najdete pomocí docker ps .

Každý docker cp příkaz potřebuje jednu cestu k místnímu souborovému systému a jednu cestu ke kontejneru – nelze přímo kopírovat mezi dvěma kontejnery. Pokud to potřebujete, použijte vícekrokový postup, zkopírujte nejprve ze zdrojového kontejneru do systému souborů a poté z nové místní cesty do cílového kontejneru.

Kopírování celých adresářů

docker cp může také rekurzivně kopírovat adresáře:

docker cp /home/demo/website apache-container:/var/www/html/.

Docker zkopíruje vše v /home/demo/website a přeneste jej do /var/www/html .

Chování při kopírování

Když kopírujete soubor, Docker vytvoří nový soubor v cíli, pokud ještě neexistuje. Stávající soubory budou přepsány novým obsahem. Když je cílem adresář, soubor se do něj zkopíruje pomocí zdrojového souboru. Výjimkou je případ, kdy zadaný cíl končí znakem / , označující adresář, ale cesta již neexistuje. V tomto scénáři dojde k chybě.

U kopií adresářů je proces trochu složitější. V cíli se vytvoří nový adresář s obsahem zdrojového adresáře, pokud cílová cesta již neexistuje. Pokud existuje, chování se liší v závislosti na tom, zda jste zahrnuli koncové /. komponent v cestě.

  • /. is present – ​​Zdrojový adresář se zkopíruje do existujícího cílového adresáře.
  • /. není přítomen – obsah zdrojového adresáře se zkopíruje do cíle.

Jemné rozlišení určuje, zda je v cíli vytvořen nový podadresář.

Omezení příkazů

Navzdory svému názvu docker cp není úplnou implementací cp příkaz shellu. cp příznaky nejsou podporovány, kromě -a a -L :

  • -a – Režim archivace, který u zkopírovaných souborů zachovává podrobnosti o uživatelích a skupinách.
  • -L – Pomocí symbolických odkazů ve zdrojovém adresáři zkopírujte obsah cílů odkazů, nikoli odkazy samotné.

Pro pokročilejší případy použití, kde je vyžadováno selektivní kopírování, budete muset použít jiný přístup.

Používání připojení Bind ke kopírování souborů

Svazky Docker poskytují další způsob přesouvání souborů mezi kontejnery a vaším hostitelem. Bind připojení místního adresáře do kontejneru vám umožní přistupovat k jeho obsahu z vašeho hostitelského souborového systému, čímž odpadá nutnost používat docker cp .

docker run -v /example/host/directory:/container/path my-image:latest

Obsah /example/host/directory cesta jsou připojeny do souborového systému kontejneru na /container/path . S těmito soubory můžete pracovat mimo Docker pomocí známých nástrojů, jako je cp , rsync a váš prohlížeč grafických souborů.

Tato technika je užitečná pouze tehdy, když pracujete s jedním adresářem kontejneru. Nefunguje to dobře, když kopírujete z libovolných umístění, protože při vytváření kontejneru musíte předem znát cesty, které budete používat.

Měli byste si také dávat pozor na oprávnění souborového systému:soubory vytvořené v kontejneru budou obvykle ve vlastnictví root . To může vytvořit nepříjemné scénáře na hostiteli, kde nebudete moci upravovat nebo mazat soubory uvnitř vázaného adresáře. Použijte chown příkaz na hostiteli a uvnitř kontejneru pro přepnutí vlastnictví v závislosti na prostředí, pokud je to nutné.

Co s COPY v Dockerfiles?

docker cp může být někdy zaměňováno s COPY instrukce v Dockerfiles. Je důležité si uvědomit, že tyto dvě funkce slouží k velmi odlišným případům použití.

COPY nelze použít k přesunu souborů mezi hostitelem a spuštěným kontejnerem. Slouží ke stahování souborů do obrázků během procesu sestavování:

COPY /home/me/my-website /var/www/html/.

Zde se zdrojový kód webu zkopíruje do obrázku jako součást sestavení. Jedná se o jednorázový proces. Každý kontejner spouštěný z obrázku by obsahoval zdroj webu tak, jak byl v době, kdy jste spustili docker build .

docker cp umožňuje nahradit tento zdrojový kód novější verzí, jakmile je kontejner spuštěn. COPY instrukce jsou pro vytvoření souborů součástí statického obrazu; cp příkazy interagují s živými kontejnery.

Kdy kopírovat soubory pomocí Dockeru?

Ruční kopírování souborů z vašeho hostitele do kontejneru Docker nebo naopak by mělo být poměrně vzácným jevem. Obrázky mají být soběstačné, takže by měly obsahovat vše, co potřebujete ke spuštění instance. Konfigurace se obvykle provádí pomocí proměnných prostředí.

Kontejnery, které potřebují trvale ukládat data, by měly používat svazky Docker. Objemy umožňují, aby data přežila jakýkoli jednotlivý kontejner, takže nemusíte ručně docker cp před výměnou instance. Když vytváříte zálohy, místo vytahování souborů z kontejnerů zkopírujte svazky ze svého hostitele.

docker cp je nejužitečnější při ladění kontejnerů nebo práci ve vývojovém prostředí. Někdy je potřeba ručně vložit dočasný konfigurační soubor nebo vytáhnout skrytý protokol. Pomocí docker cp je rychlejší a pohodlnější než při každé změně kódu přestavět celý obrázek.

Vždy pamatujte, že soubory byly zkopírovány do kontejnery budou přetrvávat pouze po dobu životnosti kontejneru. Spuštěním dalšího kontejneru ze stejného obrázku získáte čistý štít bez souborů, které jste přidali pomocí docker cp .

Přehled

docker cp umožňuje přesouvat soubory mezi hostitelem a kontejnery Docker. Pracuje se soubory a adresáři, ale postrádá většinu pokročilých funkcí v prostředí cp příkaz.

Pravidelné používání docker cp označuje potenciální odchylku od osvědčených postupů pro kontejnery. Je rozumné s ním zacházet jako s pohodlným nástrojem pro vývojářské použití, spíše než jako nedílnou součástí práce s kontejnery. Dlouhodobá perzistence souborů by měla být implementována se svazky, protože se jedná o prvotřídní komponenty v ekosystému Docker.


Docker
  1. Jak používat obrázky, kontejnery a soubory Docker do hloubky

  2. Jak sdílet data mezi kontejnery Docker

  3. Jak vypsat Docker kontejnery

  1. Jak používat Docker Compose

  2. Jak zálohovat a obnovovat kontejnery Docker

  3. Jak pozastavit a obnovit kontejnery Docker

  1. rozdíl mezi podmanem a dockerem.

  2. Jak a proč používat vzdáleného hostitele dockeru

  3. Jak kopírovat soubory mezi Kubernetes Pods a vaším počítačem