Files
Dockerfile/docs/examples.md

8.4 KiB
Raw Blame History

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

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

Простая сборка

# Сборка с двойными тегами
make docker build IMAGE=myapp TAG1=latest TAG2=v1.0.0

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

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

Полный цикл сборки и публикации

# 1. Сборка образа (двойные теги)
make docker build \
  IMAGE=myapp \
  TAG1=latest TAG2=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 \
  TAG1=latest TAG2=v1.0.0 \
  REGISTRY=hub.cism-ms.ru/library

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

Настройка buildx

# Создание buildx builder
make docker create-builder

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

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

Сборка для нескольких платформ

# Сборка для AMD64 и ARM64
make docker build \
  IMAGE=myapp \
  TAG1=latest TAG2=v1.0.0 \
  USE_BUILDX=1 \
  PLATFORMS="linux/amd64,linux/arm64" \
  PUSH=1 \
  LOAD=0

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

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

Сохранение образов

# Простое сохранение
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

Загрузка и публикация

# Простая загрузка
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 \
  TAG1=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

# Передача переменных окружения
make docker build \
  IMAGE=myapp \
  TAG1=v1.0.0 \
  BUILD_ARGS="--build-arg VERSION=1.0.0 --build-arg NODE_ENV=production"

# Передача пользовательских данных
make docker build \
  IMAGE=myapp \
  TAG1=v1.0.0 \
  BUILD_ARGS="--build-arg USER_ID=1000 --build-arg GROUP_ID=1000"

Использование ARG_FILE

# Создание файла с аргументами
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

Базовые операции

# Просмотр статуса
make git status

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

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

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

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

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

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

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

Linux (Ubuntu/Debian)

# Установка 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)

# Установка 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

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

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

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

Windows

# Через 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. Отладка и мониторинг

Просмотр конфигурации

# Показать все переменные
make docker print-config

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

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

Проверка образов

# Проверка версии 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

# Сборка с Dockerfile.prod
make docker build \
  IMAGE=myapp \
  TAG1=production \
  DOCKERFILE=Dockerfile.prod

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

Работа с разными registry

# Сборка для локального registry
make docker build \
  IMAGE=myapp \
  TAG1=v1.0.0 \
  REGISTRY=localhost:5000

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

# Сборка для GitLab Registry
make docker build \
  IMAGE=myapp \
  TAG1=v1.0.0 \
  REGISTRY=registry.gitlab.com/myproject

Управление тегами

# Перетегирование образа (локально)
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. Очистка и обслуживание

Очистка временных файлов

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

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

Управление архивами

# Просмотр сохраненных архивов
ls -la images/

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

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