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

Mezipaměť Dockeru – Jak provést čisté opětovné sestavení obrazu a vymazat mezipaměť Dockerů

Kontejnery vám umožňují zabalit vaši aplikaci přenosným způsobem, který lze spustit v mnoha prostředích. Nejoblíbenější kontejnerovou platformou je Docker.

Tento tutoriál vysvětlí, jak využít mezipaměť sestavení Dockeru ve svůj prospěch.

Mezipaměť sestavení Docker

Vytváření obrázků by mělo být rychlé, efektivní a spolehlivé. Koncept obrázků Docker přichází s neměnnými vrstvami. Každý příkaz, který provedete, má za následek vytvoření nové vrstvy, která obsahuje změny ve srovnání s předchozí vrstvou.

Všechny dříve vytvořené vrstvy jsou uloženy v mezipaměti a lze je znovu použít. Pokud však vaše instalace závisí na externích zdrojích, může mezipaměť Dockeru způsobit problémy.

Jak využít mezipaměť sestavení Docker

Abychom porozuměli problémům Docker build-cache, pojďme vytvořit jednoduchou vlastní aplikaci nginx Docker. Před vytvořením obrazu vytvořte Dockerfile, který aktualizuje knihovny a přidá vlastní úvodní stránku:

FROM nginx:1.21.6

# Update all packages
RUN apt-get update && apt-get -y upgrade

# Use a custom startpage
RUN echo '<html><bod>My Custom Startpage</body></html>' > /usr/share/nginx/html/index.html

Nyní můžete vytvořit image Docker:

$  docker build -t my-custom-nginx .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e12...  5.8s
=> [2/3] RUN apt-get update && apt-get -y upgrade           3.6s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...        0.2s

=> exporting to image                                       0.1s
=> exporting layers                                         0.1s
=> writing image                                            0.0s
=> naming to docker.io/library/my-custom-nginx

[+] Building 11.3s (7/7) FINISHED

V tomto příkladu jsem kvůli čitelnosti odstranil nějaký výstup. Pokud vytvoříte obrázek poprvé, uvidíte, že to nějakou dobu trvá, v mém případě 11.3s .

Jedním z dlouhých spouštěcích kroků je apt-get update && apt-get -y upgrade v závislosti na tom, kolik závislostí je aktualizováno a jak rychlý je váš internet. Zkontroluje aktualizace balíčků v operačním systému a nainstaluje je, pokud jsou k dispozici.

Nyní jej spustíte znovu a budete mít prospěch z mezipaměti sestavení Docker:

$ docker build -t my-custom-nginx .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e1211ac1…   0.0s
=> CACHED [2/3] RUN apt-get update && apt-get -y upgrade        0.0s
=> CACHED [3/3] RUN echo '<html><bod>My Custom Startpage...     0.0s

=> exporting to image                                           0.0s
=> exporting layers                                             0.0s
=> writing image                                                0.0s
=> naming to docker.io/library/my-custom-nginx

Building 1.1s (7/7) FINISHED

Tentokrát je sestavení obrazu velmi rychlé, protože dokáže znovu použít všechny dříve vytvořené obrazy. Když přizpůsobíte svou úvodní stránku v Dockerfile, uvidíte, jak je ovlivněno chování ukládání do mezipaměti:

FROM nginx:1.21.6

# Update all packages
RUN apt-get update && apt-get -y upgrade

# Use a custom startpage
RUN echo '<html><bod>New Startpage</body></html>' > /usr/share/nginx/html/index.html

Nyní vytvořte obrázek znovu:

$ docker build -t my-custom-nginx .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e1211ac1…   0.0s
=> CACHED [2/3] RUN apt-get update && apt-get -y upgrade        0.0s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...            0.2s

=> exporting to image                                           0.0s
=> exporting layers                                             0.0s
=> writing image                                                0.0s
=> naming to docker.io/library/my-custom-nginx

