From e4e23b88cad0e64a4d630340722cbc286e8d33e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=90=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D0=BE=D0=B2?= Date: Wed, 29 Oct 2025 14:47:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 202 ++++++++++++++++++++ docs/README.md | 122 ++++++++++++ docs/best-practices.md | 353 +++++++++++++++++++++++++++++++++++ docs/dockerfile.md | 222 ++++++++++++++++++++++ docs/examples.md | 346 ++++++++++++++++++++++++++++++++++ docs/faq.md | 368 ++++++++++++++++++++++++++++++++++++ docs/installation.md | 196 +++++++++++++++++++ docs/makefile.md | 368 ++++++++++++++++++++++++++++++++++++ docs/troubleshooting.md | 351 ++++++++++++++++++++++++++++++++++ readme.txt | 403 ---------------------------------------- 10 files changed, 2528 insertions(+), 403 deletions(-) create mode 100644 README.md create mode 100644 docs/README.md create mode 100644 docs/best-practices.md create mode 100644 docs/dockerfile.md create mode 100644 docs/examples.md create mode 100644 docs/faq.md create mode 100644 docs/installation.md create mode 100644 docs/makefile.md create mode 100644 docs/troubleshooting.md delete mode 100644 readme.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..05fbea8 --- /dev/null +++ b/README.md @@ -0,0 +1,202 @@ +# Universal Docker & Git Management Project + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Docker](https://img.shields.io/badge/Docker-Universal-blue.svg)](https://www.docker.com/) +[![Make](https://img.shields.io/badge/Make-Universal-green.svg)](https://www.gnu.org/software/make/) + +**Автор:** Сергей Антропов +**Версия:** 2.0 +**Сайт:** https://devops.org.ru + +## 📋 Описание проекта + +Универсальный проект для автоматизации работы с Docker-образами и Git-репозиториями. Включает в себя: + +- **Универсальный Dockerfile** на базе Ubuntu 22.04 с предустановленными утилитами +- **Мощный Makefile** с полным набором команд для Docker и Git +- **Подробную документацию** на русском языке +- **Готовые сценарии** для оффлайн-деплоя + +## 🚀 Быстрый старт + +### Предварительные требования + +- Docker (версия 20.10+) +- Make (GNU Make 3.81+) +- Git (версия 2.0+) + +### Установка + +1. **Клонируйте репозиторий:** +```bash +git clone +cd Dockerfile +``` + +2. **Проверьте Makefile:** +```bash +make help +``` + +3. **Проверьте Docker:** +```bash +make docker print-config +``` + +## 📚 Документация + +### 📦 [Установка зависимостей](docs/installation.md) +Подробные инструкции по установке Docker, Make и Git на различных операционных системах: +- Linux (Ubuntu/Debian, CentOS/RHEL/Fedora) +- macOS (Homebrew, Docker Desktop) +- Windows (WSL2, Git Bash) +- Устранение проблем установки + +### 🐳 [Dockerfile](docs/dockerfile.md) +Описание универсального Dockerfile и способы его использования: +- Особенности и структура +- Расширение и настройка +- Оптимизация и безопасность +- Примеры использования + +### ⚙️ [Makefile](docs/makefile.md) +Полное описание команд и переменных Makefile: +- Основные команды Docker и Git +- Подробное описание всех переменных +- Настройка и конфигурация +- Служебные функции + +### 📖 [Примеры использования](docs/examples.md) +Практические примеры и сценарии использования: +- Базовая сборка и публикация +- Мультиплатформенная сборка +- Оффлайн деплой +- Работа с аргументами сборки +- Отладка и мониторинг + +### 💡 [Лучшие практики](docs/best-practices.md) +Рекомендации по эффективному использованию: +- Управление версиями +- Безопасность +- Оптимизация сборки +- Мониторинг и логирование +- Организация проекта + +### 🐛 [Решение проблем](docs/troubleshooting.md) +Диагностика и решение частых проблем: +- Частые ошибки и их решения +- Проблемы с памятью, сетью, правами доступа +- Диагностические команды +- Получение помощи + +### ❓ [FAQ](docs/faq.md) +Ответы на часто задаваемые вопросы: +- Общие вопросы +- Вопросы по Docker, Makefile, Git +- Вопросы по производительности и безопасности +- Вопросы по отладке и конфигурации + +## 🎯 Основные возможности + +### Docker команды +- `make docker build` - сборка образов +- `make docker push` - публикация в registry +- `make docker save/load` - работа с архивами +- `make docker check` - проверка образов + +### Git команды +- `make git status` - статус репозитория +- `make git commit` - создание коммитов +- `make git push` - отправка изменений +- `make git sync` - полная синхронизация + +### Дополнительные возможности +- Мультиплатформенная сборка (buildx) +- Оффлайн деплой с архивами +- Подробное логирование +- Гибкая конфигурация + +## 📁 Структура проекта + +``` +Dockerfile/ +├── dockerfile # Универсальный Dockerfile +├── makefile # Makefile с командами Docker и Git +├── README.md # Главная документация +├── docs/ # Подробная документация +│ ├── installation.md +│ ├── dockerfile.md +│ ├── makefile.md +│ ├── examples.md +│ ├── best-practices.md +│ ├── troubleshooting.md +│ └── faq.md +├── logs/ # Директория логов (создается автоматически) +├── images/ # Директория архивов образов +└── .offline/ # Временные файлы для оффлайн операций +``` + +## 🚀 Быстрые команды + +### Основные операции +```bash +# Сборка образа +make docker build IMAGE=myapp TAG=v1.0.0 + +# Публикация образа +make docker push IMAGE=myapp TAG=v1.0.0 + +# Проверка образа +make docker check RUN_CMD="lsb_release -a" + +# Сохранение в архив +make docker save SRC_IMAGE=myapp:latest COMPRESS=1 +``` + +### Git операции +```bash +# Статус репозитория +make git status + +# Коммит и push +make git push GIT_MSG="Обновление" + +# Полная синхронизация +make git sync +``` + +## 🤝 Вклад в проект + +1. Форкните репозиторий +2. Создайте ветку для новой функции (`git checkout -b feature/amazing-feature`) +3. Зафиксируйте изменения (`git commit -m 'Add amazing feature'`) +4. Отправьте в ветку (`git push origin feature/amazing-feature`) +5. Откройте Pull Request + +## 📄 Лицензия + +Этот проект распространяется под лицензией MIT. См. файл [LICENSE](LICENSE) для подробностей. + +## 👨‍💻 Автор + +**Сергей Антропов** +- Сайт: https://devops.org.ru +- Email: devops@devops.org.ru + +## 🙏 Благодарности + +- Сообществу Docker за отличные инструменты +- GNU Make за мощную систему сборки +- Ubuntu за стабильную базовую платформу + +## 📞 Поддержка + +Если у вас есть вопросы или предложения: + +1. Создайте [Issue](https://github.com/your-repo/issues) +2. Напишите на email: devops@devops.org.ru +3. Посетите сайт: https://devops.org.ru + +--- + +**⭐ Если проект был полезен, поставьте звезду!** \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..2d7829b --- /dev/null +++ b/docs/README.md @@ -0,0 +1,122 @@ +# 📚 Документация проекта + +Добро пожаловать в документацию Universal Docker & Git Management Project! Здесь вы найдете подробные инструкции по использованию всех компонентов проекта. + +## 📖 Содержание + +### [📦 Установка зависимостей](installation.md) +Полное руководство по установке всех необходимых компонентов на различных операционных системах. + +**Содержит:** +- Установка Docker, Make, Git +- Настройка для Linux, macOS, Windows +- Устранение проблем установки +- Проверка корректности установки + +### [🐳 Dockerfile](dockerfile.md) +Подробное описание универсального Dockerfile и способы его настройки. + +**Содержит:** +- Структура и особенности Dockerfile +- Способы расширения и настройки +- Оптимизация и безопасность +- Примеры использования + +### [⚙️ Makefile](makefile.md) +Полное описание команд и переменных Makefile. + +**Содержит:** +- Все команды Docker и Git +- Подробное описание переменных +- Настройка и конфигурация +- Служебные функции + +### [📖 Примеры использования](examples.md) +Практические примеры и сценарии использования проекта. + +**Содержит:** +- Базовая сборка и публикация +- Мультиплатформенная сборка +- Оффлайн деплой +- Работа с аргументами сборки +- Отладка и мониторинг + +### [💡 Лучшие практики](best-practices.md) +Рекомендации по эффективному использованию проекта. + +**Содержит:** +- Управление версиями +- Безопасность +- Оптимизация сборки +- Мониторинг и логирование +- Организация проекта + +### [🐛 Решение проблем](troubleshooting.md) +Диагностика и решение частых проблем. + +**Содержит:** +- Частые ошибки и их решения +- Проблемы с памятью, сетью, правами +- Диагностические команды +- Получение помощи + +### [❓ FAQ](faq.md) +Ответы на часто задаваемые вопросы. + +**Содержит:** +- Общие вопросы +- Вопросы по Docker, Makefile, Git +- Вопросы по производительности +- Вопросы по безопасности и отладке + +## 🚀 Быстрый старт + +1. **Начните с [установки](installation.md)** - установите все необходимые компоненты +2. **Изучите [Dockerfile](dockerfile.md)** - поймите структуру базового образа +3. **Ознакомьтесь с [Makefile](makefile.md)** - изучите доступные команды +4. **Попробуйте [примеры](examples.md)** - выполните практические сценарии +5. **Следуйте [лучшим практикам](best-practices.md)** - оптимизируйте использование + +## 🔍 Поиск по документации + +### По задачам +- **Установка:** [installation.md](installation.md) +- **Сборка образов:** [dockerfile.md](dockerfile.md), [examples.md](examples.md) +- **Настройка:** [makefile.md](makefile.md) +- **Отладка:** [troubleshooting.md](troubleshooting.md) + +### По компонентам +- **Docker:** [dockerfile.md](dockerfile.md), [examples.md](examples.md) +- **Make:** [makefile.md](makefile.md) +- **Git:** [makefile.md](makefile.md), [examples.md](examples.md) + +### По уровням сложности +- **Начинающий:** [installation.md](installation.md), [examples.md](examples.md) +- **Средний:** [dockerfile.md](dockerfile.md), [makefile.md](makefile.md) +- **Продвинутый:** [best-practices.md](best-practices.md), [troubleshooting.md](troubleshooting.md) + +## 📝 Обновления документации + +Документация регулярно обновляется. Последние изменения: + +- **v2.0** - Полная реструктуризация документации +- **v1.5** - Добавлены примеры для Windows +- **v1.0** - Первоначальная версия + +## 🤝 Вклад в документацию + +Если вы нашли ошибку или хотите улучшить документацию: + +1. Создайте [Issue](https://github.com/your-repo/issues) с описанием проблемы +2. Предложите изменения через Pull Request +3. Свяжитесь с автором: devops@devops.org.ru + +## 📞 Поддержка + +- **Email:** devops@devops.org.ru +- **Сайт:** https://devops.org.ru +- **Issues:** [GitHub Issues](https://github.com/your-repo/issues) + +--- + +**Спасибо за использование нашего проекта! 🚀** diff --git a/docs/best-practices.md b/docs/best-practices.md new file mode 100644 index 0000000..999e883 --- /dev/null +++ b/docs/best-practices.md @@ -0,0 +1,353 @@ +# 💡 Лучшие практики + +## 1. Управление версиями + +### Семантическое версионирование +```bash +# Основные версии +TAG=v1.0.0 # Стабильная версия +TAG=v1.1.0 # Новая функциональность +TAG=v1.1.1 # Исправления ошибок + +# Предварительные версии +TAG=v1.2.0-alpha.1 +TAG=v1.2.0-beta.1 +TAG=v1.2.0-rc.1 + +# Специальные теги +TAG=latest # Последняя стабильная +TAG=dev # Разработка +TAG=stable # Стабильная ветка +``` + +### Автоматическое версионирование +```bash +# Использование Git commit hash +TAG=$(git rev-parse --short HEAD) + +# Использование даты +TAG=$(date +%Y%m%d-%H%M%S) + +# Использование Git тегов +TAG=$(git describe --tags --always) +``` + +## 2. Безопасность + +### Использование непривилегированного пользователя +```dockerfile +# В Dockerfile +RUN useradd -ms /bin/bash appuser +USER appuser +``` + +### Сканирование образов +```bash +# Проверка уязвимостей +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ + aquasec/trivy image myapp:latest + +# Проверка с детальным отчетом +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ + aquasec/trivy image --severity HIGH,CRITICAL myapp:latest +``` + +## 3. Оптимизация сборки + +### Многоэтапная сборка +```dockerfile +# Build stage +FROM node:18-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci --only=production + +# Production stage +FROM node:18-alpine AS production +WORKDIR /app +COPY --from=builder /app/node_modules ./node_modules +COPY . . +CMD ["npm", "start"] +``` + +### Использование .dockerignore +```dockerfile +# .dockerignore +node_modules +npm-debug.log +.git +.gitignore +README.md +.env +.nyc_output +coverage +.nyc_output +.coverage +``` + +## 4. Мониторинг и логирование + +### Структурированные логи +```bash +# Создание логов с метаданными +make docker build \ + IMAGE=myapp \ + TAG=v1.0.0 \ + BUILD_ARGS="--build-arg BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ + LOG_DIR=./build-logs +``` + +### Мониторинг размера образов +```bash +# Просмотр размера образа +docker images myapp:latest + +# Детальная информация +docker history myapp:latest + +# Анализ слоев +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + wagoodman/dive:latest myapp:latest +``` + +## 5. Оптимизация производительности + +### Кэширование слоев Docker +```bash +# Сборка с использованием кэша +make docker build IMAGE=myapp TAG=v1.0.0 + +# Сборка без кэша (для чистых сборок) +make docker build IMAGE=myapp TAG=v1.0.0 NO_CACHE=1 + +# Принудительное обновление базовых образов +make docker build IMAGE=myapp TAG=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 & +wait + +# Проверка результатов +docker images | grep -E "(frontend|backend|worker)" +``` + +### Оптимизация размера образов +```bash +# Сборка с минимальным размером +make docker build \ + IMAGE=myapp \ + TAG=minimal \ + BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1" + +# Сжатие образов +make docker save \ + SRC_IMAGE=myapp:latest \ + COMPRESS=1 +``` + +## 6. Управление зависимостями + +### Создание базового образа +```bash +# Сборка базового образа +make docker build \ + IMAGE=base-image \ + TAG=ubuntu-22.04 \ + DOCKERFILE=Dockerfile.base + +# Использование базового образа +make docker build \ + IMAGE=myapp \ + TAG=v1.0.0 \ + BUILD_ARGS="--build-arg BASE_IMAGE=base-image:ubuntu-22.04" +``` + +### Управление зависимостями +```bash +# Обновление базовых образов +make docker build \ + IMAGE=myapp \ + TAG=v1.0.0 \ + PULL=1 + +# Проверка обновлений +docker pull ubuntu:22.04 +``` + +## 7. Отладка и тестирование + +### Тестирование образов +```bash +# Запуск тестов в контейнере +make docker check RUN_CMD="npm test" + +# Проверка конфигурации +make docker check RUN_CMD="nginx -t" + +# Проверка портов +make docker check RUN_CMD="netstat -tlnp" +``` + +### Интерактивная отладка +```bash +# Запуск интерактивного контейнера +docker run -it --rm myapp:latest /bin/bash + +# Запуск с отладкой +docker run -it --rm \ + -p 8080:8080 \ + -e DEBUG=1 \ + myapp:latest +``` + +## 8. Мониторинг производительности + +### Измерение времени сборки +```bash +# Время сборки +time make docker build IMAGE=myapp TAG=v1.0.0 + +# Детальная статистика +make docker build IMAGE=myapp TAG=v1.0.0 2>&1 | tee build.log +``` + +### Мониторинг ресурсов +```bash +# Использование ресурсов контейнеров +docker stats --no-stream myapp-container + +# Анализ размера образов +docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" +``` + +## 9. Организация проекта + +### Структура файлов +``` +project/ +├── Dockerfile +├── makefile +├── .dockerignore +├── build.args +├── Makefile.local +├── docs/ +│ ├── installation.md +│ ├── dockerfile.md +│ ├── makefile.md +│ ├── examples.md +│ └── best-practices.md +├── logs/ +├── images/ +└── .offline/ +``` + +### Управление конфигурацией +```bash +# Создание Makefile.local для проекта +cat > Makefile.local << EOF +REGISTRY=my-registry.com +IMAGE=my-project +TAG=dev +NO_CACHE=0 +QUIET=0 +EOF + +# Использование конфигурации +make docker build # Использует настройки из Makefile.local +``` + +## 10. Резервное копирование + +### Регулярное сохранение образов +```bash +# Создание скрипта для ежедневного бэкапа +cat > backup.sh << 'EOF' +#!/bin/bash +DATE=$(date +%Y%m%d) +make docker save \ + SRC_IMAGE=myapp:latest \ + IMAGES_DIR=/backup/docker-images \ + COMPRESS=1 +EOF + +chmod +x backup.sh + +# Добавление в crontab +echo "0 2 * * * /path/to/backup.sh" | crontab - +``` + +### Восстановление из архива +```bash +# Восстановление образа +make docker load \ + ARCHIVE=/backup/docker-images/myapp_latest.tar.gz \ + REGISTRY=my-registry.com \ + IMAGE=myapp \ + TAG=restored \ + LOGIN=1 \ + PUSH_OFFLINE=1 +``` + +## 11. Документирование + +### Создание README для проекта +```bash +# Создание документации проекта +cat > PROJECT_README.md << 'EOF' +# My Project + +## Быстрый старт +```bash +make docker build IMAGE=myapp TAG=latest +make docker push IMAGE=myapp TAG=latest +``` + +## Переменные окружения +- VERSION: Версия приложения +- NODE_ENV: Окружение (development/production) +EOF +``` + +### Комментирование Dockerfile +```dockerfile +# Базовый образ Ubuntu 22.04 +ARG BASE_IMAGE=ubuntu:22.04 +FROM ${BASE_IMAGE} + +# Метаданные образа +LABEL maintainer="Sergey Antropov " \ + description="Универсальный базовый образ" \ + version="1.0" + +# Настройки окружения для неинтерактивной установки +ENV DEBIAN_FRONTEND=noninteractive \ + TZ=Etc/UTC \ + LANG=C.UTF-8 + +# Установка необходимых утилит +RUN apt-get update && \ + apt-get install -y \ + ca-certificates \ + curl \ + wget \ + bash \ + tzdata \ + nano \ + mc \ + tar \ + gzip \ + unzip \ + net-tools \ + iputils-ping && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Установка рабочей директории +WORKDIR /app +``` diff --git a/docs/dockerfile.md b/docs/dockerfile.md new file mode 100644 index 0000000..ca563ef --- /dev/null +++ b/docs/dockerfile.md @@ -0,0 +1,222 @@ +# 🐳 Dockerfile + +## Особенности + +- **Базовый образ:** Ubuntu 22.04 (настраивается через ARG) +- **Предустановленные утилиты:** curl, wget, nano, mc, net-tools, ping и др. +- **Оптимизированный размер:** удаление кэша apt после установки +- **Безопасность:** возможность создания непривилегированного пользователя +- **Гибкость:** легко расширяется под конкретные нужды + +## Использование + +```bash +# Сборка с базовым образом Ubuntu 22.04 +make docker build IMAGE=myapp TAG=latest + +# Сборка с другим базовым образом +make docker build IMAGE=myapp TAG=latest BUILD_ARGS="--build-arg BASE_IMAGE=ubuntu:20.04" + +# Сборка без кэша +make docker build IMAGE=myapp TAG=latest NO_CACHE=1 +``` + +## Структура Dockerfile + +```dockerfile +# Базовый образ (настраивается) +ARG BASE_IMAGE=ubuntu:22.04 +FROM ${BASE_IMAGE} + +# Метаданные +LABEL maintainer="Sergey Antropov " + +# Настройки окружения +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=Etc/UTC +ENV LANG=C.UTF-8 + +# Установка утилит +RUN apt-get update && apt-get install -y \ + ca-certificates curl wget bash tzdata \ + nano mc tar gzip unzip net-tools \ + iputils-ping && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# Рабочая директория +WORKDIR /app +``` + +## Расширение Dockerfile + +### Добавление пользователя +```dockerfile +# Создание непривилегированного пользователя +RUN useradd -ms /bin/bash appuser && \ + chown -R appuser:appuser /app +USER appuser +``` + +### Добавление портов +```dockerfile +# Открытие портов +EXPOSE 8080 +EXPOSE 3000 +``` + +### Добавление переменных окружения +```dockerfile +# Переменные для приложения +ENV APP_HOME=/app +ENV PATH="$PATH:/app/bin" +ENV NODE_ENV=production +``` + +### Добавление команды по умолчанию +```dockerfile +# Команда по умолчанию +CMD ["bash"] +# или +CMD ["npm", "start"] +``` + +## Примеры использования + +### Базовое использование +```bash +# Простая сборка +make docker build IMAGE=myapp TAG=latest + +# Сборка с проверкой +make docker build IMAGE=myapp TAG=v1.0.0 +make docker check RUN_CMD="lsb_release -a" +``` + +### Сборка с аргументами +```bash +# Передача переменных в Dockerfile +make docker build \ + IMAGE=myapp \ + TAG=v1.0.0 \ + BUILD_ARGS="--build-arg VERSION=1.0.0 --build-arg NODE_ENV=production" +``` + +### Сборка с файлом аргументов +```bash +# Создание файла build.args +cat > build.args << EOF +VERSION=1.0.0 +BUILD_DATE=2024-01-15 +NODE_ENV=production +EOF + +# Сборка с файлом аргументов +make docker build IMAGE=myapp TAG=v1.0.0 ARG_FILE=build.args +``` + +## Оптимизация Dockerfile + +### Многоэтапная сборка +```dockerfile +# Build stage +FROM node:18-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci --only=production + +# Production stage +FROM node:18-alpine AS production +WORKDIR /app +COPY --from=builder /app/node_modules ./node_modules +COPY . . +CMD ["npm", "start"] +``` + +### Использование .dockerignore +```dockerfile +# .dockerignore +node_modules +npm-debug.log +.git +.gitignore +README.md +.env +.nyc_output +coverage +``` + +### Минимизация слоев +```dockerfile +# Плохо - много слоев +RUN apt-get update +RUN apt-get install -y curl +RUN apt-get install -y wget +RUN apt-get clean + +# Хорошо - один слой +RUN apt-get update && \ + apt-get install -y curl wget && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* +``` + +## Безопасность + +### Использование непривилегированного пользователя +```dockerfile +# Создание пользователя +RUN useradd -ms /bin/bash appuser +USER appuser +``` + +### Сканирование уязвимостей +```bash +# Проверка уязвимостей +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ + aquasec/trivy image myapp:latest + +# Проверка с детальным отчетом +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ + aquasec/trivy image --severity HIGH,CRITICAL myapp:latest +``` + +### Обновление пакетов +```dockerfile +# Обновление всех пакетов +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* +``` + +## Отладка + +### Просмотр истории сборки +```bash +# История слоев +docker history myapp:latest + +# Детальная информация +docker image inspect myapp:latest +``` + +### Интерактивная отладка +```bash +# Запуск интерактивного контейнера +docker run -it --rm myapp:latest /bin/bash + +# Запуск с отладкой +docker run -it --rm \ + -p 8080:8080 \ + -e DEBUG=1 \ + myapp:latest +``` + +### Анализ размера образа +```bash +# Анализ слоев +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + wagoodman/dive:latest myapp:latest +``` diff --git a/docs/examples.md b/docs/examples.md new file mode 100644 index 0000000..046b187 --- /dev/null +++ b/docs/examples.md @@ -0,0 +1,346 @@ +# 📖 Примеры использования + +## 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 +``` diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 0000000..d0e540d --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,368 @@ +# ❓ FAQ (Часто задаваемые вопросы) + +## Общие вопросы + +### Q: Как использовать Makefile в Windows? +**A:** Установите WSL2 или используйте Git Bash: +```bash +# В Git Bash +make docker build IMAGE=myapp TAG=latest + +# Или через WSL2 +wsl make docker build IMAGE=myapp TAG=latest +``` + +### Q: Можно ли использовать с Docker Compose? +**A:** Да, можно интегрировать: +```yaml +# docker-compose.yml +version: '3.8' +services: + app: + build: + context: . + dockerfile: Dockerfile + image: myapp:latest +``` + +### Q: Как настроить автоматическую сборку при коммите? +**A:** Используйте Git hooks: +```bash +# .git/hooks/post-commit +#!/bin/bash +make docker build IMAGE=myapp TAG=$(git rev-parse --short HEAD) +``` + +### Q: Можно ли использовать с Kubernetes? +**A:** Да, после сборки образа: +```bash +# Сборка образа +make docker build IMAGE=myapp TAG=v1.0.0 + +# Применение в Kubernetes +kubectl apply -f k8s/ +``` + +### Q: Как оптимизировать время сборки? +**A:** Используйте кэширование и .dockerignore: +```bash +# Сборка с кэшем +make docker build IMAGE=myapp TAG=v1.0.0 + +# Создание .dockerignore +echo "node_modules" >> .dockerignore +echo ".git" >> .dockerignore +``` + +### Q: Как проверить правильность установки? +**A:** Выполните проверочные команды: +```bash +# Проверка Docker +docker --version +docker run hello-world + +# Проверка Make +make --version + +# Проверка Git +git --version +``` + +## Вопросы по Docker + +### Q: Как работать с приватными registry? +**A:** Настройте авторизацию: +```bash +# Авторизация +make docker login REGISTRY=your-private-registry.com + +# Сборка и публикация +make docker push IMAGE=myapp TAG=v1.0.0 REGISTRY=your-private-registry.com +``` + +### Q: Можно ли использовать с ARM процессорами? +**A:** Да, через buildx: +```bash +# Сборка для ARM64 +make docker build \ + IMAGE=myapp \ + TAG=v1.0.0 \ + USE_BUILDX=1 \ + PLATFORMS=linux/arm64 +``` + +### Q: Как мониторить использование ресурсов? +**A:** Используйте встроенные команды Docker: +```bash +# Мониторинг контейнеров +docker stats + +# Анализ образов +docker history myapp:latest +``` + +### Q: Как уменьшить размер образа? +**A:** Используйте многоэтапную сборку и .dockerignore: +```dockerfile +# Многоэтапная сборка +FROM node:18-alpine AS builder +WORKDIR /app +COPY package*.json ./ +RUN npm ci --only=production + +FROM node:18-alpine AS production +WORKDIR /app +COPY --from=builder /app/node_modules ./node_modules +COPY . . +CMD ["npm", "start"] +``` + +### Q: Как сканировать образы на уязвимости? +**A:** Используйте Trivy: +```bash +# Сканирование образа +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ + aquasec/trivy image myapp:latest + +# Сканирование с фильтром по критичности +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ + aquasec/trivy image --severity HIGH,CRITICAL myapp:latest +``` + +## Вопросы по Makefile + +### Q: Как переопределить переменные по умолчанию? +**A:** Создайте Makefile.local или передайте при вызове: +```bash +# Через Makefile.local +echo "REGISTRY=my-registry.com" > Makefile.local + +# Через параметры командной строки +make docker build IMAGE=myapp TAG=v1.0.0 REGISTRY=my-registry.com +``` + +### Q: Как использовать разные Dockerfile для разных окружений? +**A:** Используйте переменную DOCKERFILE: +```bash +# Для разработки +make docker build IMAGE=myapp TAG=dev DOCKERFILE=Dockerfile.dev + +# Для продакшена +make docker build IMAGE=myapp TAG=prod DOCKERFILE=Dockerfile.prod +``` + +### Q: Как передать много аргументов в Docker build? +**A:** Используйте ARG_FILE: +```bash +# Создание файла аргументов +cat > build.args << EOF +VERSION=1.0.0 +BUILD_DATE=2024-01-15 +NODE_ENV=production +USER_ID=1000 +GROUP_ID=1000 +EOF + +# Использование файла +make docker build IMAGE=myapp TAG=v1.0.0 ARG_FILE=build.args +``` + +### Q: Как настроить логирование? +**A:** Используйте переменные LOG_DIR и LOG_FILE: +```bash +# Кастомная директория логов +make docker build IMAGE=myapp TAG=v1.0.0 LOG_DIR=./build-logs + +# Просмотр логов +tail -f logs/build_20240115_143022.log +``` + +## Вопросы по Git + +### Q: Как работать с разными удаленными репозиториями? +**A:** Используйте переменную GIT_REMOTE: +```bash +# Работа с origin +make git push GIT_REMOTE=origin GIT_MSG="Обновление" + +# Работа с upstream +make git pull GIT_REMOTE=upstream +``` + +### Q: Как автоматизировать коммиты? +**A:** Используйте переменную GIT_MSG: +```bash +# Коммит с сообщением +make git commit GIT_MSG="Автоматический коммит" + +# Push с коммитом +make git push GIT_MSG="Обновление от $(date)" +``` + +### Q: Как синхронизировать с удаленным репозиторием? +**A:** Используйте команду sync: +```bash +# Полная синхронизация (pull + commit + push) +make git sync +``` + +## Вопросы по производительности + +### Q: Как ускорить сборку? +**A:** Используйте кэширование и оптимизацию: +```bash +# Сборка с кэшем +make docker build IMAGE=myapp TAG=v1.0.0 + +# Параллельная сборка +make docker build IMAGE=frontend TAG=v1.0.0 & +make docker build IMAGE=backend TAG=v1.0.0 & +wait +``` + +### Q: Как мониторить время сборки? +**A:** Используйте команду time: +```bash +# Измерение времени сборки +time make docker build IMAGE=myapp TAG=v1.0.0 + +# Детальная статистика +make docker build IMAGE=myapp TAG=v1.0.0 2>&1 | tee build.log +``` + +### Q: Как оптимизировать размер образов? +**A:** Используйте многоэтапную сборку и .dockerignore: +```bash +# Сборка с минимальным размером +make docker build \ + IMAGE=myapp \ + TAG=minimal \ + BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1" +``` + +## Вопросы по безопасности + +### Q: Как работать с секретами? +**A:** Используйте Docker secrets или переменные окружения: +```bash +# Через переменные окружения +make docker build \ + IMAGE=myapp \ + TAG=v1.0.0 \ + BUILD_ARGS="--build-arg API_KEY=\$API_KEY" +``` + +### Q: Как сканировать образы на уязвимости? +**A:** Используйте Trivy или другие инструменты: +```bash +# Сканирование с Trivy +docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ + aquasec/trivy image myapp:latest +``` + +### Q: Как использовать непривилегированного пользователя? +**A:** Настройте в Dockerfile: +```dockerfile +# Создание пользователя +RUN useradd -ms /bin/bash appuser +USER appuser +``` + +## Вопросы по отладке + +### Q: Как отладить сборку? +**A:** Используйте подробный вывод и логи: +```bash +# Подробный вывод +make docker build IMAGE=myapp TAG=v1.0.0 QUIET=0 + +# Просмотр логов +tail -f logs/build_*.log + +# Интерактивная отладка +docker run -it --rm myapp:latest /bin/bash +``` + +### Q: Как проверить образ после сборки? +**A:** Используйте команду check: +```bash +# Проверка версии +make docker check RUN_CMD="node --version" + +# Проверка сервиса +make docker check RUN_CMD="curl -f http://localhost:8080/health" +``` + +### Q: Как получить информацию об образе? +**A:** Используйте команду inspect: +```bash +# Детальная информация +make docker inspect + +# История слоев +docker history myapp:latest +``` + +## Вопросы по архивам + +### Q: Как создать архив образа? +**A:** Используйте команду save: +```bash +# Простое сохранение +make docker save SRC_IMAGE=myapp:latest + +# С сжатием +make docker save SRC_IMAGE=myapp:latest COMPRESS=1 +``` + +### Q: Как загрузить архив образа? +**A:** Используйте команду load: +```bash +# Простая загрузка +make docker load ARCHIVE=images/myapp.tar + +# С публикацией +make docker load \ + ARCHIVE=images/myapp.tar \ + LOGIN=1 \ + PUSH_OFFLINE=1 +``` + +### Q: Как разбить архив на части? +**A:** Используйте переменную SPLIT_SIZE: +```bash +# Разбиение на части по 2GB +make docker save \ + SRC_IMAGE=myapp:latest \ + SPLIT_SIZE=2G +``` + +## Вопросы по конфигурации + +### Q: Как настроить цвета вывода? +**A:** Используйте переменные цветов: +```bash +# Отключение цветов +make docker build \ + IMAGE=myapp \ + TAG=v1.0.0 \ + COLOR_RESET= \ + COLOR_INFO= \ + COLOR_OK= \ + COLOR_ERR= \ + COLOR_WARN= +``` + +### Q: Как настроить тихий режим? +**A:** Используйте переменную QUIET: +```bash +# Тихий режим +make docker build IMAGE=myapp TAG=v1.0.0 QUIET=1 +``` + +### Q: Как настроить кастомную директорию логов? +**A:** Используйте переменную LOG_DIR: +```bash +# Кастомная директория +make docker build IMAGE=myapp TAG=v1.0.0 LOG_DIR=./custom-logs +``` diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..970fa0e --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,196 @@ +# 📦 Установка зависимостей + +## Предварительные требования + +- Docker (версия 20.10+) +- Make (GNU Make 3.81+) +- Git (версия 2.0+) + +## Linux (Ubuntu/Debian) + +```bash +# Обновление системы +sudo apt-get update + +# Установка Docker +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 + +# Установка Git (если не установлен) +sudo apt-get install -y git + +# Перезагрузка для применения изменений группы +sudo reboot + +# Проверка установки +docker --version +make --version +git --version +``` + +## Linux (CentOS/RHEL/Fedora) + +```bash +# Для CentOS/RHEL +sudo yum install -y docker make git +sudo systemctl start docker +sudo systemctl enable docker +sudo usermod -aG docker $USER + +# Для Fedora +sudo dnf install -y docker make git +sudo systemctl start docker +sudo systemctl enable docker +sudo usermod -aG docker $USER + +# Проверка установки +docker --version +make --version +git --version +``` + +## macOS + +### Вариант 1: Через Homebrew (рекомендуется) +```bash +# Установка Homebrew (если не установлен) +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + +# Установка зависимостей +brew install docker +brew install make +brew install git + +# Запуск Docker Desktop +open /Applications/Docker.app + +# Проверка установки +docker --version +make --version +git --version +``` + +### Вариант 2: Docker Desktop +```bash +# 1. Скачайте Docker Desktop с https://www.docker.com/products/docker-desktop +# 2. Установите Docker Desktop +# 3. Установите Make через Homebrew +brew install make + +# Проверка установки +docker --version +make --version +``` + +## Windows + +### Вариант 1: WSL2 (рекомендуется) +```powershell +# В PowerShell от имени администратора +wsl --install + +# Перезагрузите компьютер, затем в WSL2: +sudo apt-get update +sudo apt-get install -y docker.io make git +sudo systemctl start docker +sudo usermod -aG docker $USER + +# Проверка установки +docker --version +make --version +git --version +``` + +### Вариант 2: Git Bash +```bash +# 1. Установите Docker Desktop с https://www.docker.com/products/docker-desktop +# 2. Установите Git for Windows с https://git-scm.com/download/win +# (Make поставляется с Git for Windows) + +# Проверка установки в Git Bash +docker --version +make --version +git --version +``` + +## Проверка установки + +После установки выполните проверку: + +```bash +# Проверка Docker +docker --version +docker run hello-world + +# Проверка Make +make --version + +# Проверка Git +git --version + +# Проверка прав Docker (Linux/macOS) +docker ps +``` + +## Устранение проблем установки + +### Проблема: "docker: command not found" +```bash +# Linux +sudo apt-get update && sudo apt-get install -y docker.io + +# macOS +brew install docker + +# Windows +# Убедитесь, что Docker Desktop запущен +``` + +### Проблема: "permission denied while trying to connect to Docker daemon" +```bash +# Linux/macOS +sudo usermod -aG docker $USER +# Перезагрузите систему или выполните: +newgrp docker +``` + +### Проблема: "make: command not found" +```bash +# Ubuntu/Debian +sudo apt-get install -y make + +# CentOS/RHEL +sudo yum install -y make + +# Fedora +sudo dnf install -y make + +# macOS +brew install make + +# Windows +# Make поставляется с Git for Windows +``` + +## Установка проекта + +1. **Клонируйте репозиторий:** +```bash +git clone +cd Dockerfile +``` + +2. **Проверьте Makefile:** +```bash +make help +``` + +3. **Проверьте Docker:** +```bash +make docker print-config +``` diff --git a/docs/makefile.md b/docs/makefile.md new file mode 100644 index 0000000..a279cfe --- /dev/null +++ b/docs/makefile.md @@ -0,0 +1,368 @@ +# ⚙️ Makefile + +## Основные команды + +### Docker команды + +| Команда | Описание | Пример | +|---------|----------|--------| +| `make docker build` | Собрать Docker-образ | `make docker build IMAGE=myapp TAG=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 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` | +| `make docker retag` | Перетегировать образ | `make docker retag NEW_TAG=v2.0` | +| `make docker inspect` | Просмотреть метаданные | `make docker inspect` | +| `make docker clean` | Очистить временные файлы | `make docker clean` | + +### Git команды + +| Команда | Описание | Пример | +|---------|----------|--------| +| `make git status` | Показать статус репозитория | `make git status` | +| `make git pull` | Получить изменения | `make git pull` | +| `make git commit` | Создать коммит | `make git commit GIT_MSG="Обновление"` | +| `make git push` | Коммит + push | `make git push GIT_MSG="Новая версия"` | +| `make git sync` | Pull + commit + push | `make git sync` | + +## Подробное описание переменных + +### Основные Docker переменные + +#### REGISTRY +**Описание:** Адрес Docker Registry без протокола +**По умолчанию:** `hub.cism-ms.ru/library` +**Примеры:** +```bash +REGISTRY=hub.cism-ms.ru/library +REGISTRY=registry.gitlab.com/myproject +REGISTRY=localhost:5000 +``` + +#### IMAGE +**Описание:** Имя Docker-образа (обязательное поле при сборке) +**По умолчанию:** пустое +**Примеры:** +```bash +IMAGE=myapp +IMAGE=web-frontend +IMAGE=api-backend +``` + +#### TAG +**Описание:** Тег образа +**По умолчанию:** `latest` +**Примеры:** +```bash +TAG=latest +TAG=v1.0.0 +TAG=dev +TAG=2024.01.15 +``` + +#### CONTEXT +**Описание:** Папка контекста сборки Docker +**По умолчанию:** `.` (текущая директория) +**Примеры:** +```bash +CONTEXT=. +CONTEXT=./app +CONTEXT=/path/to/build/context +``` + +#### DOCKERFILE +**Описание:** Имя Dockerfile, используемого при сборке +**По умолчанию:** `Dockerfile` +**Примеры:** +```bash +DOCKERFILE=Dockerfile +DOCKERFILE=Dockerfile.prod +DOCKERFILE=./docker/Dockerfile +``` + +### Режимы сборки + +#### USE_BUILDX +**Описание:** Использовать Docker Buildx для мультиплатформенной сборки +**По умолчанию:** `0` +**Значения:** +- `0` - обычный `docker build` +- `1` - использовать `docker buildx build` + +**Примеры:** +```bash +# Обычная сборка +USE_BUILDX=0 + +# Мультиплатформенная сборка +USE_BUILDX=1 PLATFORMS="linux/amd64,linux/arm64" +``` + +#### PLATFORMS +**Описание:** Целевые платформы для buildx (через запятую) +**По умолчанию:** `linux/amd64` +**Примеры:** +```bash +PLATFORMS=linux/amd64 +PLATFORMS=linux/amd64,linux/arm64 +PLATFORMS=linux/amd64,linux/arm64,linux/arm/v7 +``` + +#### PUSH +**Описание:** Выполнить docker push после buildx +**По умолчанию:** `0` +**Значения:** +- `0` - не выполнять push +- `1` - выполнить push после сборки + +**Примечание:** Работает только с `USE_BUILDX=1` + +#### LOAD +**Описание:** Загрузить образ в локальный docker после сборки +**По умолчанию:** `1` +**Значения:** +- `0` - не загружать (актуально для CI/CD) +- `1` - загрузить в локальный docker + +#### NO_CACHE +**Описание:** Сборка без использования кэша +**По умолчанию:** `0` +**Значения:** +- `0` - использовать кэш Docker +- `1` - сборка без кэша + +**Примеры:** +```bash +# Сборка с кэшем (быстрее) +NO_CACHE=0 + +# Сборка без кэша (медленнее, но чище) +NO_CACHE=1 +``` + +#### PULL +**Описание:** Принудительно обновить базовые образы +**По умолчанию:** `0` +**Значения:** +- `0` - использовать локальные образы +- `1` - принудительно скачать последние версии + +#### QUIET +**Описание:** Минимальный вывод в консоль +**По умолчанию:** `0` +**Значения:** +- `0` - стандартный вывод +- `1` - минимальный вывод (для CI/CD) + +### Аргументы сборки + +#### BUILD_ARGS +**Описание:** Дополнительные аргументы для docker build +**По умолчанию:** пустое +**Формат:** `--build-arg KEY=VALUE --build-arg KEY2=VALUE2` + +**Примеры:** +```bash +BUILD_ARGS="--build-arg VERSION=1.0.0 --build-arg DEBUG=1" +BUILD_ARGS="--build-arg NODE_ENV=production" +BUILD_ARGS="--build-arg USER_ID=1000 --build-arg GROUP_ID=1000" +``` + +#### ARG_FILE +**Описание:** Путь к файлу с переменными KEY=VALUE +**По умолчанию:** пустое +**Формат файла:** Каждая строка содержит `KEY=VALUE` + +**Пример файла `build.args`:** +``` +VERSION=1.0.0 +BUILD_DATE=2024-01-15 +GIT_COMMIT=abc123def +NODE_ENV=production +USER_ID=1000 +GROUP_ID=1000 +``` + +**Использование:** +```bash +make docker build ARG_FILE=build.args +``` + +### Проверка и логирование + +#### RUN_CMD +**Описание:** Команда для проверки контейнера после сборки +**По умолчанию:** `lsb_release -a` +**Примеры:** +```bash +RUN_CMD="java -version" +RUN_CMD="node --version" +RUN_CMD="python3 --version" +RUN_CMD="curl -f http://localhost:8080/health" +``` + +#### BUILDER +**Описание:** Имя buildx builder'а +**По умолчанию:** `universal-builder` +**Примеры:** +```bash +BUILDER=universal-builder +BUILDER=my-custom-builder +BUILDER=ci-builder +``` + +#### LOG_DIR +**Описание:** Каталог для логов сборок +**По умолчанию:** `logs` +**Примеры:** +```bash +LOG_DIR=logs +LOG_DIR=./build-logs +LOG_DIR=/var/log/docker-builds +``` + +#### LOG_FILE +**Описание:** Файл лога (формируется автоматически) +**По умолчанию:** `$(LOG_DIR)/build_$(shell date +%Y%m%d_%H%M%S).log` +**Пример:** `logs/build_20240115_143022.log` + +### Оффлайн переменные (SAVE/LOAD) + +#### ARCHIVE +**Описание:** Путь к архиву образа (tar или gz) +**По умолчанию:** `image.tar` +**Примеры:** +```bash +ARCHIVE=image.tar +ARCHIVE=images/myapp_v1.0.0.tar.gz +ARCHIVE=/backup/containers/myapp.tar +``` + +#### IMAGES_DIR +**Описание:** Каталог для сохранения архивов Docker-образов +**По умолчанию:** `images` +**Примеры:** +```bash +IMAGES_DIR=images +IMAGES_DIR=./docker-images +IMAGES_DIR=/backup/containers +``` + +#### SRC_IMAGE +**Описание:** Имя исходного образа для сохранения +**По умолчанию:** `$(FULL_IMAGE)` если IMAGE задан +**Примеры:** +```bash +SRC_IMAGE=myapp:latest +SRC_IMAGE=ubuntu:22.04 +SRC_IMAGE=registry.local/myapp:v1.0 +``` + +#### COMPRESS +**Описание:** Сжать архив gzip +**По умолчанию:** `0` +**Значения:** +- `0` - оставить tar +- `1` - сжать gzip + +**Примеры:** +```bash +# Сохранить как tar +make docker save SRC_IMAGE=myapp:latest COMPRESS=0 + +# Сохранить как tar.gz +make docker save SRC_IMAGE=myapp:latest COMPRESS=1 +``` + +#### SPLIT_SIZE +**Описание:** Размер чанка для разбиения архива +**По умолчанию:** пустое (не разбивать) +**Примеры:** +```bash +SPLIT_SIZE=2G # Разбить на части по 2GB +SPLIT_SIZE=1G # Разбить на части по 1GB +SPLIT_SIZE=500M # Разбить на части по 500MB +``` + +#### LOGIN +**Описание:** Выполнить docker login перед push +**По умолчанию:** `1` +**Значения:** +- `0` - пропустить авторизацию +- `1` - выполнить docker login + +#### PUSH_OFFLINE +**Описание:** Выполнить docker push после загрузки архива +**По умолчанию:** `1` +**Значения:** +- `0` - только загрузить +- `1` - загрузить и запушить + +#### KEEP_SRC_TAG +**Описание:** Использовать тег из архива +**По умолчанию:** `1` +**Значения:** +- `0` - использовать TAG из Makefile +- `1` - использовать тег из загруженного архива + +#### OFFLINE_DIR +**Описание:** Временная служебная папка для оффлайн операций +**По умолчанию:** `.offline` +**Содержит:** `load.log`, `src_image.txt`, `dst_image.txt`, `last_save.txt` + +#### LAST_SAVE +**Описание:** Путь к последнему сохранённому архиву +**По умолчанию:** `$(OFFLINE_DIR)/last_save.txt` + +### Git переменные + +#### GIT_REMOTE +**Описание:** Имя удалённого репозитория +**По умолчанию:** `origin` +**Примеры:** +```bash +GIT_REMOTE=origin +GIT_REMOTE=upstream +GIT_REMOTE=backup +``` + +#### GIT_BRANCH +**Описание:** Текущая ветка (определяется автоматически) +**По умолчанию:** `$(shell git rev-parse --abbrev-ref HEAD)` +**Примеры:** `main`, `develop`, `feature/new-feature` + +#### GIT_MSG +**Описание:** Сообщение коммита +**По умолчанию:** запрашивается вручную +**Примеры:** +```bash +GIT_MSG="Добавлена поддержка Docker" +GIT_MSG="Исправлена ошибка в сборке" +GIT_MSG="Обновлены зависимости" +``` + +### Служебные переменные + +#### FULL_IMAGE +**Описание:** Полное имя образа REGISTRY/IMAGE:TAG +**Формируется автоматически:** `$(REGISTRY)/$(IMAGE):$(TAG)` +**Примеры:** +```bash +FULL_IMAGE=hub.cism-ms.ru/library/myapp:latest +FULL_IMAGE=registry.local/myapp:v1.0.0 +``` + +#### Цвета вывода +**Описание:** ANSI-коды для форматирования вывода +**Переменные:** +- `COLOR_RESET` - сброс цвета +- `COLOR_INFO` - синий цвет для информации +- `COLOR_OK` - зелёный цвет для успеха +- `COLOR_ERR` - красный цвет для ошибок +- `COLOR_WARN` - жёлтый цвет для предупреждений + +**Отключение цветов (для CI):** +```bash +COLOR_RESET= COLOR_INFO= COLOR_OK= COLOR_ERR= COLOR_WARN= +``` diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..ba3e2ff --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,351 @@ +# 🐛 Решение проблем + +## Частые ошибки + +### 1. "missing separator. Stop." +**Причина:** В Makefile используются пробелы вместо табов. + +**Решение:** +```bash +sed -i 's/^ /\t/' makefile +``` + +### 2. "docker: command not found" +**Причина:** Docker не установлен или не в PATH. + +**Решение:** +```bash +# Установка Docker +curl -fsSL https://get.docker.com -o get-docker.sh +sh get-docker.sh + +# Проверка +docker version +``` + +### 3. "unauthorized: authentication required" +**Причина:** Не выполнена авторизация в registry. + +**Решение:** +```bash +make docker login REGISTRY=hub.cism-ms.ru +# или +docker login hub.cism-ms.ru +``` + +### 4. "No rule to make target 'commit'" +**Причина:** Использование старых команд без префикса группы. + +**Решение:** +```bash +# Вместо: make commit +# Используйте: make git commit +``` + +### 5. "Образ не найден" +**Причина:** Указан неверный SRC_IMAGE или IMAGE не собран. + +**Решение:** +```bash +# Проверка существующих образов +docker images + +# Сборка образа +make docker build IMAGE=myapp TAG=latest +``` + +### 6. "Buildx: no builder instance" +**Причина:** Buildx не инициализирован. + +**Решение:** +```bash +# Создание builder'а +make docker create-builder + +# Использование builder'а +make docker use-builder +``` + +## Отладка + +### Просмотр конфигурации +```bash +# Показать конфигурацию +make docker print-config + +# Проверить образ +make docker inspect + +# Просмотр логов +make docker build 2>&1 | tee build.log + +# Проверка Docker daemon +docker info + +# Проверка доступных образов +docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" +``` + +## Проблемы с памятью + +### Увеличение лимита памяти для Docker +```bash +# В /etc/docker/daemon.json +{ + "default-ulimits": { + "memlock": { + "Hard": -1, + "Name": "memlock", + "Soft": -1 + } + } +} +``` + +### Очистка неиспользуемых ресурсов +```bash +# Очистка неиспользуемых образов +docker image prune -f + +# Очистка неиспользуемых контейнеров +docker container prune -f + +# Полная очистка системы +docker system prune -a -f +``` + +## Проблемы с сетью + +### Проверка сетевых настроек +```bash +# Проверка сетевых интерфейсов +docker network ls +docker network inspect bridge + +# Тестирование подключения +make docker check RUN_CMD="ping -c 3 8.8.8.8" + +# Проверка DNS +make docker check RUN_CMD="nslookup google.com" +``` + +### Настройка прокси +```bash +# Настройка прокси для Docker +mkdir -p /etc/systemd/system/docker.service.d +cat > /etc/systemd/system/docker.service.d/http-proxy.conf << EOF +[Service] +Environment="HTTP_PROXY=http://proxy.example.com:8080" +Environment="HTTPS_PROXY=http://proxy.example.com:8080" +Environment="NO_PROXY=localhost,127.0.0.1" +EOF + +sudo systemctl daemon-reload +sudo systemctl restart docker +``` + +## Проблемы с правами доступа + +### Исправление прав на файлы +```bash +# Исправление прав на Makefile +chmod +x makefile +chmod 644 dockerfile + +# Проверка прав пользователя +make docker check RUN_CMD="id && whoami" + +# Добавление пользователя в группу docker +sudo usermod -aG docker $USER +newgrp docker +``` + +### Проблемы с SELinux (CentOS/RHEL) +```bash +# Временное отключение SELinux +sudo setenforce 0 + +# Постоянное отключение SELinux +sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config +sudo reboot +``` + +## Проблемы с производительностью + +### Медленная сборка +```bash +# Сборка с подробным выводом +make docker build IMAGE=myapp TAG=v1.0.0 QUIET=0 + +# Анализ времени сборки +time make docker build IMAGE=myapp TAG=v1.0.0 + +# Сборка без кэша для диагностики +make docker build IMAGE=myapp TAG=v1.0.0 NO_CACHE=1 +``` + +### Большой размер образа +```bash +# Анализ размера образа +docker history myapp:latest + +# Анализ слоев +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + wagoodman/dive:latest myapp:latest + +# Сжатие образа +make docker save SRC_IMAGE=myapp:latest COMPRESS=1 +``` + +## Проблемы с registry + +### Ошибки авторизации +```bash +# Очистка кэша авторизации +docker logout +docker login + +# Проверка конфигурации Docker +cat ~/.docker/config.json + +# Удаление старых токенов +rm -rf ~/.docker/config.json +docker login +``` + +### Проблемы с SSL сертификатами +```bash +# Добавление недоверенного registry +echo '{"insecure-registries":["registry.example.com:5000"]}' | sudo tee /etc/docker/daemon.json + +# Перезапуск Docker +sudo systemctl restart docker +``` + +## Проблемы с Git + +### "Not a git repository" +```bash +# Инициализация Git репозитория +git init +git remote add origin + +# Проверка статуса +make git status +``` + +### "Git push failed" +```bash +# Проверка текущей ветки +git branch + +# Проверка удаленного репозитория +git remote -v + +# Принудительный push (осторожно!) +git push --force-with-lease origin main +``` + +## Проблемы с архивами + +### Ошибка при загрузке архива +```bash +# Проверка целостности архива +sha256sum -c images/myapp_v1.0.0.tar.gz.sha256 + +# Проверка размера файла +ls -lh images/myapp_v1.0.0.tar.gz + +# Пересоздание архива +make docker save SRC_IMAGE=myapp:latest COMPRESS=1 +``` + +### Проблемы с разбиением на части +```bash +# Объединение частей архива +cat images/myapp_v1.0.0.tar.gz.part.* > images/myapp_v1.0.0.tar.gz + +# Проверка целостности +sha256sum -c images/myapp_v1.0.0.tar.gz.sha256 +``` + +## Диагностические команды + +### Проверка системы +```bash +# Информация о системе +uname -a +cat /etc/os-release + +# Информация о Docker +docker version +docker info + +# Информация о Make +make --version + +# Информация о Git +git --version +``` + +### Проверка ресурсов +```bash +# Использование диска +df -h + +# Использование памяти +free -h + +# Использование CPU +top -n 1 + +# Процессы Docker +ps aux | grep docker +``` + +### Логи системы +```bash +# Логи Docker +sudo journalctl -u docker.service + +# Логи системы +sudo journalctl -f + +# Логи сборки +tail -f logs/build_*.log +``` + +## Получение помощи + +### Сбор информации для отчета об ошибке +```bash +# Создание отчета об ошибке +{ + echo "=== System Info ===" + uname -a + cat /etc/os-release + + echo -e "\n=== Docker Info ===" + docker version + docker info + + echo -e "\n=== Make Info ===" + make --version + + echo -e "\n=== Git Info ===" + git --version + + echo -e "\n=== Project Config ===" + make docker print-config + + echo -e "\n=== Recent Logs ===" + tail -20 logs/build_*.log 2>/dev/null || echo "No logs found" +} > bug_report.txt +``` + +### Полезные ресурсы +- [Docker Documentation](https://docs.docker.com/) +- [Make Documentation](https://www.gnu.org/software/make/manual/) +- [Git Documentation](https://git-scm.com/doc) +- [Stack Overflow](https://stackoverflow.com/questions/tagged/docker) diff --git a/readme.txt b/readme.txt deleted file mode 100644 index 1f7be25..0000000 --- a/readme.txt +++ /dev/null @@ -1,403 +0,0 @@ -========================================================= -UNIVERSAL MAKEFILE FOR DOCKER AND GIT -========================================================= - -Автор: Sergey Antropov -Версия: 2.0 -Описание: Универсальный Makefile для управления Docker-образами, -их сборкой, сохранением, загрузкой, публикацией, а также -интеграцией с Git. - -========================================================= -РАЗДЕЛ 1. ОБЩЕЕ ОПИСАНИЕ -========================================================= - -Makefile предназначен для автоматизации типовых задач DevOps: -- сборка Docker-образов (включая Buildx) -- сохранение и загрузка архивов образов (save/load) -- оффлайн публикация (ретег и push) -- логирование всех операций -- Git-команды (commit, push, pull, sync) -- быстрая проверка сборки через RUN_CMD - -Все сценарии универсальны, не требуют внешних зависимостей -кроме установленного Docker и Git. - -========================================================= -РАЗДЕЛ 2. ОСНОВНЫЕ КОМАНДЫ -========================================================= - -Формат вызова: - make <группа> <действие> [переменные] - ---------------------------------------------------------- -ГРУППА: docker ---------------------------------------------------------- -make docker build - Собрать Docker-образ. - Примеры: - make docker build IMAGE=myapp TAG=latest - make docker build NO_CACHE=1 - make docker build USE_BUILDX=1 PLATFORMS="linux/amd64,linux/arm64" - -make docker check - Проверить образ, запустив RUN_CMD внутри контейнера. - Пример: - make docker check RUN_CMD="java -version" - -make docker push - Собрать, проверить и отправить образ в registry. - Пример: - make docker push IMAGE=myapp TAG=v1.0 - -make docker login - Авторизация в Docker Registry. - Пример: - make docker login REGISTRY=hub.cism-ms.ru - -make docker save - Сохранить локальный образ в архив (tar или tar.gz). - Поддерживает разбиение на части. - Пример: - make docker save SRC_IMAGE=myapp:latest COMPRESS=1 SPLIT_SIZE=2G - -make docker load - Загрузить архив, ретегнуть и (опционально) запушить. - Пример: - make docker load ARCHIVE=images/myapp.tar LOGIN=1 PUSH_OFFLINE=1 - -make docker retag - Перетегировать образ. - Пример: - make docker retag NEW_TAG=v2.0 - -make docker inspect - Просмотреть метаданные Docker-образа. - -make docker clean - Очистить временные каталоги logs/ и .offline/. - -make docker print-config - Показать текущие значения всех переменных. - -make docker create-builder - Создать buildx builder для мультиплатформенной сборки. - -make docker use-builder - Активировать ранее созданный builder. - ---------------------------------------------------------- -ГРУППА: git ---------------------------------------------------------- -make git status - Показать текущее состояние репозитория. - -make git pull - Получить последние изменения из origin. - -make git commit - Добавить и закоммитить изменения. - Если GIT_MSG не задана — запросит ввод вручную. - -make git push - Создать коммит (если есть изменения) и отправить в origin. - -make git sync - Выполнить pull, commit и push последовательно. - -========================================================= -РАЗДЕЛ 3. ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ (ПОДРОБНО) -========================================================= - -Любая переменная может быть переопределена при вызове make: - make docker build IMAGE=myapp TAG=v1.0 NO_CACHE=1 - ---------------------------------------------------------- -DOCKER-ПЕРЕМЕННЫЕ ---------------------------------------------------------- - -REGISTRY - Адрес Docker Registry без протокола. - Пример: hub.cism-ms.ru/library - -IMAGE - Имя Docker-образа (обязательное поле при сборке). - -TAG - Тег образа. По умолчанию: latest. - -CONTEXT - Папка контекста сборки. По умолчанию — текущая директория. - -DOCKERFILE - Имя Dockerfile, используемого при сборке. - -USE_BUILDX - 1 — использовать Docker Buildx (для мультиплатформенной сборки). - 0 — обычный docker build. - -PLATFORMS - Целевые платформы для buildx. Пример: linux/amd64,linux/arm64. - -PUSH - 1 — выполнить docker push после buildx. - 0 — не выполнять. - -LOAD - 1 — загрузить образ в локальный docker после сборки. - 0 — не загружать (актуально для CI/CD). - -NO_CACHE - 1 — сборка без кэша. - 0 — использовать кэш. - -PULL - 1 — принудительно обновить базовые образы. - 0 — использовать локальные. - -QUIET - 1 — минимальный вывод в консоль. - 0 — стандартный. - -BUILD_ARGS - Дополнительные аргументы docker build. - Пример: BUILD_ARGS="--build-arg VERSION=1.0 --build-arg DEBUG=1" - -ARG_FILE - Путь к файлу KEY=VALUE. Все пары превращаются в --build-arg KEY=VALUE. - -RUN_CMD - Команда для проверки контейнера после сборки. - По умолчанию: lsb_release -a - -BUILDER - Имя buildx builder'а (по умолчанию universal-builder). - -LOG_DIR - Каталог для логов сборок (по умолчанию logs/). - -LOG_FILE - Файл лога, формируется автоматически с датой и временем. - ---------------------------------------------------------- -ОФФЛАЙН-ПЕРЕМЕННЫЕ (SAVE / LOAD) ---------------------------------------------------------- - -ARCHIVE - Путь к архиву образа (tar или gz). - -LOGIN - 1 — выполнить docker login перед push. - 0 — пропустить. - -PUSH_OFFLINE - 1 — выполнить docker push после загрузки архива. - 0 — только загрузить. - -KEEP_SRC_TAG - 1 — использовать тег из архива. - 0 — использовать TAG из Makefile. - -IMAGES_DIR - Каталог для сохранения архивов Docker-образов (по умолчанию images/). - -OFFLINE_DIR - Временная служебная папка (.offline). - -SRC_IMAGE - Имя исходного образа для сохранения. - -COMPRESS - 1 — сжать gzip. - 0 — оставить tar. - -SPLIT_SIZE - Размер чанка для split (например 2G). - -LAST_SAVE - Путь к последнему сохранённому архиву. - ---------------------------------------------------------- -GIT-ПЕРЕМЕННЫЕ ---------------------------------------------------------- - -GIT_REMOTE - Имя удалённого репозитория (по умолчанию origin). - -GIT_BRANCH - Текущая ветка (определяется автоматически). - -GIT_MSG - Сообщение коммита. Если не задано — будет запрошено вручную. - ---------------------------------------------------------- -ПРОЧИЕ ---------------------------------------------------------- - -FULL_IMAGE - Полное имя образа REGISTRY/IMAGE:TAG (формируется автоматически). - -Цвета (COLOR_INFO, COLOR_OK, COLOR_ERR, COLOR_WARN) - ANSI-коды для форматирования вывода. - Можно обнулить, чтобы отключить цвет в CI. - -========================================================= -РАЗДЕЛ 4. ПРИМЕРЫ -========================================================= - -1. Сборка без кэша: - make docker build NO_CACHE=1 - -2. Сборка и пуш мультиплатформенного образа: - make docker build USE_BUILDX=1 PUSH=1 LOAD=0 PLATFORMS="linux/amd64,linux/arm64" - -3. Проверка образа: - make docker check RUN_CMD="java -version" - -4. Сохранение и сжатие: - make docker save SRC_IMAGE=myapp:latest COMPRESS=1 - -5. Загрузка и пуш: - make docker load ARCHIVE=images/myapp.tar LOGIN=1 PUSH_OFFLINE=1 - -6. Коммит и пуш в git: - make git push GIT_MSG="Обновлены зависимости" - -7. Быстрое обновление ветки: - make git sync - -========================================================= -РАЗДЕЛ 5. ВОЗМОЖНЫЕ ПРОБЛЕМЫ И РЕШЕНИЯ -========================================================= - ---------------------------------------------------------- -1. Ошибка: "missing separator. Stop." ---------------------------------------------------------- -Причина: - В Makefile должны быть табы, а не пробелы. - -Решение: - Преобразовать пробелы в табы: - sed -i 's/^ /\t/' Makefile - ---------------------------------------------------------- -2. Ошибка: "unknown instruction: yum (did you mean RUN?)" ---------------------------------------------------------- -Причина: - В Dockerfile после инструкции `RUN < - ---------------------------------------------------------- -5. Ошибка: "docker: command not found" ---------------------------------------------------------- -Причина: - Docker не установлен или не добавлен в PATH. - -Решение: - Установи Docker и проверь: - docker version - ---------------------------------------------------------- -6. Ошибка при push: "unauthorized: authentication required" ---------------------------------------------------------- -Причина: - Не выполнен docker login в registry. - -Решение: - Выполни: - make docker login REGISTRY=hub.cism-ms.ru - или авторизуйся вручную: - docker login hub.cism-ms.ru - ---------------------------------------------------------- -7. Ошибка: "Образ не найден" ---------------------------------------------------------- -Причина: - Указан неверный SRC_IMAGE или IMAGE не собран. - -Решение: - Убедись, что образ существует: - docker images - Или собери его: - make docker build - ---------------------------------------------------------- -8. Ошибка checksum при загрузке архива ---------------------------------------------------------- -Причина: - Повреждён файл tar.gz. - -Решение: - Проверить хеш-сумму: - sha256sum images/*.sha256 - Пересобрать архив: - make docker save SRC_IMAGE=myapp:latest COMPRESS=1 - ---------------------------------------------------------- -9. Ошибка "Git push failed" ---------------------------------------------------------- -Причина: - Нет прав на запись в репозиторий или неверная ветка. - -Решение: - Проверь текущую ветку: - git branch - Выполни повторно push: - make git push GIT_MSG="Обновление" - ---------------------------------------------------------- -10. Ошибка Buildx: "no builder instance" ---------------------------------------------------------- -Причина: - Buildx не инициализирован. - -Решение: - Создай builder: - make docker create-builder - Затем используй: - make docker use-builder - -========================================================= -РАЗДЕЛ 6. СОВЕТЫ ПО ИСПОЛЬЗОВАНИЮ -========================================================= - -- Всегда задавай REGISTRY и IMAGE при сборке. -- Для CI/CD добавь NO_CACHE=1 и QUIET=1. -- Для оффлайн-деплоя используй SAVE/LOAD. -- Git-команды можно вызывать без аргументов — Makefile запросит сообщение сам. -- Если часто работаешь с конкретными параметрами — создай файл `.env` или `Makefile.local`. - -========================================================= - ЛИЦЕНЗИЯ -========================================================= - - MIT License - Свободно для использования в любых проектах. - -=========================================================