Middle
Mi az a több szakaszos build a Dockerben, és hogyan működik?
sobes.tech MI
Válasz az MI-től
Többrétegű építések lehetővé teszik több ideiglenes kép használatát a Docker építési folyamat során, hogy egy optimalizált végső képet kapjunk.
Hogyan működik:
- Szintekre bontás: Az építési folyamat több szakaszra van osztva (
FROM), mindegyik saját alapképből örököl. - Artefaktumok másolása: A korábbi szakaszokban létrehozott fájlokat és artefaktumokat a
COPY --from=<szakasz_neve vagy száma>parancs segítségével másolják a következő szakaszokba. - Végső kép: A végső kép az utolsó szakasz alapján készül. Csak azok a fájlok kerülnek bele, amelyeket kifejezetten másoltak az előző szakaszokból. A közbenső rétegek és az eszközök, amelyeket korai szakaszokban fordításra vagy tesztelésre használtak, nem kerülnek bele a végső képbe.
Előnyök:
- A kép méretének csökkentése: Csak azok a fájlok kerülnek a végső képbe, amelyekre a futtatáshoz szükség van.
- Biztonság növelése: A build eszközök, fordítók és más potenciálisan sérülékeny összetevők nem kerülnek bele a végső képbe.
- Gyorsabb építés: A közbenső rétegek cache-elhetők.
- Dockerfile tisztasága: A különböző építési szakaszok (fordítás, tesztelés, csomagolás) logikusan elkülönültek.
Példa:
# Építési szakasz: az alkalmazás fordítása
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .
# Futtatási szakasz: az alkalmazás indítása
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]