feat(makefile): add docker pull/rebuild and dual tags (TAG1/TAG2); drop TAG\n\n- build/rebuild now tag with TAG1/TAG2\n- add docker pull (both tags)\n- push handles both tags\n- docs updated (README, docs/*)\n- examples migrated to TAG1/TAG2

This commit is contained in:
Сергей Антропов
2025-10-30 11:21:00 +03:00
parent d9900527f1
commit c583bdbe59
6 changed files with 166 additions and 103 deletions

View File

@@ -4,32 +4,32 @@
### Семантическое версионирование
```bash
# Основные версии
TAG=v1.0.0 # Стабильная версия
TAG=v1.1.0 # Новая функциональность
TAG=v1.1.1 # Исправления ошибок
# Основной и дополнительный тег (двойное тегирование)
TAG1=latest TAG2=v1.0.0 # Рекомендуемый минимум: стабильный alias + версия
TAG1=stable TAG2=v1.1.0 # Пример для стабильной ветки
TAG1=dev # Разработка без второго тега
# Предварительные версии
TAG=v1.2.0-alpha.1
TAG=v1.2.0-beta.1
TAG=v1.2.0-rc.1
# Предрелизные версии
TAG1=rc TAG2=v1.2.0-rc.1
TAG1=beta TAG2=v1.2.0-beta.1
TAG1=alpha TAG2=v1.2.0-alpha.1
# Специальные теги
TAG=latest # Последняя стабильная
TAG=dev # Разработка
TAG=stable # Стабильная ветка
# Специальные алиасы
TAG1=latest
TAG1=stable
TAG1=dev
```
### Автоматическое версионирование
```bash
# Использование Git commit hash
TAG=$(git rev-parse --short HEAD)
TAG1=$(git rev-parse --short HEAD)
# Использование даты
TAG=$(date +%Y%m%d-%H%M%S)
TAG1=$(date +%Y%m%d-%H%M%S)
# Использование Git тегов
TAG=$(git describe --tags --always)
TAG1=$(git describe --tags --always)
```
## 2. Безопасность
@@ -92,7 +92,7 @@ coverage
# Создание логов с метаданными
make docker build \
IMAGE=myapp \
TAG=v1.0.0 \
TAG1=v1.0.0 \
BUILD_ARGS="--build-arg BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
LOG_DIR=./build-logs
```
@@ -116,21 +116,21 @@ docker run --rm -it \
### Кэширование слоев Docker
```bash
# Сборка с использованием кэша
make docker build IMAGE=myapp TAG=v1.0.0
make docker build IMAGE=myapp TAG1=v1.0.0
# Сборка без кэша (для чистых сборок)
make docker build IMAGE=myapp TAG=v1.0.0 NO_CACHE=1
make docker rebuild IMAGE=myapp TAG1=v1.0.0
# Принудительное обновление базовых образов
make docker build IMAGE=myapp TAG=v1.0.0 PULL=1
make docker build IMAGE=myapp TAG1=v1.0.0 PULL=1
```
### Параллельная сборка
```bash
# Сборка нескольких образов параллельно
make docker build IMAGE=frontend TAG=v1.0.0 &
make docker build IMAGE=backend TAG=v1.0.0 &
make docker build IMAGE=worker TAG=v1.0.0 &
make docker build IMAGE=frontend TAG1=v1.0.0 &
make docker build IMAGE=backend TAG1=v1.0.0 &
make docker build IMAGE=worker TAG1=v1.0.0 &
wait
# Проверка результатов
@@ -142,7 +142,7 @@ docker images | grep -E "(frontend|backend|worker)"
# Сборка с минимальным размером
make docker build \
IMAGE=myapp \
TAG=minimal \
TAG1=minimal \
BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1"
# Сжатие образов
@@ -158,13 +158,13 @@ make docker save \
# Сборка базового образа
make docker build \
IMAGE=base-image \
TAG=ubuntu-22.04 \
TAG1=ubuntu-22.04 \
DOCKERFILE=Dockerfile.base
# Использование базового образа
make docker build \
IMAGE=myapp \
TAG=v1.0.0 \
TAG1=v1.0.0 \
BUILD_ARGS="--build-arg BASE_IMAGE=base-image:ubuntu-22.04"
```
@@ -173,7 +173,7 @@ make docker build \
# Обновление базовых образов
make docker build \
IMAGE=myapp \
TAG=v1.0.0 \
TAG1=v1.0.0 \
PULL=1
# Проверка обновлений
@@ -211,10 +211,10 @@ docker run -it --rm \
### Измерение времени сборки
```bash
# Время сборки
time make docker build IMAGE=myapp TAG=v1.0.0
time make docker build IMAGE=myapp TAG1=v1.0.0
# Детальная статистика
make docker build IMAGE=myapp TAG=v1.0.0 2>&1 | tee build.log
make docker build IMAGE=myapp TAG1=v1.0.0 2>&1 | tee build.log
```
### Мониторинг ресурсов
@@ -253,7 +253,7 @@ project/
cat > Makefile.local << EOF
REGISTRY=my-registry.com
IMAGE=my-project
TAG=dev
TAG1=dev
NO_CACHE=0
QUIET=0
EOF