Многоэтапные сборки

Средний уровень Docker

Mike Metzger

Data Engineering Consultant

Одноэтапные сборки

  • Обычно образы Docker создаются с помощью одной команды FROM
  • Каждое дополнение к базовому образу увеличивает его размер и усложняет управление
  • Рассмотрим приложение, которое нужно скомпилировать перед использованием
    • Можно добавить все необходимые компоненты в образ, скомпилировать его и настроить итоговый образ
    • Это часто оставляет в образе лишнее содержимое, которое не используется
FROM ubuntu
RUN apt update
RUN apt install gcc -y
...
RUN make
CMD ["data_app"]
Средний уровень Docker

Многоэтапные сборки

  • Многоэтапные сборки используют несколько контейнеров
  • Как правило, включают один или несколько этапов сборки
  • Финальные компоненты копируются в итоговый образ контейнера
  • Этапы сборки затем удаляются автоматически
    • Это экономит место и уменьшает размер образа
  • В Dockerfile используется дополнительный синтаксис
    • AS <alias>
    • COPY --from=<alias>
Средний уровень Docker

Пример многоэтапной сборки

# Create initial build stage
FROM ubuntu AS stage1

# Install compiler and compile code RUN apt install gcc -y ... RUN make
# Start new stage to create final image FROM alpine-base
# Copy from first stage to final COPY --from=stage1 /data_app /data_app
# Run application on container start CMD ["data_app"]
Средний уровень Docker

Давайте потренируемся!

Средний уровень Docker

Preparing Video For Download...