369 lines
10 KiB
Markdown
369 lines
10 KiB
Markdown
# ❓ 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
|
||
```
|