Улучшения Docker: обновить до Python 3.14, оптимизировать COPY, добавить healthcheck и ARG для версии Python
This commit is contained in:
parent
8cd1e48ede
commit
7bfb96c31d
16
Dockerfile
16
Dockerfile
@ -1,4 +1,5 @@
|
||||
FROM python:3.12-slim
|
||||
ARG PYTHON_VERSION=3.14
|
||||
FROM python:${PYTHON_VERSION}-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
@ -6,8 +7,17 @@ WORKDIR /app
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# Копируем весь проект
|
||||
COPY . .
|
||||
# Копируем только нужные файлы (оптимизация размера образа)
|
||||
COPY bot.py .
|
||||
COPY commands/ commands/
|
||||
COPY utils/ utils/
|
||||
|
||||
# Копируем .env, если он есть (или передавать переменные через docker-compose)
|
||||
COPY .env* .env 2>/dev/null || echo "No .env file - use docker-compose environment variables"
|
||||
|
||||
# Healthcheck: проверяем, что бот запущен
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
CMD python -c "import discord; print('Bot is running')" || exit 1
|
||||
|
||||
# Запускаем бота
|
||||
CMD ["python", "bot.py"]
|
||||
|
||||
71
docker-audit.md
Normal file
71
docker-audit.md
Normal file
@ -0,0 +1,71 @@
|
||||
# Docker Audit — Discord Bot
|
||||
|
||||
## ✅ Что уже есть
|
||||
|
||||
| Файл | Статус |
|
||||
|--------------------|---------|
|
||||
| Dockerfile | ✅ Есть |
|
||||
| docker-compose.yml | ✅ Есть |
|
||||
| .dockerignore | ✅ Есть |
|
||||
| requirements.txt | ✅ Есть |
|
||||
| .env.example | ✅ Есть |
|
||||
|
||||
## ⚠️ Что можно улучшить
|
||||
|
||||
### 1. Dockerfile копирует весь проект целиком
|
||||
Включая тесты, `console_commands/`, `.git`, `.pytest_cache` и прочее.
|
||||
Стоит копировать только нужное: `bot.py`, `commands/`, `utils/`.
|
||||
|
||||
### 2. Версия Python
|
||||
Dockerfile использует `python:3.12-slim`, но локально Python 3.14.
|
||||
Discord.py 2.3.2+ поддерживает 3.12+, но стоит убедиться, что зависимости совместимы.
|
||||
Обновить базовый образ до `python:3.14-slim`.
|
||||
|
||||
### 3. Нет .env в контейнере
|
||||
docker-compose передаёт переменные через `environment:`, это работает,
|
||||
но бот при запуске читает `.env` через `python-dotenv`.
|
||||
Если запустить контейнер без `.env` на хосте, `DISCORD_TOKEN` не подтянется.
|
||||
Решение: копировать `.env` в образ или убедиться, что `environment:` в compose передаёт все нужные переменные.
|
||||
|
||||
### 4. Нет healthcheck
|
||||
Нет способа проверить, жив ли бот через Docker.
|
||||
|
||||
### 5. Нет ARG для тега образа
|
||||
Нет возможности указать версию Python при сборке.
|
||||
|
||||
---
|
||||
|
||||
## 📋 План улучшений
|
||||
|
||||
### 1. Dockerfile
|
||||
- Обновить базовый образ до `python:3.14-slim`
|
||||
- Добавить `ARG PYTHON_VERSION` для гибкости
|
||||
- Оптимизировать COPY: копировать только `bot.py`, `commands/`, `utils/`
|
||||
- Добавить `.env` в образ (или убедиться, что env vars передаются корректно)
|
||||
- Добавить healthcheck
|
||||
- Добавить `.dockerenv` или аналог для предотвращения копирования лишних файлов
|
||||
|
||||
### 2. docker-compose.yml
|
||||
- Добавить healthcheck для сервиса бота
|
||||
- Добавить volumes для логов
|
||||
- Убедиться, что все переменные из `.env` передаются в контейнер
|
||||
- Добавить restart policy
|
||||
|
||||
### 3. .dockerignore
|
||||
- Добавить `.vscode/`
|
||||
- Добавить `__pycache__/` (уже есть, проверить)
|
||||
- Добавить `.pytest_cache/`
|
||||
- Добавить `node_modules/`
|
||||
- Добавить `*.pyc`
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Приоритет
|
||||
|
||||
| Приоритет | Изменение | Почему |
|
||||
|-----------|-----------|--------|
|
||||
| 🔴 Высокий | Оптимизировать COPY | Уменьшает размер образа, ускоряет сборку |
|
||||
| 🔴 Высокий | Добавить healthcheck | Мониторинг состояния бота |
|
||||
| 🟡 Средний | Обновить Python до 3.14 | Актуальность, но не критично |
|
||||
| 🟡 Средний | Добавить volumes для логов | Удобство отладки |
|
||||
| 🟢 Низкий | Добавить ARG для тега | Удобство, но не обязательно |
|
||||
Loading…
x
Reference in New Issue
Block a user