Middle
Milyen esetekben használják a több szakaszos (multi-stage) build-et?
sobes.tech MI
Válasz az MI-től
A több szakaszos (multi-stage build) Dockerben a következő esetekben használják:
- A végső kép méretének csökkentése: Az első (vagy közbenső) build szinten találhatók azok az eszközök, amelyek a fordításhoz, tesztekhez vagy más build lépésekhez szükségesek (pl. fordító, build függőségek). A második (végső) szinten csak azok az artefaktok kerülnek másolásra, amelyek a futtatáshoz szükségesek (fordított kód, futtatható fájlok, futási idő könyvtárak). Ez megakadályozza, hogy a végső képen szükségtelen függőségek és build eszközök kerüljenek, jelentősen csökkentve a méretet.
- A build és futtatási szakaszok elkülönítése: A világos szétválasztás megkönnyíti a build folyamatának megértését és hibakeresését. Szakaszokat lehet létrehozni a forráskód fordítására, tesztek futtatására, lintelésre, majd csak ezután a kész alkalmazással végső képet létrehozni.
- Biztonság növelése: A végső kép a minimális szükséges komponenseket tartalmazza, csökkentve a támadási felületet. A build eszközök és a forráskód, amelyek sebezhetőségeket tartalmazhatnak, nem kerülnek be a gyártási képbe.
- A build gyorsítása (bizonyos esetekben): A közbenső képek cache-elhetők, és csak a legutolsó szakaszokban történő változtatások esetén nem szükséges mindent újraépíteni.
- A build folyamat egységesítése: Az alkalmazás buildelése és a Docker kép létrehozása egy automatizált folyamat lesz egy Dockerfile-ban, ami egyszerűsíti a CI/CD pipeline-okat.
Példa egy Go alkalmazásra:
# Build szakasz
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
# Futtatható fájl fordítása
RUN go build -ldflags="-s -w" -o myapp .
# Végső szakasz
FROM alpine:latest
WORKDIR /app
# Csak a futtatható fájl másolása az előző szakaszból
COPY --from=builder /app/myapp .
# Parancs az alkalmazás indításához
CMD ["./myapp"]