Sobes.tech
Middle

Ce sunt compilările multi-etape în Docker și cum funcționează?

sobes.tech AI

Răspuns de la AI

Build-urile multi-etajate permit utilizarea mai multor imagini temporare în timpul procesului de construire Docker pentru a obține o imagine finală optimizată.

Cum funcționează:

  • Divizarea în etape: Procesul de construire este împărțit în mai multe etape (FROM), fiecare moștenind din propria imagine de bază.
  • Copierea artefactelor: Fișierele și artefactele create în etapele anterioare sunt copiate în etapele următoare folosind comanda COPY --from=<numele_etapei sau numărul>.
  • Imaginea finală: Imaginea finală este creată pe baza ultimei etape. Include doar fișierele copiate explicit din etapele anterioare. Straturile intermediare și instrumentele utilizate în etapele timpurii pentru compilare sau testare nu sunt incluse în imaginea finală.

Avantaje:

  • Reducerea dimensiunii imaginii: În imaginea finală sunt incluse doar fișierele necesare pentru rularea aplicației.
  • Îmbunătățirea securității: Instrumentele de construire, compilatoarele și alte componente potențial vulnerabile nu sunt incluse în imaginea finală.
  • Accelerarea construirii: Straturile intermediare pot fi cache-uite.
  • Curățenia Dockerfile: Diferitele etape de construire (compilare, testare, împachetare) sunt logic separate.

Exemplu:

# Etapa de construire: compilarea aplicației
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .

# Etapa de rulare: pornirea aplicației
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]