Sobes.tech
Middle

V ktorých prípadoch sa používa viacstupňová (multi-stage) zostava?

sobes.tech AI

Odpoveď od AI

Viacstupňová (multi-stage) stavba v Docker sa používa v nasledujúcich prípadoch:

  1. Zníženie veľkosti finálneho obrazu: V prvom (alebo medzičase) vrstvu stavby sa nachádzajú nástroje potrebné na kompiláciu, testovanie alebo iné fázy stavby (napríklad prekladač, závislosti na stavebnom procese). V druhej (finálnej) vrstve sa kopírujú iba artefakty potrebné na spustenie aplikácie (skompilovaný kód, spustiteľné súbory, knižnice runtime). Týmto sa zabráni zahrnutiu zbytočných závislostí a nástrojov na stavbu do konečného obrazu, čím sa jeho veľkosť výrazne zníži.
  2. Oddelenie fáz stavby a spustenia: Jasné oddelenie uľahčuje pochopenie procesu stavby a jeho ladenie. Môžu byť fázy na kompiláciu zdrojového kódu, spustenie testov, linting a až potom vytvorenie finálneho obrazu s pripravenou aplikáciou.
  3. Zlepšenie bezpečnosti: Finálny obraz obsahuje minimálne potrebné komponenty, čo znižuje povrch útoku. Nástroje na stavbu a zdrojový kód, ktoré môžu obsahovať zraniteľnosti, nie sú zahrnuté v obraze používanom v produkcii.
  4. Zrýchlenie stavby (v niektorých prípadoch): Medziprodukty môžu byť cache-ované, a pri zmenách len v posledných fázach stavby nie je potrebné všetko znovu stavať od začiatku.
  5. Unifikácia procesu stavby: Stavba aplikácie a vytvorenie jej Docker obrazu sa stávajú jedným automatizovaným procesom v rámci jedného Dockerfile, čo zjednodušuje CI/CD pipeline.

Príklad použitia pre aplikáciu v Go:

# Fáza stavby
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# Kompilácia spustiteľného súboru
RUN go build -ldflags="-s -w" -o myapp .

# Finálna fáza
FROM alpine:latest
WORKDIR /app
# Kopírovanie iba spustiteľného súboru z predchádzajúcej fázy
COPY --from=builder /app/myapp .
# Príkaz na spustenie aplikácie
CMD ["./myapp"]