Building 2.1s (7/7) FINISHED

Tentokrát pouze přestavěl poslední vrstvu, protože rozpoznal, že RUN příkaz se změnil. Znovu však použil intenzivní 2. krok sestavení a neaktualizoval závislosti operačního systému.

Chování mezipaměti je inteligentní. Jakmile je třeba znovu sestavit 1 krok, každý následující krok se vytvoří znovu. Proto je dobré umístit často se měnící části na konec Dockerfile znovu použít předchozí vrstvy sestavení.

Přesto možná budete chtít vynutit znovu sestavení vrstvy uložené v mezipaměti, abyste vynutili aktualizaci balíčku. Vynucení opětovného sestavení může být nezbytné, protože chcete mít svou aplikaci v bezpečí a používat nejnovější aktualizace, když jsou k dispozici.

Jak používat sestavení Dockeru --no-cache Možnost

Zakázání mezipaměti sestavení může mít různé důvody. Obrázek můžete znovu sestavit ze základního obrázku bez použití vrstev uložených v mezipaměti pomocí --no-cache možnost.

$ docker build -t my-custom-nginx .

=> CACHED [1/3] FROM docker.io/library/nginx:1.21.6@sha256:...  0.0s
=> [2/3] RUN apt-get update && apt-get -y upgrade               3.5s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...            0.2s

=> exporting to image                                           0.1s
=> exporting layers                                             0.0s
=> writing image                                                0.0s
=> naming to docker.io/library/my-custom-nginx

Building 5.5s (7/7) FINISHED

Byly vytvořeny a použity nové vrstvy. docker build tentokrát spustí oba příkazy, což přichází s přístupem všechno nebo nic. Buď poskytnete --no-cache možnost, která provede všechny příkazy, nebo uložíte do mezipaměti co nejvíce.

Jak používat argumenty Dockeru pro vynechání mezipaměti

Další možnost umožňuje poskytnout malý výchozí bod v Dockerfile. Svůj Dockerfile musíte upravit takto:

FROM nginx:1.21.6

# Update all packages
RUN apt-get update && apt-get -y upgrade

# Custom cache invalidation
ARG CACHEBUST=1

# Use a custom startpage
RUN echo '<html><bod>New Startpage</body></html>' > /usr/share/nginx/html/index.html

Přidáte CACHEBUST argument do vašeho Dockerfile v umístění, kde chcete vynutit přestavbu. Nyní můžete vytvořit image Docker a poskytnout vždy jinou hodnotu, která způsobí opětovné spuštění všech následujících příkazů:

$ docker build -t my-custom-nginx --build-arg CACHEBUST=$(date +%s) .

=> [1/3] FROM docker.io/library/nginx:1.21.6@sha256:e1211ac1...    0.0s
=> CACHED [2/3] RUN apt-get update && apt-get -y upgrade           0.0s
=> [3/3] RUN echo '<html><bod>My Custom Startpage...               0.3s

=> exporting to image                                              0.0s
=> exporting layers                                                0.0s
=> writing image                                                   0.0s
=> naming to docker.io/library/my-custom-nginx

Building 1.0s (7/7) FINISHED

Poskytnutím --build-arg CACHEBUST=$(date +%s) , nastavíte parametr na vždy jinou hodnotu, která způsobí opětovné sestavení všech následujících vrstev.


Docker
  1. Jak přesunout obrazy Dockeru mezi hostiteli

  2. Jak exportovat a importovat kontejnery Docker

  3. Jak potvrdit změny v obrazu Dockeru

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

  2. Jak zabalit a přenést obrazy Dockeru z jednoho serveru na druhý

  3. Jak upravit obrázky Docker

  1. Jak aktualizovat obrázek a kontejner Dockeru na nejnovější verzi

  2. Jak automaticky vytvářet a konfigurovat vlastní obrázky dockeru pomocí Dockerfile – část 3

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