Multi-stage build dùng nhiều FROM trong một Dockerfile: stage đầu để build (có compiler, dev dependency), stage cuối chỉ COPY --from phần artifact cần thiết sang một base image gọn.
- Kết quả: image cuối không chứa toolchain, source hay dev dependency → nhỏ hơn và bề mặt tấn công ít hơn.
- Ví dụ Go: stage 1
go buildra binary; stage 2FROM alpinechỉ chép binary. Với Node/Java tương tự (build ở stage 1, copydist/jarsang stage runtime).
Đây là cách chuẩn để có image production gọn mà vẫn giữ bước build đầy đủ.
dockerfile
FROM golang:1.22 AS builder
WORKDIR /src
COPY . .
RUN go build -o /app
FROM alpine:3.20
COPY --from=builder /app /app
ENTRYPOINT ["/app"]