Переписана документация
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