Files
Dockerfile/docs/faq.md

369 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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

# ❓ FAQ (Часто задаваемые вопросы)
## Общие вопросы
### Q: Как использовать Makefile в Windows?
**A:** Установите WSL2 или используйте Git Bash:
```bash
# В Git Bash
make docker build IMAGE=myapp TAG1=latest TAG2=v1.0.0
# Или через WSL2
wsl make docker build IMAGE=myapp TAG1=latest TAG2=v1.0.0
```
### 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 TAG1=$(git rev-parse --short HEAD)
```
### Q: Можно ли использовать с Kubernetes?
**A:** Да, после сборки образа:
```bash
# Сборка образа
make docker build IMAGE=myapp TAG1=v1.0.0
# Применение в Kubernetes
kubectl apply -f k8s/
```
### Q: Как оптимизировать время сборки?
**A:** Используйте кэширование и .dockerignore:
```bash
# Сборка с кэшем
make docker build IMAGE=myapp TAG1=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 \
TAG1=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
```