Middle
În ce cazuri se folosește o construcție multi-stage?
sobes.tech AI
Răspuns de la AI
Construirea multi-etap (multi-stage build) în Docker este utilizată în următoarele cazuri:
- Reducerea dimensiunii imaginii finale: În primul (sau intermediar) strat de construire se află instrumentele necesare pentru compilare, teste sau alte etape de construire (de exemplu, compilator, dependențe de construire). În al doilea (final) strat, se copiază doar artefactele necesare pentru rularea aplicației (cod compilat, fișiere executabile, biblioteci de timp de execuție). Acest lucru evită includerea în imaginea finală a dependențelor și instrumentelor de construire inutile, reducând semnificativ dimensiunea acesteia.
- Separarea etapelor de construire și rulare: Separarea clară facilitează înțelegerea procesului de construire și depanare. Se pot avea etape pentru compilarea codului sursă, rularea testelor, linting și apoi crearea imaginii finale cu aplicația gata de implementare.
- Îmbunătățirea securității: Imaginea finală conține minimul necesar de componente, ceea ce reduce suprafața de atac. Instrumentele de construire și codul sursă, care pot conține vulnerabilități, nu sunt incluse în imaginea utilizată în producție.
- Accelerarea construirii (în unele cazuri): Imaginile intermediare pot fi cache-uite, iar la modificări doar în ultimele etape de construire, nu este necesară reconstruirea întregii imagini de la zero.
- Unificarea procesului de construire: Construirea aplicației și crearea imaginii Docker devin un proces automatizat unic în interiorul unui Dockerfile, ceea ce simplifică pipeline-urile CI/CD.
Exemplu de utilizare pentru o aplicație în Go:
# Etapa de construire
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# Construirea fișierului executabil
RUN go build -ldflags="-s -w" -o myapp .
# Etapa finală
FROM alpine:latest
WORKDIR /app
# Copiem doar fișierul executabil din etapa anterioară
COPY --from=builder /app/myapp .
# Comanda pentru a porni aplicația
CMD ["./myapp"]