LinuxNotes
← Все статьи

Docker volumes: данные за пределами контейнера

Создаём именованный том и проверяем, что файл сохраняется после пересоздания контейнера.

Серверы и Docker3 мин чтения

Что проверяем

Контейнеры можно удалять и создавать заново. Данные, которые должны пережить этот цикл, выносят в том или bind mount. Предполагается уже установленный Docker Engine с Compose и работающей службой. Команды запускайте из отдельного тестового каталога в Bash.

mkdir -p ~/volume-demo
cd ~/volume-demo

В примере нет базы данных и публичных портов. Он создаёт только учебный файл.

Описание тома

Сохраните compose.yaml:

services:
  toolbox:
    image: alpine:3.22
    command: ["sleep", "infinity"]
    volumes:
      - notes-data:/data

volumes:
  notes-data:

Compose создаст именованный том с префиксом проекта и подключит его к /data. Это отдельное хранилище Docker, а не каталог, который следует редактировать вручную внутри /var/lib/docker.

Запись файла

sudo docker compose config
sudo docker compose up -d
sudo docker compose exec toolbox sh -c 'printf "%s
" "persistent note" > /data/note.txt'
sudo docker compose exec toolbox cat /data/note.txt

Проверка config помогает заметить ошибки YAML до запуска. Вывод cat должен содержать строку persistent note. Команда sh выполняется внутри контейнера; перенаправление относится к его файлу, а не к хосту.

Пересоздание контейнера

sudo docker compose down
sudo docker compose up -d
sudo docker compose exec toolbox cat /data/note.txt

Обычный down удаляет контейнер и сеть, сохраняя именованный том. Если имя проекта и Compose-файл остались прежними, после запуска файл будет доступен снова. Изменение каталога проекта или параметра -p может создать другой том, что иногда выглядит как потеря данных.

Не используйте docker compose down -v для проекта с нужными данными: этот флаг удаляет объявленные именованные тома и подключённые анонимные тома, если они не external.

Резервная копия и ограничения

Том на том же диске не является резервной копией. Для приложений с активной записью используйте штатный дамп или остановку записи, затем сохраняйте копию на другой носитель. Простое архивирование работающей базы может дать несогласованные данные.

После учебного примера остановите контейнер через down. Том останется и будет занимать место, пока вы осознанно не удалите его. Не запускайте глобальную очистку томов без просмотра списка и копии важных данных.

Начало: первые контейнеры с Compose.

Документация: Compose volumes.

Читайте дальше