По умолчанию данные внутри контейнера не сохраняются — удалил контейнер, данные пропали. Volumes решают эту проблему.
Три способа монтирования
1. Named Volume (рекомендуется для данных)
Docker сам управляет хранилищем. Данные переживают удаление контейнера.
docker run -v postgres_data:/var/lib/postgresql/data postgres
В docker-compose.yml:
services:
db:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data: # объявляем volume
2. Bind Mount (рекомендуется для разработки)
Монтируешь папку с хоста в контейнер. Изменения в любую сторону видны сразу.
docker run -v /path/on/host:/path/in/container myapp
docker run -v $(pwd):/app myapp # текущая папка
docker run -v ./src:/app/src myapp # относительный путь
В docker-compose.yml:
services:
web:
volumes:
- ./src:/app/src # для live reload в разработке
- ./static:/app/static
3. tmpfs (только для Linux)
Данные в памяти, не на диске. Для временных данных.
docker run --tmpfs /tmp myapp
Управление volumes
docker volume ls # список volumes
docker volume inspect postgres_data # информация о volume
docker volume rm postgres_data # удалить volume
docker volume prune # удалить неиспользуемые
Когда что использовать
| Тип | Когда использовать |
|---|---|
| Named volume | Данные БД, uploads, постоянные данные |
| Bind mount | Разработка — hot reload кода, конфиги |
| tmpfs | Кэш, сессии, чувствительные данные |
Паттерн для разработки
Монтируй код как bind mount, зависимости — как named volume:
services:
web:
build: .
volumes:
- .:/app # код — bind mount для hot reload
- /app/.venv # изолируем .venv в volume
Без второй строки .venv с хоста перекроет .venv из образа.
Бэкап volume
# Создать бэкап volume в tar архив
docker run --rm -v postgres_data:/data -v $(pwd):/backup \
ubuntu tar czf /backup/backup.tar.gz /data
# Восстановить
docker run --rm -v postgres_data:/data -v $(pwd):/backup \
ubuntu tar xzf /backup/backup.tar.gz -C /
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!