ONBUILD
Dockeru instrukce umožňuje nastavit spouštěče v rámci obrázku. Vaše spouštěče budou provedeny později, až bude obrázek použit jako základ pro jiný. Stanou se součástí nového kontextu downstream image a nebudou vrstvami souborového systému ve vašem počátečním docker build
.
Přidávání spouštěčů ONBUILD
ONBUILD
je instrukce, kterou zapisujete do svých Dockerfiles. Je jedinečný, protože přijímá jiné instrukce jako její argument. Můžete zadat jakoukoli operaci Dockerfile, například COPY
nebo RUN
a nechat jej spustit během sestavení následného obrazu.
ONBUILD RUN example-command
Tento příklad spustí example-command
v dětském obrazu v době, kdy je vytvořen. Zde je další případ, kdy je soubor zkopírován z kontextu sestavení následujícího obrázku do souborového systému:
ONBUILD COPY assets.json /app/assets.json
ONBUILD
instrukce nemají žádný vliv na obraz vytvořený souborem Dockerfile, ve kterém jsou definovány. Vytvoření výše uvedeného souboru Dockerfile by nebylo spusťte example-command
nebo zahrnout assets.json
na obrázku:
# Does not include the extra instructions docker build -t base-image:latest .
Spouštěče budou použity, když napíšete další Dockerfile, který používá první jako svůj základ:
FROM base-image:latest RUN my-binary
docker build -t downstream-image:latest .
Vytvoření tohoto Dockerfile spustí example-command
, zkopírujte do assets.json
a nakonec spusťte my-binary
. ONBUILD
spouštěče jsou vždy spuštěny jako první, bezprostředně za FROM
instrukce v downstreamovém Dockerfile.
Jak Docker rozpoznává spouštěče?
ONBUILD
neovlivňuje souborový systém základního kontejneru, ale Docker stále ví, že jsou přítomny spouštěče, když vytváříte downstream image. Proces sestavení sleduje ONBUILD
pokyny, které najde a zaznamená je do metadat obrázku.
Docker kontroluje metadata obrázků, na které odkazuje FROM
návod. Pokud pojmenovaný obrázek obsahuje spouštěče ve svých metadatech, tyto spouštěcí pokyny jsou účinně vloženy do horní části downstreamového souboru Dockerfile před zahájením sestavování.
Spouštěče se ve skutečnosti spouštějí jako součást FROM
sestavy etapa. Budou spouštěny v pořadí, v jakém byly zapsány v upstreamu Dockerfile. Pokud je ONBUILD
instrukce selže, Docker zruší sestavení a bude vypadat jako FROM
fáze byla příčinou.
Omezení
Jako argument ONBUILD
můžete použít jakoukoli instrukci Dockerfile spouštěč se třemi výjimkami:
ONBUILD FROM
– To není povoleno, protože by to přepsalo základní obrázek použitý pro sestavení. Každý Dockerfile musí dědit z jedné báze.ONBUILD MAINTAINER
–MAINTAINER
instrukce je zastaralá a neměla by se používat; informace o autorství je nejlepší poskytnout jako štítek.LABEL
instrukce je kompatibilní sONBUILD
.ONBUILD ONBUILD
– ŘetězeníONBUILD
pokyny nejsou podporovány. Všechny spouštěče se spouštějí v obraze bezprostředně za vaším souborem Dockerfile. Nemůžete definovat spouštěče, které se mají spustit v obrázcích „grand-child“ dvě nebo více úrovní pod definujícím Dockerfile.
Všechny pokyny jsou definovány stejným způsobem jako jejich běžné použití. Zapsáním běžného kroku do vašeho Dockerfile a následným přidáním předpony ONBUILD
, přesune jej z normálního toku sestavení a místo toho z něj udělá spouštěč sestavení.
Kdy jsou spouštěče ONBUILD užitečné?
ONBUILD
se nejčastěji používá v obslužných obrazech, které automatizují úlohy, jako je kompilace kódu. Tento druh procedury obecně vyžaduje provedení několika kroků v určitém pořadí, se závislostmi, jako je váš zdrojový kód, přidanými v určitém okamžiku.
Vezměme si kompilační obraz, který hledá zdrojový kód v adresáři a poté provede příkaz k jeho sestavení. Nemůžete jednoduše COPY
a RUN
v Dockerfile tohoto obrázku, protože zdroj koncového uživatele by neexistoval uvnitř vašeho kontext sestavení obrázku.
Pomocí ONBUILD
vám umožní poskytnout standardní soubor Dockerfile, který mohou vaši uživatelé rozšířit a docker build
bez znovuobjevování běžných funkcí:
ENV BUILD_ENV=production RUN init-build.sh ONBUILD COPY /src /build ONBUILD RUN compile.sh --destination=/bin
Tento příklad ukazuje, jak může obraz tvůrce poskytnout předem nakonfigurované prostředí kompilace. Při použití jako základní obrázek by byl kód automaticky zkompilován z kontextu sestavení. Tento obrázek by mohl interagovat s kompilovaným výstupem v /bin
v rámci svých vlastních fází Dockerfile.
Přehled
ONBUILD
pokyny v Dockerfiles vám poskytují způsob, jak spouštět spouštěče jako součást sestavení po proudu. Jako ONBUILD
můžete použít jakoukoli jinou instrukci Dockerfile spouště, až na několik omezení.
Pomocí ONBUILD
umožňuje poskytovat obecné obrazy Docker, které definují opakovaně použitelné sady funkcí. Je to efektivnější, než když uživatelé doslovně zkopírují text příkladu Dockerfiles a poté do spodní části přidají své vlastní pokyny. Stále můžete upravovat a aktualizovat základní obraz, aniž byste od svých uživatelů vyžadovali akci.
Přijímání ONBUILD
omezuje opakování a usnadňuje rozšiřitelné základní obrázky Docker. ONBUILD
pokyny stojí za zvážení, když vytváříte standardní soubor Dockerfile, který bude muset koncoví uživatelé upravit, než bude konečné prostředí kontejneru považováno za dokončené.