Middle
Kokiais atvejais naudojama daugiaetapė (multi-stage) statyba?
sobes.tech AI
Atsakymas iš AI
Daugiaetapė statyba (multi-stage build) Docker naudojama šiais atvejais:
- Galutinio vaizdo dydžio sumažinimas: Pirmame (arba tarpiname) statybos etape yra įrankiai, reikalingi kompiliacijai, testams ar kitiems statybos etapams (pavyzdžiui, kompiliatorius, statybos priklausomybės). Antrame (galutiniame) etape kopijuojami tik reikalingi veikimui artefaktai (kompiliuotas kodas, vykdomi failai, laikinosios bibliotekos). Tai leidžia išvengti nereikalingų priklausomybių ir statybos įrankių įtraukimo į galutinį vaizdą, žymiai sumažinant jo dydį.
- Statybos ir paleidimo etapų atskyrimas: Aiškus etapų atskyrimas palengvina statybos proceso supratimą ir derinimą. Galima turėti etapus kodo kompiliacijai, testų vykdymui, lintavimui ir tik tada sukurti galutinį vaizdą su paruošta diegimui programa.
- Saugumo gerinimas: Galutinis vaizdas turi minimalų reikalingų komponentų kiekį, tai sumažina atakos paviršių. Statybos įrankiai ir pradinio kodo, kuris gali turėti pažeidžiamumų, neįtraukiami į naudojamą produkcijos vaizdą.
- Statybos pagreitis (kai kuriais atvejais): Tarpiniai vaizdai gali būti talpinami į talpyklą, ir keičiantis tik paskutiniams etapams, nereikia iš naujo kurti visko nuo pradžių.
- Statybos proceso suvienodinimas: Programos statyba ir jos Docker vaizdo kūrimas tampa vienu automatizuotu procesu Dockerfile viduje, tai supaprastina CI/CD procesus.
Pavyzdys, naudojant Go:
# Statybos etapas
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# Vykdomojo failo statyba
RUN go build -ldflags="-s -w" -o myapp .
# Galutinis etapas
FROM alpine:latest
WORKDIR /app
# Kopijuojame tik vykdomąjį failą iš ankstesnio etapo
COPY --from=builder /app/myapp .
# Komanda programos paleidimui
CMD ["./myapp"]