e466f14d497dd62ce6fdb4f5399cea4ccc6cb964
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
========================================================= UNIVERSAL MAKEFILE FOR DOCKER AND GIT ========================================================= Автор: Sergey Antropov Версия: 2.0 Описание: Универсальный Makefile для управления Docker-образами, их сборкой, сохранением, загрузкой, публикацией, а также интеграцией с Git. ========================================================= РАЗДЕЛ 1. ОБЩЕЕ ОПИСАНИЕ ========================================================= Makefile предназначен для автоматизации типовых задач DevOps: - сборка Docker-образов (включая Buildx) - сохранение и загрузка архивов образов (save/load) - оффлайн публикация (ретег и push) - логирование всех операций - Git-команды (commit, push, pull, sync) - быстрая проверка сборки через RUN_CMD Все сценарии универсальны, не требуют внешних зависимостей кроме установленного Docker и Git. ========================================================= РАЗДЕЛ 2. ОСНОВНЫЕ КОМАНДЫ ========================================================= Формат вызова: make <группа> <действие> [переменные] --------------------------------------------------------- ГРУППА: docker --------------------------------------------------------- make docker build Собрать Docker-образ. Примеры: make docker build IMAGE=myapp TAG=latest make docker build NO_CACHE=1 make docker build USE_BUILDX=1 PLATFORMS="linux/amd64,linux/arm64" make docker check Проверить образ, запустив RUN_CMD внутри контейнера. Пример: make docker check RUN_CMD="java -version" make docker push Собрать, проверить и отправить образ в registry. Пример: make docker push IMAGE=myapp TAG=v1.0 make docker login Авторизация в Docker Registry. Пример: make docker login REGISTRY=hub.cism-ms.ru make docker save Сохранить локальный образ в архив (tar или tar.gz). Поддерживает разбиение на части. Пример: make docker save SRC_IMAGE=myapp:latest COMPRESS=1 SPLIT_SIZE=2G make docker load Загрузить архив, ретегнуть и (опционально) запушить. Пример: make docker load ARCHIVE=images/myapp.tar LOGIN=1 PUSH_OFFLINE=1 make docker retag Перетегировать образ. Пример: make docker retag NEW_TAG=v2.0 make docker inspect Просмотреть метаданные Docker-образа. make docker clean Очистить временные каталоги logs/ и .offline/. make docker print-config Показать текущие значения всех переменных. make docker create-builder Создать buildx builder для мультиплатформенной сборки. make docker use-builder Активировать ранее созданный builder. --------------------------------------------------------- ГРУППА: git --------------------------------------------------------- make git status Показать текущее состояние репозитория. make git pull Получить последние изменения из origin. make git commit Добавить и закоммитить изменения. Если GIT_MSG не задана — запросит ввод вручную. make git push Создать коммит (если есть изменения) и отправить в origin. make git sync Выполнить pull, commit и push последовательно. ========================================================= РАЗДЕЛ 3. ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ (ПОДРОБНО) ========================================================= Любая переменная может быть переопределена при вызове make: make docker build IMAGE=myapp TAG=v1.0 NO_CACHE=1 --------------------------------------------------------- DOCKER-ПЕРЕМЕННЫЕ --------------------------------------------------------- REGISTRY Адрес Docker Registry без протокола. Пример: hub.cism-ms.ru/library IMAGE Имя Docker-образа (обязательное поле при сборке). TAG Тег образа. По умолчанию: latest. CONTEXT Папка контекста сборки. По умолчанию — текущая директория. DOCKERFILE Имя Dockerfile, используемого при сборке. USE_BUILDX 1 — использовать Docker Buildx (для мультиплатформенной сборки). 0 — обычный docker build. PLATFORMS Целевые платформы для buildx. Пример: linux/amd64,linux/arm64. PUSH 1 — выполнить docker push после buildx. 0 — не выполнять. LOAD 1 — загрузить образ в локальный docker после сборки. 0 — не загружать (актуально для CI/CD). NO_CACHE 1 — сборка без кэша. 0 — использовать кэш. PULL 1 — принудительно обновить базовые образы. 0 — использовать локальные. QUIET 1 — минимальный вывод в консоль. 0 — стандартный. BUILD_ARGS Дополнительные аргументы docker build. Пример: BUILD_ARGS="--build-arg VERSION=1.0 --build-arg DEBUG=1" ARG_FILE Путь к файлу KEY=VALUE. Все пары превращаются в --build-arg KEY=VALUE. RUN_CMD Команда для проверки контейнера после сборки. По умолчанию: lsb_release -a BUILDER Имя buildx builder'а (по умолчанию universal-builder). LOG_DIR Каталог для логов сборок (по умолчанию logs/). LOG_FILE Файл лога, формируется автоматически с датой и временем. --------------------------------------------------------- ОФФЛАЙН-ПЕРЕМЕННЫЕ (SAVE / LOAD) --------------------------------------------------------- ARCHIVE Путь к архиву образа (tar или gz). LOGIN 1 — выполнить docker login перед push. 0 — пропустить. PUSH_OFFLINE 1 — выполнить docker push после загрузки архива. 0 — только загрузить. KEEP_SRC_TAG 1 — использовать тег из архива. 0 — использовать TAG из Makefile. IMAGES_DIR Каталог для сохранения архивов Docker-образов (по умолчанию images/). OFFLINE_DIR Временная служебная папка (.offline). SRC_IMAGE Имя исходного образа для сохранения. COMPRESS 1 — сжать gzip. 0 — оставить tar. SPLIT_SIZE Размер чанка для split (например 2G). LAST_SAVE Путь к последнему сохранённому архиву. --------------------------------------------------------- GIT-ПЕРЕМЕННЫЕ --------------------------------------------------------- GIT_REMOTE Имя удалённого репозитория (по умолчанию origin). GIT_BRANCH Текущая ветка (определяется автоматически). GIT_MSG Сообщение коммита. Если не задано — будет запрошено вручную. --------------------------------------------------------- ПРОЧИЕ --------------------------------------------------------- FULL_IMAGE Полное имя образа REGISTRY/IMAGE:TAG (формируется автоматически). Цвета (COLOR_INFO, COLOR_OK, COLOR_ERR, COLOR_WARN) ANSI-коды для форматирования вывода. Можно обнулить, чтобы отключить цвет в CI. ========================================================= РАЗДЕЛ 4. ПРИМЕРЫ ========================================================= 1. Сборка без кэша: make docker build NO_CACHE=1 2. Сборка и пуш мультиплатформенного образа: make docker build USE_BUILDX=1 PUSH=1 LOAD=0 PLATFORMS="linux/amd64,linux/arm64" 3. Проверка образа: make docker check RUN_CMD="java -version" 4. Сохранение и сжатие: make docker save SRC_IMAGE=myapp:latest COMPRESS=1 5. Загрузка и пуш: make docker load ARCHIVE=images/myapp.tar LOGIN=1 PUSH_OFFLINE=1 6. Коммит и пуш в git: make git push GIT_MSG="Обновлены зависимости" 7. Быстрое обновление ветки: make git sync ========================================================= РАЗДЕЛ 5. ВОЗМОЖНЫЕ ПРОБЛЕМЫ И РЕШЕНИЯ ========================================================= --------------------------------------------------------- 1. Ошибка: "missing separator. Stop." --------------------------------------------------------- Причина: В Makefile должны быть табы, а не пробелы. Решение: Преобразовать пробелы в табы: sed -i 's/^ /\t/' Makefile --------------------------------------------------------- 2. Ошибка: "unknown instruction: yum (did you mean RUN?)" --------------------------------------------------------- Причина: В Dockerfile после инструкции `RUN <<EOF` забыта команда RUN. Решение: Убедись, что после каждой строки в Dockerfile используется RUN или символ обратной косой черты `\` при переносе строк. --------------------------------------------------------- 3. Ошибка: "No rule to make target 'commit'" --------------------------------------------------------- Причина: Старые вызовы команд без указания группы git (например, `make commit`). Решение: Используй новую структуру: make git commit или make git push --------------------------------------------------------- 4. Ошибка: "Not a git repository" --------------------------------------------------------- Причина: Текущая папка не является Git-репозиторием. Решение: Инициализируй git: git init git remote add origin <url> --------------------------------------------------------- 5. Ошибка: "docker: command not found" --------------------------------------------------------- Причина: Docker не установлен или не добавлен в PATH. Решение: Установи Docker и проверь: docker version --------------------------------------------------------- 6. Ошибка при push: "unauthorized: authentication required" --------------------------------------------------------- Причина: Не выполнен docker login в registry. Решение: Выполни: make docker login REGISTRY=hub.cism-ms.ru или авторизуйся вручную: docker login hub.cism-ms.ru --------------------------------------------------------- 7. Ошибка: "Образ не найден" --------------------------------------------------------- Причина: Указан неверный SRC_IMAGE или IMAGE не собран. Решение: Убедись, что образ существует: docker images Или собери его: make docker build --------------------------------------------------------- 8. Ошибка checksum при загрузке архива --------------------------------------------------------- Причина: Повреждён файл tar.gz. Решение: Проверить хеш-сумму: sha256sum images/*.sha256 Пересобрать архив: make docker save SRC_IMAGE=myapp:latest COMPRESS=1 --------------------------------------------------------- 9. Ошибка "Git push failed" --------------------------------------------------------- Причина: Нет прав на запись в репозиторий или неверная ветка. Решение: Проверь текущую ветку: git branch Выполни повторно push: make git push GIT_MSG="Обновление" --------------------------------------------------------- 10. Ошибка Buildx: "no builder instance" --------------------------------------------------------- Причина: Buildx не инициализирован. Решение: Создай builder: make docker create-builder Затем используй: make docker use-builder ========================================================= РАЗДЕЛ 6. СОВЕТЫ ПО ИСПОЛЬЗОВАНИЮ ========================================================= - Всегда задавай REGISTRY и IMAGE при сборке. - Для CI/CD добавь NO_CACHE=1 и QUIET=1. - Для оффлайн-деплоя используй SAVE/LOAD. - Git-команды можно вызывать без аргументов — Makefile запросит сообщение сам. - Если часто работаешь с конкретными параметрами — создай файл `.env` или `Makefile.local`. ========================================================= ЛИЦЕНЗИЯ ========================================================= MIT License Свободно для использования в любых проектах. =========================================================
Description
Этот Makefile предназначен для автоматизации сборки, проверки, публикации и архивирования Docker-образов. Подходит как для обычного Docker, так и для Buildx (мультиплатформенная сборка). Поддерживает офлайн-режим (работу без доступа к интернету) через .tar / .tar.gz архивы.
Languages
Makefile
100%