Files
Dockerfile/docs/examples.md

353 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📖 Примеры использования
## 1. Базовая сборка и публикация
### Простая сборка
```bash
# Сборка с двойными тегами
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"
```
### Полный цикл сборки и публикации
```bash
# 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
```bash
# Создание buildx builder
make docker create-builder
# Проверка builder'а
make docker use-builder
# Просмотр доступных платформ
docker buildx inspect --bootstrap
```
### Сборка для нескольких платформ
```bash
# Сборка для 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. Оффлайн деплой
### Сохранение образов
```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 \
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
```bash
# Передача переменных окружения
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
```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 \
TAG1=production \
DOCKERFILE=Dockerfile.prod
# Сборка с контекстом в подпапке
make docker build \
IMAGE=myapp \
TAG1=v1.0.0 \
CONTEXT=./app
```
### Работа с разными registry
```bash
# Сборка для локального 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
```
### Управление тегами
```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. Очистка и обслуживание
### Очистка временных файлов
```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
```