type: standard
aspect: policy
title: "Docker Policy — Политика управления образами и данными"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2025-12-24
Docker образ = шаблон для контейнера (как установочный ISO).
┌──────────────────────────────────────────────────┐
│ ОБРАЗ (template) │
│ postgres:15-alpine │
│ Размер: 273MB │
│ Хранится: /var/lib/docker/overlay2/ │
└──────────────────────────────────────────────────┘
↓ docker run
┌──────────────────────────────────────────────────┐
│ КОНТЕЙНЕР (running instance) │
│ pirofey-db │
│ Использует образ: postgres:15-alpine │
│ Данные: в volume (может быть на S3) │
└──────────────────────────────────────────────────┘
Аналогия:
- Образ = установочный Windows ISO
- Контейнер = запущенная Windows
- Volume = диск C:\ с данными
| Что | Где | Почему |
|---|---|---|
| Образы | /var/lib/docker/ |
Системный кэш, нельзя перемещать |
| Конфигурация | $WORKSPACE |
Под git (docker-compose.yaml) |
| Данные | $DATASPACE |
S3/volumes (базы, файлы) |
ПРАВИЛО: Образы = КЭШ (как npm/pip кэш), их нельзя переместить.
# Было:
docker pull postgres:14
docker run postgres:14 # контейнер работает
# Обновление:
docker pull postgres:15
docker run postgres:15 # новый контейнер
# Старый образ postgres:14 остался!
# Занимает 273MB, но НЕ используется
docker images # 13 образов
docker ps # 11 контейнеров
# → 2 образа лишние
Когда: Каждую неделю (cron)
Что: Только dangling образы (без тегов)
docker image prune -f
Освобождает: 100-500MB
Риск: Нет (удаляет мусор)
Когда: Диск > 85%
Что: Неиспользуемые образы с тегами
docker image prune -a -f
Освобождает: 2-6GB
Риск: Если образ понадобится — нужно качать заново (5-10 мин)
Когда: Критический дефицит места
Что: Всё что можно + volumes
docker system prune -a --volumes -f
Освобождает: 5-10GB
Риск: ВЫСОКИЙ — может удалить данные volumes!
✅ ХОРОШО:
postgres:15-alpine (используется)
postgres:14-alpine (резервная версия)
❌ ПЛОХО:
postgres:15-alpine
postgres:14-alpine
postgres:13-alpine ← удалить
postgres:12-alpine ← удалить
# После обновления pirofey-v1 → pirofey-v2:
docker rmi docker-v1 # удалить старый образ
# ❌ ПЛОХО (образ без тега = мусор)
docker build .
# ✅ ХОРОШО
docker build -t pirofey:v2 .
# /etc/cron.weekly/docker-cleanup
0 3 * * 0 docker image prune -f >> /var/log/docker-cleanup.log 2>&1
Уже реализовано в system/monitor/auto_cleanup.sh:
if [ "$DISK_USAGE" -ge 90 ]; then
docker image prune -a -f
docker volume prune -f
fi
| Что | Где | Пример |
|---|---|---|
| Volumes | $DATASPACE/docker/volumes/ |
Базы данных |
| Бэкапы | $DATASPACE/backups/ |
Дампы БД |
| Логи | $DATASPACE/logs/ |
Старые логи |
Docker Compose пример:
services:
db:
image: postgres:15-alpine # Образ → /var/lib/docker
volumes:
- $DATASPACE/docker/volumes/pirofey-db:/var/lib/postgresql/data # Данные → S3
# Занятое место
docker system df
# Список образов
docker images
# Неиспользуемые образы
docker images --filter "dangling=true"
# Что используется
docker ps --format "{{.Image}}" | sort -u
# Оценка очистки
docker system df -v
Версия: 1.0.0