Найти в Дзене
2021 подписчик

🖥 5 советов, как ускорить сборку образа Docker


⏩Совет 1. Можно ли избежать создания образов?

Использование Docker не обязательно должно быть принципом «все или ничего». Вы можете использовать Docker для развертывания и создания образов для продакшн, но вам не обязательно использовать его в разработке.

⏩Совет 2. Структурируйте инструкции Dockerfile как перевернутую пирамиду.

Каждая инструкция в вашем Dockerfile приводит к созданию слоя изображения. Docker использует слои для повторного использования работы. Слои кэшируются и их не нужно пересобирать, если:
— Все предыдущие слои не изменяются.
— В случае инструкции COPY: файлы/папки не изменяются.
— В случае всех остальных инструкций: текст команды не изменяется.

⏩Совет 3. Копируйте только те файлы, которые необходимы для следующего шага.

Представьте, что у нас есть следующий фрагмент Dockerfile:

RUN mkdir /code
COPY code code/
RUN pip install code/requirements.txt
Каждый раз, когда что-либо в каталоге кода меняется, вторую строку необходимо запускать заново, а также каждую последующую строку.

Вот как мы могли бы избежать повторного запуска этапа установки при каждом изменении кода:

RUN mkdir /code
COPY code/requirements.txt code/
RUN pip install code/requirements.txt
COPY code /code

⏩Совет 4. Скачивайте меньше файлов.

Во-первых, проверьте, не загружаете ли вы зависимости разработки, которые вообще не нужны вашему образу.

Ещё нужно помнить про поведение менеджера пакетов на уровне ОС. Например, `apt`который используется в Ubuntu и Debian, по умолчанию устанавливает «рекомендуемые» пакеты.
Вы можете избежать этого, добавив к apt-get install флаг --no-install-recommends

⏩Совет 5. Используйте BuildKit с новой функцией монтирования кэша.

BuildKit — это новый механизм сборки образов, который можно использовать вместо стандартного Docker. С ним вы получаете больше параллелизма и эффективности кэширования, плюс новые интересные функции

🖥 5 советов, как ускорить сборку образа Docker  ⏩Совет 1. Можно ли избежать создания образов?  Использование Docker не обязательно должно быть принципом «все или ничего».
1 минута