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

Jak používat Dockerfile ONBUILD ke spouštění spouštěčů na následných sestaveních

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 MAINTAINERMAINTAINER instrukce je zastaralá a neměla by se používat; informace o autorství je nejlepší poskytnout jako štítek. LABEL instrukce je kompatibilní s ONBUILD .
  • 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é.


Docker
  1. Jak používat Docker Compose

  2. Jak použít Dockerfile k vytvoření Docker Image

  3. Jak použít mogrify k oříznutí obrázku

  1. Jak používat Lightdm pro uživatelsky definované relace?

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

  3. Jak vytvořit Docker Image z kontejneru a Dockerfile

  1. Jak vytvořit Docker Image pomocí Dockerfile

  2. Jak používat MySQL SHOW TRIGGERS

  3. Jak používat kgdb přes ethernet (kgdboe)?