Middle
193
questionbank
Что такое мультистадийные сборки в Docker и как они работают?
Answer from AI
sobes.tech AI
Мультистадийные сборки позволяют использовать несколько временных образов в процессе сборки Docker для получения конечного, оптимизированного образа.
Как это работает:
- Разделение этапов: Процесс сборки делится на несколько стадий (
FROM), каждая из которых наследуется от своего базового образа. - Копирование артефактов: Файлы и артефакты, созданные на предыдущих стадиях, копируются на последующие с помощью команды
COPY --from=<имя_стадии или номер>. - Итоговый образ: Конечный образ создается на основе последней стадии. При этом в него попадают только те файлы, которые были скопированы явным образом с предыдущих стадий. Промежуточные слои и инструменты, использованные на ранних стадиях для компиляции или тестирования, не включаются в конечный образ.
Преимущества:
- Уменьшение размера образа: В конечный образ попадают только необходимые для запуска приложения файлы.
- Улучшение безопасности: В конечный образ не включаются инструменты сборки, компиляторы и другие потенциально уязвимые компоненты.
- Ускорение сборки: Промежуточные стадии могут кэшироваться.
- Чистота Dockerfile: Различные этапы сборки (компиляция, тестирование, упаковка) логически разделены.
Пример:
# Стадия build: Компиляция приложения
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .
# Стадия run: Запуск приложения
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]