Основное руководство по командам управления томами Docker

Изучите команды Docker для работы с томами: создание, список, просмотр, монтирование, резервное копирование, удаление и очистка постоянных данных.

Основное руководство по командам управления томами Docker

Команды управления томами Docker становятся важными, как только ваш контейнер начинает записывать данные, которые вам небезразличны. Записываемый слой контейнера исчезает при его удалении, но том Docker может сохранять файлы баз данных, загрузки, кэш или состояние приложения при пересборке контейнеров.

Это руководство показывает основные команды docker volume, как подключать тома к контейнерам и где команды очистки могут вас удивить.

Что такое тома Docker?

Тома Docker — это управляемые Docker объекты хранения. Они находятся вне записываемого слоя контейнера, обычно в управляемом Docker месте на хосте при использовании драйвера local по умолчанию. Именованный том остается доступным после остановки, удаления или пересоздания контейнера, который его использовал.

Тома полезны, потому что они обеспечивают:

  • Постоянство: Данные сохраняются при замене контейнера.
  • Изоляцию: Данные приложения отделены от образа и записываемого слоя.
  • Поддержку драйверов: Драйверы томов могут использовать локальные диски, сетевое хранилище или специфические для платформы бэкенды.
  • Операционную ясность: Именованные тома легче просматривать, резервировать и повторно использовать, чем анонимные слои контейнеров.

Основные команды docker volume

Команда docker volume — это основной интерфейс для создания, просмотра, проверки и удаления томов.

docker volume create

Создать именованный том:

docker volume create my-app-data

Создать том с автоматически сгенерированным именем:

docker volume create

Также можно передать параметры драйвера при использовании нестандартной настройки:

docker volume create --driver local my-app-data

docker volume ls

Список томов:

docker volume ls

Показать только имена:

docker volume ls -q

Отфильтровать висящие тома:

docker volume ls --filter dangling=true

dangling=true означает, что Docker не видит том как используемый контейнером. Это не означает, что данные не важны.

docker volume inspect

Просмотреть том:

docker volume inspect my-app-data

Для локального тома вывод выглядит примерно так:

[
  {
    "CreatedAt": "2026-05-23T10:00:00Z",
    "Driver": "local",
    "Labels": null,
    "Mountpoint": "/var/lib/docker/volumes/my-app-data/_data",
    "Name": "my-app-data",
    "Options": null,
    "Scope": "local"
  }
]

Mountpoint полезен для диагностики, но избегайте редактирования файлов там напрямую, пока контейнеры используют том. Позвольте приложению или управляемому контейнеру обслуживания записывать данные.

docker volume rm

Удалить один или несколько томов:

docker volume rm my-app-data

Docker не удалит том, пока на него ссылается какой-либо контейнер, даже если этот контейнер остановлен. Найдите и удалите эти контейнеры сначала:

docker ps -a --filter volume=my-app-data
docker rm <имя-или-id-контейнера>
docker volume rm my-app-data

Эта команда удаляет данные тома. Сделайте резервную копию, если данные важны.

docker volume prune

Очистка удаляет неиспользуемые локальные тома. В текущих версиях Docker docker volume prune по умолчанию удаляет неиспользуемые анонимные тома. Используйте --all, если также хотите удалить неиспользуемые именованные тома.

Удалить неиспользуемые анонимные тома:

docker volume prune

Пропустить подтверждение:

docker volume prune --force

Удалить все неиспользуемые локальные тома, включая именованные:

docker volume prune --all

Используйте метки для более безопасной очистки:

docker volume create --label app=myapp myapp-cache
docker volume prune --filter label=app=myapp

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

Монтирование томов с контейнерами

Подключайте тома при создании контейнера. Docker может автоматически создать именованный том, если он еще не существует.

Использование -v

docker run --name my-postgres \
  -v pgdata:/var/lib/postgresql/data \
  -d postgres

Здесь pgdata — имя тома, а /var/lib/postgresql/data — путь внутри контейнера.

Использование --mount

--mount более явный и легче читается в скриптах:

docker run --name my-redis \
  --mount type=volume,source=redisdata,target=/data \
  -d redis

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

Резервное копирование и восстановление тома

Тома Docker — это постоянное хранилище, но не резервные копии. Простой шаблон резервного копирования — запустить временный контейнер, который монтирует том и записывает архив в текущий каталог:

docker run --rm \
  -v my-app-data:/data:ro \
  -v "$PWD":/backup \
  alpine \
  tar czf /backup/my-app-data.tgz -C /data .

Восстановление в пустой том:

docker volume create my-app-data-restored

docker run --rm \
  -v my-app-data-restored:/data \
  -v "$PWD":/backup \
  alpine \
  tar xzf /backup/my-app-data.tgz -C /data

Для баз данных предпочитайте собственные инструменты резервного копирования, когда важна согласованность. Архив файловой системы живого тома базы данных может быть небезопасным, если база данных не остановлена или не поддерживает такой метод резервного копирования.

Лучшие практики управления томами Docker

  • Используйте именованные тома для данных, которые планируете сохранить.
  • Маркируйте тома, принадлежащие приложению или среде.
  • Проверяйте тома перед удалением или очисткой.
  • Резервируйте важные тома за пределами хоста Docker.
  • Избегайте хранения незаменимых данных только в анонимном томе.
  • Тестируйте восстановление, а не только резервное копирование.
  • Используйте драйверы томов, когда нужно хранилище за пределами локального хоста Docker.

Вывод

Используйте именованные тома Docker для состояния, которое хотите сохранить, проверяйте их перед удалением чего-либо и относитесь к prune как к команде очистки с реальным риском потери данных. Повседневный рабочий процесс прост: создайте или позвольте Docker создать том, смонтируйте его с помощью docker run, проверяйте при диагностике, делайте резервную копию, когда это важно, и удаляйте только после того, как ни один контейнер на него не ссылается.