Вторая версия
This commit is contained in:
403
readme.txt
Normal file
403
readme.txt
Normal file
@@ -0,0 +1,403 @@
|
||||
=========================================================
|
||||
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
|
||||
Свободно для использования в любых проектах.
|
||||
|
||||
=========================================================
|
||||
Reference in New Issue
Block a user