Sobes.tech
Middle

Millistel juhtudel kasutatakse mitmetasandilist (multi-stage) ehitust?

sobes.tech AI

Vastus AI-lt

Dockeris mitmeastmelise ehitamise (multi-stage build) kasutatakse järgmistel juhtudel:

  1. Lõpliku pildi suuruse vähendamine: Esimeses (või vahepealses) ehitusetapis on tööriistad, mis on vajalikud kompileerimiseks, testimiseks või muude ehitusetappide jaoks (näiteks kompilaator, ehituse sõltuvused). Teises (lõplikus) etapis kopeeritakse ainult vajalikud artefaktid (kompileeritud kood, täidetavad failid, jooksutegurid). See võimaldab vältida tarbetute sõltuvuste ja ehitustööriistade kaasamist lõplikku pildisse, oluliselt vähendades selle suurust.
  2. Ehituse ja käivitamise etappide eraldamine: Selge etappide eraldamine lihtsustab ehitusprotsessi mõistmist ja silumist. Võib olla etappe lähtekoodi ehitamiseks, testide käivitamiseks, lintimiseks ning alles siis luua valmis pilt kasutamiseks.
  3. Turvalisuse parandamine: Lõplik pilt sisaldab minimaalset vajalikku komponentide kogust, mis vähendab rünnaku pinda. Ehitusvahendid ja algkood, mis võivad sisaldada haavatavusi, ei kuulu kasutatava tootepildi hulka.
  4. Ehituse kiirendamine (mõnel juhul): Vahepealsed pildid võivad olla vahemälus, ning ainult viimaste etappide muutmisel ei ole vaja kogu protsessi uuesti ehitada.
  5. Ehituse protsessi ühtlustamine: Rakenduse ehitamine ja selle Docker-pildi loomine muutub automatiseeritud protsessiks ühe Dockerfile'i raames, mis lihtsustab CI/CD torujuhtmeid.

Näide Go kasutamiseks:

# Ehitusetapp
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# Täidetava faili ehitamine
RUN go build -ldflags="-s -w" -o myapp .

# Lõplik etapp
FROM alpine:latest
WORKDIR /app
# Ainult eelmisest etapist kopeeritud täidetav fail
COPY --from=builder /app/myapp .
# Rakenduse käivitamise käsk
CMD ["./myapp"]