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:
@@ -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
|
||||
|
||||
@@ -4,26 +4,26 @@
|
||||
|
||||
### Простая сборка
|
||||
```bash
|
||||
# Сборка с минимальными параметрами
|
||||
make docker build IMAGE=myapp TAG=latest
|
||||
# Сборка с двойными тегами
|
||||
make docker build IMAGE=myapp TAG1=latest TAG2=v1.0.0
|
||||
|
||||
# Сборка с кастомным registry
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=latest TAG2=v1.0.0 \
|
||||
REGISTRY=hub.cism-ms.ru/library
|
||||
|
||||
# Сборка с проверкой
|
||||
make docker build IMAGE=myapp TAG=v1.0.0
|
||||
make docker build IMAGE=myapp TAG1=latest TAG2=v1.0.0
|
||||
make docker check RUN_CMD="lsb_release -a"
|
||||
```
|
||||
|
||||
### Полный цикл сборки и публикации
|
||||
```bash
|
||||
# 1. Сборка образа
|
||||
# 1. Сборка образа (двойные теги)
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=latest TAG2=v1.0.0 \
|
||||
REGISTRY=hub.cism-ms.ru/library
|
||||
|
||||
# 2. Проверка работоспособности
|
||||
@@ -33,7 +33,7 @@ make docker check \
|
||||
# 3. Публикация в registry
|
||||
make docker push \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=latest TAG2=v1.0.0 \
|
||||
REGISTRY=hub.cism-ms.ru/library
|
||||
```
|
||||
|
||||
@@ -56,7 +56,7 @@ docker buildx inspect --bootstrap
|
||||
# Сборка для AMD64 и ARM64
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=latest TAG2=v1.0.0 \
|
||||
USE_BUILDX=1 \
|
||||
PLATFORMS="linux/amd64,linux/arm64" \
|
||||
PUSH=1 \
|
||||
@@ -65,7 +65,7 @@ make docker build \
|
||||
# Сборка для всех популярных платформ
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=latest TAG2=v1.0.0 \
|
||||
USE_BUILDX=1 \
|
||||
PLATFORMS="linux/amd64,linux/arm64,linux/arm/v7" \
|
||||
PUSH=1
|
||||
@@ -106,7 +106,7 @@ make docker load \
|
||||
ARCHIVE=images/myapp_v1.0.0.tar.gz \
|
||||
REGISTRY=hub.cism-ms.ru/library \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
LOGIN=1 \
|
||||
PUSH_OFFLINE=1
|
||||
|
||||
@@ -125,13 +125,13 @@ make docker load \
|
||||
# Передача переменных окружения
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
BUILD_ARGS="--build-arg VERSION=1.0.0 --build-arg NODE_ENV=production"
|
||||
|
||||
# Передача пользовательских данных
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
BUILD_ARGS="--build-arg USER_ID=1000 --build-arg GROUP_ID=1000"
|
||||
```
|
||||
|
||||
@@ -279,13 +279,13 @@ make docker check RUN_CMD="env | grep -E 'VERSION|NODE_ENV'"
|
||||
# Сборка с Dockerfile.prod
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=production \
|
||||
TAG1=production \
|
||||
DOCKERFILE=Dockerfile.prod
|
||||
|
||||
# Сборка с контекстом в подпапке
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
CONTEXT=./app
|
||||
```
|
||||
|
||||
@@ -294,31 +294,37 @@ make docker build \
|
||||
# Сборка для локального registry
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
REGISTRY=localhost:5000
|
||||
|
||||
# Сборка для Docker Hub
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
REGISTRY=myusername
|
||||
|
||||
# Сборка для GitLab Registry
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
REGISTRY=registry.gitlab.com/myproject
|
||||
```
|
||||
|
||||
### Управление тегами
|
||||
```bash
|
||||
# Перетегирование образа
|
||||
# Перетегирование образа (локально)
|
||||
make docker retag NEW_TAG=v2.0.0
|
||||
|
||||
# Создание нескольких тегов
|
||||
make docker retag NEW_TAG=latest
|
||||
make docker retag NEW_TAG=stable
|
||||
make docker retag NEW_TAG=2024.01.15
|
||||
|
||||
# Пулл обоих тегов
|
||||
make docker pull IMAGE=myapp TAG1=latest TAG2=v2.0.0 REGISTRY=hub.cism-ms.ru/library
|
||||
|
||||
# Пересборка без кэша с двумя тегами
|
||||
make docker rebuild IMAGE=myapp TAG1=latest TAG2=v2.0.0
|
||||
```
|
||||
|
||||
## 9. Очистка и обслуживание
|
||||
|
||||
12
docs/faq.md
12
docs/faq.md
@@ -6,10 +6,10 @@
|
||||
**A:** Установите WSL2 или используйте Git Bash:
|
||||
```bash
|
||||
# В Git Bash
|
||||
make docker build IMAGE=myapp TAG=latest
|
||||
make docker build IMAGE=myapp TAG1=latest TAG2=v1.0.0
|
||||
|
||||
# Или через WSL2
|
||||
wsl make docker build IMAGE=myapp TAG=latest
|
||||
wsl make docker build IMAGE=myapp TAG1=latest TAG2=v1.0.0
|
||||
```
|
||||
|
||||
### Q: Можно ли использовать с Docker Compose?
|
||||
@@ -30,14 +30,14 @@ services:
|
||||
```bash
|
||||
# .git/hooks/post-commit
|
||||
#!/bin/bash
|
||||
make docker build IMAGE=myapp TAG=$(git rev-parse --short HEAD)
|
||||
make docker build IMAGE=myapp TAG1=$(git rev-parse --short HEAD)
|
||||
```
|
||||
|
||||
### Q: Можно ли использовать с Kubernetes?
|
||||
**A:** Да, после сборки образа:
|
||||
```bash
|
||||
# Сборка образа
|
||||
make docker build IMAGE=myapp TAG=v1.0.0
|
||||
make docker build IMAGE=myapp TAG1=v1.0.0
|
||||
|
||||
# Применение в Kubernetes
|
||||
kubectl apply -f k8s/
|
||||
@@ -47,7 +47,7 @@ kubectl apply -f k8s/
|
||||
**A:** Используйте кэширование и .dockerignore:
|
||||
```bash
|
||||
# Сборка с кэшем
|
||||
make docker build IMAGE=myapp TAG=v1.0.0
|
||||
make docker build IMAGE=myapp TAG1=v1.0.0
|
||||
|
||||
# Создание .dockerignore
|
||||
echo "node_modules" >> .dockerignore
|
||||
@@ -86,7 +86,7 @@ make docker push IMAGE=myapp TAG=v1.0.0 REGISTRY=your-private-registry.com
|
||||
# Сборка для ARM64
|
||||
make docker build \
|
||||
IMAGE=myapp \
|
||||
TAG=v1.0.0 \
|
||||
TAG1=v1.0.0 \
|
||||
USE_BUILDX=1 \
|
||||
PLATFORMS=linux/arm64
|
||||
```
|
||||
|
||||
@@ -6,9 +6,11 @@
|
||||
|
||||
| Команда | Описание | Пример |
|
||||
|---------|----------|--------|
|
||||
| `make docker build` | Собрать Docker-образ | `make docker build IMAGE=myapp TAG=v1.0` |
|
||||
| `make docker build` | Собрать Docker-образ (двойные теги) | `make docker build IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||||
| `make docker check` | Проверить образ | `make docker check RUN_CMD="java -version"` |
|
||||
| `make docker push` | Собрать + проверить + отправить | `make docker push IMAGE=myapp TAG=v1.0` |
|
||||
| `make docker push` | Собрать + проверить + отправить (оба тега) | `make docker push IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||||
| `make docker rebuild` | Пересобрать без кэша (оба тега) | `make docker rebuild IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||||
| `make docker pull` | Скачать/обновить образы по тегам | `make docker pull IMAGE=myapp TAG1=latest TAG2=v1.0` |
|
||||
| `make docker save` | Сохранить образ в архив | `make docker save SRC_IMAGE=myapp:latest` |
|
||||
| `make docker load` | Загрузить из архива | `make docker load ARCHIVE=images/myapp.tar` |
|
||||
| `make docker login` | Авторизация в registry | `make docker login REGISTRY=hub.cism-ms.ru` |
|
||||
@@ -50,15 +52,14 @@ IMAGE=web-frontend
|
||||
IMAGE=api-backend
|
||||
```
|
||||
|
||||
#### TAG
|
||||
**Описание:** Тег образа
|
||||
**По умолчанию:** `latest`
|
||||
#### TAG1 / TAG2
|
||||
**Описание:** Основной и дополнительный тег образа (двойное тегирование)
|
||||
**По умолчанию:** `TAG1=latest`, `TAG2=v.0.0.1`
|
||||
**Примеры:**
|
||||
```bash
|
||||
TAG=latest
|
||||
TAG=v1.0.0
|
||||
TAG=dev
|
||||
TAG=2024.01.15
|
||||
TAG1=latest TAG2=v1.0.0
|
||||
TAG1=stable TAG2=v1.0.1
|
||||
TAG1=dev # без второго тега
|
||||
```
|
||||
|
||||
#### CONTEXT
|
||||
@@ -344,13 +345,16 @@ GIT_MSG="Обновлены зависимости"
|
||||
|
||||
### Служебные переменные
|
||||
|
||||
#### FULL_IMAGE
|
||||
**Описание:** Полное имя образа REGISTRY/IMAGE:TAG
|
||||
**Формируется автоматически:** `$(REGISTRY)/$(IMAGE):$(TAG)`
|
||||
#### FULL_IMAGE / FULL_IMAGE_1 / FULL_IMAGE_2
|
||||
**Описание:** Полные имена образов
|
||||
**Формируется автоматически:**
|
||||
- `FULL_IMAGE` = `$(REGISTRY)/$(IMAGE):$(TAG1)`
|
||||
- `FULL_IMAGE_1` = `$(REGISTRY)/$(IMAGE):$(TAG1)`
|
||||
- `FULL_IMAGE_2` = `$(REGISTRY)/$(IMAGE):$(TAG2)`
|
||||
**Примеры:**
|
||||
```bash
|
||||
FULL_IMAGE=hub.cism-ms.ru/library/myapp:latest
|
||||
FULL_IMAGE=registry.local/myapp:v1.0.0
|
||||
FULL_IMAGE_1=hub.cism-ms.ru/library/myapp:latest
|
||||
FULL_IMAGE_2=hub.cism-ms.ru/library/myapp:v1.0.0
|
||||
```
|
||||
|
||||
#### Цвета вывода
|
||||
|
||||
Reference in New Issue
Block a user