# 📖 Примеры использования

## 1. Базовая сборка и публикация

### Простая сборка
```bash
# Сборка с минимальными параметрами
make docker build IMAGE=myapp TAG=latest

# Сборка с кастомным registry
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  REGISTRY=hub.cism-ms.ru/library

# Сборка с проверкой
make docker build IMAGE=myapp TAG=v1.0.0
make docker check RUN_CMD="lsb_release -a"
```

### Полный цикл сборки и публикации
```bash
# 1. Сборка образа
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  REGISTRY=hub.cism-ms.ru/library

# 2. Проверка работоспособности
make docker check \
  RUN_CMD="curl -f http://localhost:8080/health"

# 3. Публикация в registry
make docker push \
  IMAGE=myapp \
  TAG=v1.0.0 \
  REGISTRY=hub.cism-ms.ru/library
```

## 2. Мультиплатформенная сборка

### Настройка buildx
```bash
# Создание buildx builder
make docker create-builder

# Проверка builder'а
make docker use-builder

# Просмотр доступных платформ
docker buildx inspect --bootstrap
```

### Сборка для нескольких платформ
```bash
# Сборка для AMD64 и ARM64
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  USE_BUILDX=1 \
  PLATFORMS="linux/amd64,linux/arm64" \
  PUSH=1 \
  LOAD=0

# Сборка для всех популярных платформ
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  USE_BUILDX=1 \
  PLATFORMS="linux/amd64,linux/arm64,linux/arm/v7" \
  PUSH=1
```

## 3. Оффлайн деплой

### Сохранение образов
```bash
# Простое сохранение
make docker save SRC_IMAGE=myapp:latest

# Сохранение с сжатием
make docker save \
  SRC_IMAGE=myapp:v1.0.0 \
  COMPRESS=1

# Сохранение с разбиением на части
make docker save \
  SRC_IMAGE=myapp:v1.0.0 \
  COMPRESS=1 \
  SPLIT_SIZE=2G

# Сохранение в кастомную директорию
make docker save \
  SRC_IMAGE=myapp:v1.0.0 \
  IMAGES_DIR=/backup/containers \
  COMPRESS=1
```

### Загрузка и публикация
```bash
# Простая загрузка
make docker load ARCHIVE=images/myapp_v1.0.0.tar.gz

# Загрузка с авторизацией и публикацией
make docker load \
  ARCHIVE=images/myapp_v1.0.0.tar.gz \
  REGISTRY=hub.cism-ms.ru/library \
  IMAGE=myapp \
  TAG=v1.0.0 \
  LOGIN=1 \
  PUSH_OFFLINE=1

# Загрузка с сохранением исходного тега
make docker load \
  ARCHIVE=images/myapp_v1.0.0.tar.gz \
  KEEP_SRC_TAG=1 \
  LOGIN=1 \
  PUSH_OFFLINE=1
```

## 4. Работа с аргументами сборки

### Использование BUILD_ARGS
```bash
# Передача переменных окружения
make docker build \
  IMAGE=myapp \
  TAG=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 \
  BUILD_ARGS="--build-arg USER_ID=1000 --build-arg GROUP_ID=1000"
```

### Использование ARG_FILE
```bash
# Создание файла с аргументами
cat > build.args << EOF
VERSION=1.0.0
BUILD_DATE=2024-01-15
GIT_COMMIT=abc123def
NODE_ENV=production
USER_ID=1000
GROUP_ID=1000
EOF

# Сборка с файлом аргументов
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  ARG_FILE=build.args
```

## 5. Работа с Git

### Базовые операции
```bash
# Просмотр статуса
make git status

# Получение изменений
make git pull

# Коммит с сообщением
make git commit GIT_MSG="Добавлена поддержка Docker"

# Коммит и push
make git push GIT_MSG="Обновлена документация"
```

### Продвинутые сценарии
```bash
# Синхронизация с удаленным репозиторием
make git sync

# Работа с разными удаленными репозиториями
make git pull GIT_REMOTE=upstream
make git push GIT_REMOTE=origin GIT_MSG="Синхронизация с upstream"
```

## 6. Работа с разными операционными системами

### Linux (Ubuntu/Debian)
```bash
# Установка Docker
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER

# Установка Make
sudo apt-get install -y make

# Перезагрузка для применения изменений группы
sudo reboot
```

### Linux (CentOS/RHEL/Fedora)
```bash
# Установка Docker
sudo yum install -y docker
# или для Fedora
sudo dnf install -y docker

sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER

# Установка Make
sudo yum install -y make
# или для Fedora
sudo dnf install -y make
```

### macOS
```bash
# Установка через Homebrew
brew install docker
brew install make

# Или установка Docker Desktop
# Скачайте с https://www.docker.com/products/docker-desktop

# Проверка установки
docker --version
make --version
```

### Windows
```bash
# Через WSL2 (рекомендуется)
wsl --install
# Затем в WSL2:
sudo apt-get update
sudo apt-get install -y docker.io make

# Или через Git Bash
# Установите Docker Desktop и Git for Windows
# Make поставляется с Git for Windows
```

## 7. Отладка и мониторинг

### Просмотр конфигурации
```bash
# Показать все переменные
make docker print-config

# Показать информацию об образе
make docker inspect

# Просмотр логов сборки
tail -f logs/build_20240115_143022.log
```

### Проверка образов
```bash
# Проверка версии Java
make docker check RUN_CMD="java -version"

# Проверка версии Node.js
make docker check RUN_CMD="node --version"

# Проверка доступности сервиса
make docker check RUN_CMD="curl -f http://localhost:8080/health"

# Проверка переменных окружения
make docker check RUN_CMD="env | grep -E 'VERSION|NODE_ENV'"
```

## 8. Продвинутые сценарии

### Сборка с кастомным Dockerfile
```bash
# Сборка с Dockerfile.prod
make docker build \
  IMAGE=myapp \
  TAG=production \
  DOCKERFILE=Dockerfile.prod

# Сборка с контекстом в подпапке
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  CONTEXT=./app
```

### Работа с разными registry
```bash
# Сборка для локального registry
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  REGISTRY=localhost:5000

# Сборка для Docker Hub
make docker build \
  IMAGE=myapp \
  TAG=v1.0.0 \
  REGISTRY=myusername

# Сборка для GitLab Registry
make docker build \
  IMAGE=myapp \
  TAG=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
```

## 9. Очистка и обслуживание

### Очистка временных файлов
```bash
# Очистка логов и временных файлов
make docker clean

# Очистка Docker системы (вручную)
docker system prune -f
docker image prune -f
```

### Управление архивами
```bash
# Просмотр сохраненных архивов
ls -la images/

# Проверка целостности архива
sha256sum -c images/myapp_v1.0.0.tar.gz.sha256

# Удаление старых архивов
find images/ -name "*.tar.gz" -mtime +30 -delete
```
