Найти в Дзене
Ты в АйТи

Экономим ресурсы. Как найти докер образы минимального размера для своих нужд.

Контейнеры Docker основаны на разных дистрибутивах Linux. Дистрибутивы же эти кроме нужного нам ПО содержат много других программ для других задач, а потому образы иногда получаются неоправданно большими. Чтобы найти маленькие образы надо искать образы основанные на Alpine Linux они часто содержат в своем названии -alpine. Этот дистрибутив содержит минимально количество предустановленных в него программ, а его изначальный размер равен 4 Мб. Большинство официальных Docker образов содержат версию основанную на этом дистрибутиве. Если мы собираем образ сами, то мы тоже можем использовать в качестве базового образа образа alpine linux. Еще есть варианты с использованием slim образов из которых также удалено ненужное ПО. Существуют даже -alpine-slim они еще меньше, но их надо тщательнее тестировать на надежность работы. Вот сколько места занимают образы моего стека: Кроме этого раз уж мы изменили архитектуру работы нашего контейнера с phpMyAdmin и раз все у нас теперь обрабатывает Nginx, т

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

Чтобы найти маленькие образы надо искать образы основанные на Alpine Linux они часто содержат в своем названии -alpine. Этот дистрибутив содержит минимально количество предустановленных в него программ, а его изначальный размер равен 4 Мб. Большинство официальных Docker образов содержат версию основанную на этом дистрибутиве.

Если мы собираем образ сами, то мы тоже можем использовать в качестве базового образа образа alpine linux.

Еще есть варианты с использованием slim образов из которых также удалено ненужное ПО. Существуют даже -alpine-slim они еще меньше, но их надо тщательнее тестировать на надежность работы.

Вот сколько места занимают образы моего стека:

  • Образ СУБД mariadb уже основан на Alpine. Его уменьшить нам не удастся
  • Образ Nginx мы скачаем в версии 1.23.3-alpine-slim
  • Образ phpMyAdmin мы возьмем phpmyadmin:5.2.1-fpm-alpine Предыдущий образ (без -fpm) обслуживал собственный веб сервер Apache, образ -fpm будет обслуживаться нашим сервером Nginx и у нас высвободится больше ресурсов, кроме этого образ также основан на -alpine, поэтому он будет меньше по размеру.
  • Образ php мы собираем в Dockerfile. Соберем минимальный образ на основе php:7.4.33-fpm-alpine3.16
-2
Секция конфигурирования phpMyAdmin
Секция конфигурирования phpMyAdmin

Кроме этого раз уж мы изменили архитектуру работы нашего контейнера с phpMyAdmin и раз все у нас теперь обрабатывает Nginx, то надо создать новый конфигурационный файл для nginx. Давайте создадим новый файл phpmyadmin.conf в .docker/nginx/conf.d, рядом с php.conf:

configuration file for nginx server for phpMyAdmin
-4

Опять же, довольно стандартная конфигурация сервера, которая очень похожа на php.conf, за исключением того, что она указывает на порт 9000 службы phpMyAdmin.

Слушаем мы порт 8080, как видно из файла конфигурации.

Вернемся к docker-compose.yml: аналогично нашему PHP-приложению, том phpmyadmindata обеспечивает доступность файлов phpMyAdmin для Nginx, с той лишь разницей, что вместо монтирования локальной папки по нашему выбору (например, src), мы позволили Docker Compose выбрать локальную папку для монтирования контейнеров Nginx и phpMyAdmin, эффективно делая содержимое последнего доступным для первого. Кроме этого мы добавили проброс порта 8080 на порт контейнера нашего веб сервера nginx.

Итак, после проделанных изменений запускаем команду

docker compose down -v --rmi all --remove-orphans

Эта команда остановит и/или уничтожит контейнеры, а также удалит тома и образы, что позволит нам начать всё заново.

А теперь запустим ставшую уже привычной команду docker compose up -d, а затем docker compose images и посмотрим на сколько уменьшились наши образы:

-5

Как видим размеры образов стали гораздо меньше. Система запущена и как работала так и работает. Всё это работает на RaspberryPI и мы избавились от тяжеловесного Apache для работы phpMyAdmin, субъективно без всяких тестов, страничка phpMyAdmin по адресу 192.168.0.101:8080 (такой адрес у меня у вас другой) стала загружаться быстрее. :)

В заключение стоит сказать что минимальные образы не всегда удобны, не всегда нужное ПО доступно в официальных репозиториях и иногда приходится добавлять эти репозитории... Это может быть сложновато, потому стоит подумать подойдет ли вам лёгкий образ.