Иван Петров
Утилита make в Docker
Введение
Многие разработчики и системные администраторы ежедневно используют Docker для контейнеризации приложений. Однако часто автоматизация процесса сборки и управления контейнерами в Docker становится сложной задачей. Именно здесь в дело вступает утилита make
. Этот инструмент помогает упростить выполнение рутинных задач, таких как сборка, тестирование, деплой и другие операции, которые могут быть сложно автоматизировать с помощью одного лишь Docker. В этой статье мы рассмотрим, как использовать утилиту make
для управления проектами в Docker, а также предоставим примеры и рекомендации для её эффективного применения.
Зачем использовать make с Docker
Если вы работаете с Docker, то вероятно, вы не раз сталкивались с необходимостью выполнения сложных цепочек команд. Docker предлагает гибкость, но часто нуждается в дополнительных инструментах для автоматизации, особенно когда проект включает множество связанных контейнеров и сложный процесс сборки. Утилита make
позволяет дефинировать задачи в простом текстовом формате, который сразу понятен разработчику. Она исполняет команды только когда это необходимо, что экономит время и ресурсы.
Основные возможности утилиты 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, вы сможете сократить количество ошибок, улучшить читаемость и упрощать управление вашими проектами.
Постройте личный план изучения Docker до уровня Middle — бесплатно!
Docker — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Docker
Лучшие курсы по теме

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