📝 Python

Docker Volumes: сохраняем данные

0
Author
04e5cc8b-58ac-4bdc-bdee-661bbb
📅
Published
08.05.2026
⏱️
Reading time
1 min
👁️
Views
20
🌱
Level
Beginner

По умолчанию данные внутри контейнера не сохраняются — удалил контейнер, данные пропали. 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 /

Your reaction to the article

💬 Comments (0)

🔐 Sign in to leave a comment
🚪 Login
💭

No comments yet

Be the first to share your opinion about this article!

🔗 Similar

Similar articles

Continue learning with these materials

📝

Модуль datetime: работа с датами и временем

datetime — стандартный модуль Python для работы с датами и временем. Входит в стандартную библиотеку,...

📅 08.05.2026 👁️ 30
📝

.env файлы и переменные окружения: секреты вне ко…

Представь что ты написал программу с API-ключом прямо в коде и залил её на GitHub....

📅 08.05.2026 👁️ 34
📝

Виртуальные окружения в Python: зачем и как

Когда начинаешь второй Python-проект и ставишь pip install requests — эта библиотека устанавливается глобально, для...

📅 08.05.2026 👁️ 31

Did you like the article?

Subscribe to our updates and receive new articles first. Grow with PyLand!