Иван Петров
Утилита make в Docker
Введение
Многие разработчики и системные администраторы ежедневно используют Docker для контейнеризации приложений. Однако часто автоматизация процесса сборки и управления контейнерами в Docker становится сложной задачей. Именно здесь в дело вступает утилита make. Этот инструмент помогает упростить выполнение рутинных задач, таких как сборка, тестирование, деплой и другие операции, которые могут быть сложно автоматизировать с помощью одного лишь Docker. В этой статье мы рассмотрим, как использовать утилиту make для управления проектами в Docker, а также предоставим примеры и рекомендации для её эффективного применения.
Зачем использовать make с Docker
Если вы работаете с Docker, то вероятно, вы не раз сталкивались с необходимостью выполнения сложных цепочек команд. Docker предлагает гибкость, но часто нуждается в дополнительных инструментах для автоматизации, особенно когда проект включает множество связанных контейнеров и сложный процесс сборки. Утилита make позволяет дефинировать задачи в простом текстовом формате, который сразу понятен разработчику. Она исполняет команды только когда это необходимо, что экономит время и ресурсы.
Использование утилиты make в Docker позволяет автоматизировать задачи и управлять проектами на реальных примерах. Это упрощает процесс сборки и развертывания приложений. Если вы хотите детальнее погрузиться в вопросы автоматизации задач с помощью make в Docker, а также узнать, как использовать эту утилиту для управления проектами, приходите на наш большой курс Docker + Ansible - с нуля. На курсе 159 уроков и 7 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Основные возможности утилиты make
Утилита make обычно используется для компиляции программ, но она также подходит для любой задачи, связанной с зависимостями. Вот основные возможности, которые вы получите, используя make с Docker:
- Автоматизация команд: Вы можете записать сложные команды в
Makefileи запускать их одной командой. - Управление зависимостями:
makeследит за изменениями и выполняет только необходимые задачи. - Удобочитаемость:
Makefile— это простой текстовый файл, который легко читать и модифицировать. - Упрощение рабочего процесса: Использование
makeпозволяет сократить количество ошибок и ускорить разработку.
Создание базового Makefile
Для начала вам потребуется создать файл с именем Makefile в корне вашего проекта. Это файл, который будет содержать инструкции для make. Давайте посмотрим на базовый пример:
# Переменные для хранения параметров команд
DOCKER_IMAGE=myapp
DOCKER_TAG=latest
# Задача для сборки Docker-образа
build:
docker build -t $(DOCKER_IMAGE):$(DOCKER_TAG) .
# Задача для запуска контейнера
run:
docker run --rm -p 8080:80 $(DOCKER_IMAGE):$(DOCKER_TAG)
# Задача для остановки контейнера
stop:
docker stop $(DOCKER_IMAGE)
# Очистка
clean:
docker system prune -f
Теперь давайте разберем этот Makefile.
Переменные
Сначала мы объявляем переменные DOCKER_IMAGE и DOCKER_TAG. Это делается для того, чтобы упростить изменения, если вам потребуется изменить имя образа или тега. Использование переменных помогает избежать ошибок и делает Makefile более гибким.
Задачи (или цели)
- build: Эта задача отвечает за сборку Docker-образа. Она выполняет команду
docker build, используя переменные для имени и тега образа. - run: Запускает контейнер. Флаг
--rmиспользуется для удаления контейнера после завершения его работы. - stop: Останавливает контейнер. Здесь мы просто используем имя образа для команды
stop. - clean: Выполняет очистку неиспользуемых объектов в Docker, помогая освободить место.
Как make работает с Docker
Под капотом make используется файл Makefile, чтобы определить, когда и какие команды должны быть выполнены. Он помогает управлять зависимостями и выполнять только те задачи, которые действительно нуждаются в запуске. Например, если в файле Dockerfile были изменения, то make запустит задачу для обновления Docker-образа.
Императивный и декларативный подход
С помощью make вы можете определить зависимости и правила, позволяющие избежать ненужного выполнения команд. Это позволяет среде Docker работать более эффективно, избегая повторной сборки образов или повторного запуска контейнеров без необходимости.
Пример с зависимостями
Добавим небольшую зависимость для примера:
# Переменные для хранения параметров команд
DOCKER_IMAGE=myapp
DOCKER_TAG=latest
# build зависит от Dockerfile
build: Dockerfile
docker build -t $(DOCKER_IMAGE):$(DOCKER_TAG) .
Dockerfile:
@echo "Dockerfile has been modified."
run:
docker run --rm -p 8080:80 $(DOCKER_IMAGE):$(DOCKER_TAG)
Здесь мы настроили задачу build так, чтобы она выполнялась только в случае изменения Dockerfile. Это минимальный пример, но на деле зависимостей может быть много больше, и они могут быть более сложными.
Заключение
Утилита make значительно упрощает управление и автоматизацию задач в Docker. Она позволяет вам устанавливать и управлять зависимостями, автоматизировать команды и упрощать рабочие процессы для команд, использующих Docker. Хотя make изначально разработан для управления процессом компиляции кода, его универсальность позволяет успешно применять его для работы с контейнерами. Используя make вместе с Docker, вы сможете сократить количество ошибок, улучшить читаемость и упрощать управление вашими проектами.
Использование make — это один из способов автоматизации сборки и развертывания в Docker. Для более продвинутой автоматизации необходимо освоить Ansible и другие инструменты управления конфигурацией. На нашем курсе Docker + Ansible - с нуля вы научитесь всему необходимому для работы с Docker и автоматизации рутинных задач развертывания. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Docker прямо сегодня и станьте экспертом.
Постройте личный план изучения Docker до уровня Middle — бесплатно!
Docker — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Docker
Лучшие курсы по теме

Docker и Ansible
Антон Ларичев
Основы Linux
Антон Ларичев