Sobes.tech
Middle

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 компајлера и изворног кода.

Ово значајно смањује величину образаца у поређењу са традиционалним приступом, када се изградња и извршавање одвијају у једном контејнеру.