Оптимізація образів 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...