Kako koristite višeslojnu (multistage) izgradnju za optimizaciju Docker slika?
sobes.tech АИ
Одговор од АИ
Многослојна изградња омогућава коришћење више фаза (layers) у Dockerfile-у, где свака фаза извршава свој задатак. Резултат једне фазе (нпр. компилирани артефакт) преноси се на следећу фазу, али међуслојеви претходних фаза се не укључују у финални образац.
Пример употребе за изградњу Go апликације:
# Фаза изградње
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o /app/myapp
# Финална фаза
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/
CMD ["/app/myapp"]
Предности:
- Смањење величине образаца: У финалном образцу се налазе само изграђена апликација и неопходне зависности, а не алати за изградњу, изворни код или међуслојеви фајлови.
- Одвојеност логике: Логика изградње/деплоја је одвојена од логике распоређивања.
- Повећана безбедност: Смањује се површина напада уклањањем непотребних алата и библиотека из финалног образаца.
- Убрзање изградње: Кеширање слојева између фаза може убрзати поновне изградње.
На пример, у датом Dockerfile-у, први слој builder се користи за изградњу Go апликације. Други слој, који почиње са FROM alpine:latest, копира само компилирану апликацију из првог слоја (COPY --from=builder /app/myapp /app/) у чисту базну слику. Укупни образац садржи само извршни фајл и основни оперативни систем, без Go компајлера и изворног кода.
Ово значајно смањује величину образаца у поређењу са традиционалним приступом, када се изградња и извршавање одвијају у једном контејнеру.