Оптимизация образов Docker

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

Mike Metzger

Data Engineering Consultant

Что такое образ Docker

  • Образы Docker — основа любого контейнера
  • Содержат всё, что изначально доступно экземпляру контейнера
Средний уровень Docker

Проблемы образов Docker

  • Соблазнительно добавить в образ всё, что может понадобиться
  • Размер образа быстро становится чрезмерным
  • Сложно обеспечить безопасность и обновления из-за проблем с зависимостями
  • Труднее комбинировать контейнеры без лишних затрат места и трафика
Средний уровень Docker

Рекомендации по образам Docker

  • Разбивайте контейнеры до минимально необходимого уровня
  • Проще комбинировать небольшие контейнеры, чем строить один большой образ
  • Как
    • сборка из готовых компонентов
    • против сборки с нуля каждый раз
  • Обновления ПО затрагивают только контейнеры, использующие этот образ
  • Можно оптимизировать по размеру, упрощая использование и распространение
Средний уровень Docker

Пример с единым образом Docker

  • Рассмотрим проект по инженерии данных со следующим ПО:

    • база данных Postgresql
    • Python-компоненты для ETL
    • программное обеспечение веб-сервера
  • Можно использовать один образ, но тогда при каждом обновлении ETL или веб-сервера потребуется обновлять весь образ.

  • Что произойдёт, если понадобится добавить ещё один веб-сервер?
FROM ubuntu
RUN apt update
RUN apt install -y postgresql
RUN apt install -y nginx
RUN apt install -y python3.9
...
Средний уровень Docker

Пример с минимизированными контейнерами

  • С Docker есть лучший подход
  • Выделите каждый компонент в отдельный контейнер
    • контейнер с базой данных Postgresql
    • компоненты Python для ETL
    • веб-сервер
  • Можно настроить оптимальную конфигурацию и добавлять или удалять компоненты по мере необходимости
bash> docker run -d postgresql:latest

bash> docker run -d nginx:latest ...
Средний уровень Docker

Определение размера образа

  • Команда docker images
  • Показывает информацию об отдельных образах, включая размер
  • Дополнительные параметры рассматриваются позже

bash> docker images

REPOSITORY      TAG              SIZE
postgres        latest           448MB
postgres        15               442MB
apache/airflow  2.7.1-python3.9  1.4GB
alpine          latest           7.73MB
Средний уровень Docker

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

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

Preparing Video For Download...