Sobes.tech
Middle

Čo sú viacstupňové zostavy v Docker a ako fungujú?

sobes.tech AI

Odpoveď od AI

Viacestné zostavy umožňujú používať počas procesu zostavovania Docker viac dočasných obrázkov na získanie konečného, optimalizovaného obrázka.

Ako to funguje:

  • Rozdelenie na etapy: Proces zostavovania je rozdelený na niekoľko etáp (FROM), z ktorých každá dedí zo svojho vlastného základného obrázka.
  • Kopírovanie artefaktov: Súbory a artefakty vytvorené v predchádzajúcich etapách sa kopírujú do nasledujúcich pomocou príkazu COPY --from=<názov_etapy alebo číslo>.
  • Konečný obrázok: Konečný obrázok je vytvorený na základe poslednej etapy. Obsahuje iba súbory, ktoré boli explicitne skopírované z predchádzajúcich etáp. Medzivrstvy a nástroje používané v skorších etapách na kompiláciu alebo testovanie nie sú zahrnuté v konečnom obrázku.

Výhody:

  • Zníženie veľkosti obrázku: Do konečného obrázka sa zahrnujú iba súbory potrebné na spustenie aplikácie.
  • Zlepšenie bezpečnosti: Nástroje na zostavovanie, prekladače a ďalšie potenciálne zraniteľné komponenty nie sú zahrnuté v konečnom obrázku.
  • Zrýchlenie zostavovania: Medzivrstvy môžu byť cache-ované.
  • Čistota Dockerfile: Rôzne etapy zostavovania (kompilácia, testovanie, balenie) sú logicky oddelené.

Príklad:

# Etapa zostavovania: kompilácia aplikácie
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .

# Etapa spustenia: spustenie aplikácie
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]