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"]