Переписана документация
This commit is contained in:
202
README.md
Normal file
202
README.md
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
# Universal Docker & Git Management Project
|
||||||
|
|
||||||
|
[](https://opensource.org/licenses/MIT)
|
||||||
|
[](https://www.docker.com/)
|
||||||
|
[](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 <repository-url>
|
||||||
|
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
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**⭐ Если проект был полезен, поставьте звезду!**
|
||||||
122
docs/README.md
Normal file
122
docs/README.md
Normal file
@@ -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)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Спасибо за использование нашего проекта! 🚀**
|
||||||
353
docs/best-practices.md
Normal file
353
docs/best-practices.md
Normal file
@@ -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 <devops@devops.org.ru>" \
|
||||||
|
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
|
||||||
|
```
|
||||||
222
docs/dockerfile.md
Normal file
222
docs/dockerfile.md
Normal file
@@ -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 <devops@devops.org.ru>"
|
||||||
|
|
||||||
|
# Настройки окружения
|
||||||
|
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
|
||||||
|
```
|
||||||
346
docs/examples.md
Normal file
346
docs/examples.md
Normal file
@@ -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
|
||||||
|
```
|
||||||
368
docs/faq.md
Normal file
368
docs/faq.md
Normal file
@@ -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
|
||||||
|
```
|
||||||
196
docs/installation.md
Normal file
196
docs/installation.md
Normal file
@@ -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 <repository-url>
|
||||||
|
cd Dockerfile
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Проверьте Makefile:**
|
||||||
|
```bash
|
||||||
|
make help
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Проверьте Docker:**
|
||||||
|
```bash
|
||||||
|
make docker print-config
|
||||||
|
```
|
||||||
368
docs/makefile.md
Normal file
368
docs/makefile.md
Normal file
@@ -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=
|
||||||
|
```
|
||||||
351
docs/troubleshooting.md
Normal file
351
docs/troubleshooting.md
Normal file
@@ -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 <url>
|
||||||
|
|
||||||
|
# Проверка статуса
|
||||||
|
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)
|
||||||
403
readme.txt
403
readme.txt
@@ -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 <<EOF` забыта команда RUN.
|
|
||||||
|
|
||||||
Решение:
|
|
||||||
Убедись, что после каждой строки в Dockerfile используется RUN
|
|
||||||
или символ обратной косой черты `\` при переносе строк.
|
|
||||||
|
|
||||||
---------------------------------------------------------
|
|
||||||
3. Ошибка: "No rule to make target 'commit'"
|
|
||||||
---------------------------------------------------------
|
|
||||||
Причина:
|
|
||||||
Старые вызовы команд без указания группы git (например, `make commit`).
|
|
||||||
|
|
||||||
Решение:
|
|
||||||
Используй новую структуру:
|
|
||||||
make git commit
|
|
||||||
или
|
|
||||||
make git push
|
|
||||||
|
|
||||||
---------------------------------------------------------
|
|
||||||
4. Ошибка: "Not a git repository"
|
|
||||||
---------------------------------------------------------
|
|
||||||
Причина:
|
|
||||||
Текущая папка не является Git-репозиторием.
|
|
||||||
|
|
||||||
Решение:
|
|
||||||
Инициализируй git:
|
|
||||||
git init
|
|
||||||
git remote add origin <url>
|
|
||||||
|
|
||||||
---------------------------------------------------------
|
|
||||||
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
|
|
||||||
Свободно для использования в любых проектах.
|
|
||||||
|
|
||||||
=========================================================
|
|
||||||
Reference in New Issue
Block a user