ADD
a COPY
jsou dva podobné Dockerfile
pokyny, které vám umožní přidat obsah k obrázkům v době sestavování. Zatímco COPY
je přímočará kopie zdroje do cíle, ADD
obsahuje další funkce pro práci s archivy a vzdálenými adresami URL.
KOPÍROVAT
COPY
je jednodušší z obou pokynů. Přijímá dva argumenty, zdroj a cíl:
COPY example.txt /example/dir/example.txt
Zdrojová cesta bude zkopírována z vašeho hostitele Dockeru do souborového systému kontejneru. Vytvořený obraz bude obsahovat zkopírovaný soubor nebo adresář v zadané cílové cestě.
COPY
funguje se všemi soubory a adresáři, ale zdrojové cesty jsou omezeny na ty v kontextu vašeho aktivního sestavení. Kontext se nastaví při spuštění docker build
:
docker build . # OR docker build /path/to/context
Instrukce automaticky vytvoří cílový adresář v kontejneru, pokud ještě neexistuje. Pokud zahrnete koncové lomítko (/
), Docker zachází s cílem jako s adresářem a umístí do něj zdrojový soubor.
Můžete použít zástupné znaky, například *.jpg
ve zdrojové cestě, aby odpovídala sadě souborů. Tyto výrazy budou analyzovány pomocí Go filepath
dohazovač.
Zkopírované soubory mají ve výchozím nastavení UID a GID 0. To lze upravit pomocí volitelného --chown
příznak, který přijímá UID, GID a jména. Spouští chown
na zkopírované soubory, jakmile jsou uvnitř kontejneru:
COPY --chown=my-user:my-group example.txt /example.txt
COPY
také podporuje --from
vlajka. Tím se zdrojová cesta upraví tak, aby odkazovala na jinou obrázek kontejneru, namísto vašeho místního kontextu sestavení. Funguje také s vícestupňovými sestaveními, aby vtáhl artefakty vytvořené v dřívějších fázích sestavení.
# Copies /usr/bin/composer from the composer:latest image COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Multi-stage build example # Stage 1: Copies example.scss from working directory into node:latest image # Stage 2: Copies example.css built in stage 1 into the final image (based on httpd:latest) FROM node:latest AS sass COPY example.scss . RUN npm install -g node-sass && node-sass example.scss example.css FROM httpd:latest COPY --from=sass /example.css example.css
--from
příznak musí odkazovat na pojmenovanou fázi, která je uvedena dříve v Dockerfile
. Pokud neexistuje žádná odpovídající fáze, Docker předpokládá, že místo toho odkazujete na obrázek. Pokud obrázek nelze stáhnout, dojde k chybě sestavení.
PŘIDAT
ADD
má stejnou syntaxi jako COPY
, přijímá zdrojové a cílové cesty. Neexistuje žádná podpora pro --from
ale můžete použít --chown
.
Na rozdíl od COPY
, ADD
je schopen stahovat adresy URL vzdálených souborů. Zadáním veřejně přístupné adresy URL jako zdrojové cesty se tento soubor stáhne a přidá do obrázku kontejneru. Upravený čas cílové cesty (mtime
) bude nastavena na hodnotu Last-Modified
záhlaví v HTTP odpovědi stahování.
ADD
může také extrahovat archivy tar, včetně archivů komprimovaných pomocí gzip, bzip2 a xz. Zadáním kompatibilního archivu jako zdrojové cesty se jeho obsah rozbalí do určeného adresáře kontejneru. Stávající obsah adresáře bude zachován.
Detekce archivu je založena na skutečném obsahu souboru, nikoli na názvu souboru nebo přípony. Můžete použít jakýkoli originální archivní soubor, aniž byste jej pojmenovali .tar
, .tar.gz
nebo .tar.xz
.
Schopnost automaticky extrahovat archivy zjednodušuje přidávání softwarových balíčků distribuovaných jako soubory tar do obrázků kontejnerů. Dodání cesty tar do COPY
by zkopíroval komprimovaný archivní soubor tak, jak je, nikoli jeho obsah. Budete muset použít RUN
pokyn k ruční dekomprimaci souboru.
Chování kolem COPY
použít pro ADD
na. S výjimkou vzdálených adres URL musí v kontextu vašeho sestavení existovat zdrojové cesty. Cílová cesta kontejneru bude automaticky vytvořena, pokud neexistuje pomocí Dockerových pravidel pro rozlišení cesty.
Přehled
COPY
a ADD
jsou dvě úzce související, ale výrazně odlišné instrukce, které můžete použít při psaní Dockerfile
. Protože se jejich sady funkcí překrývají, možná vás zajímá, která je „nejlepší“ pro použití ve výchozím nastavení.
Podle vlastní příručky osvědčených postupů společnosti Docker byste měli sáhnout po COPY
pokud nepotřebujete další možnosti ADD
. ADD
je neprůhledná operace, která přidává kouzlo do procesu kopírování.
Pouze pomocí ADD
když je to skutečně potřeba, pomáhá sdělit vaše záměry. Jinak riskujete, že si členové týmu zvyknou používat ADD
což by mohlo mít katastrofální následky. Neúmyslné ADD my-archive.tar .
místo COPY my-archive.tar
může způsobit zmatek a nefunkční sestavení, když se obsah archivu zobrazí ve vašem kontejneru namísto samotného archivu.
Měli byste také pečlivě zvážit, kdy je vhodné použít ADD
se vzdálenými URL. Může být efektivnější použít curl
nebo wget
s RUN
instrukce, protože to pomáhá usnadnit ukládání obrazové vrstvy do mezipaměti. ADD
instrukce vždy zruší platnost mezipaměti pro všechny následující fáze sestavení, když se soubor na vzdálené adrese URL změní.
Je-li to možné, je dobré zkopírované soubory po použití smazat. Pokud stahujete nebo extrahujete instalační program softwaru, smazání jednorázového binárního souboru po jeho spuštění pomůže zeštíhlit váš konečný obrázek.