Именованные объёмы

Тема дорожной карты · Docker & Containers

Именованные тома представляют собой специализированное управляемое Docker хранилище, которое располагается вне writable-слоя контейнера. Они сохраняют данные даже после удаления контейнера с помощью команды docker rm. Именованные тома легко расшариваются между контейнерами, что делает их незаменимыми для хранения важной информации, такой как данные базы данных, кэши или любые другие данные, которые необходимо сохранить. Создание именованного тома осуществляется с помощью команды docker volume create data, а монтирование — с помощью параметров -v data:/var/lib/postgres или --mount type=volume,src=data,dst=/var/lib/postgres.

Именованные тома отличаются от bind mounts тем, что они портируются между хостами и управляются движком Docker. В отличие от bind mounts, именованные тома не требуют указания пути на хосте, что делает их более удобными для использования в production окружениях. Однако, при первом монтировании пустого тома Docker копирует данные из образа в том, что может привести к нежелательным последствиям, если данные из образа не соответствуют ожидаемому состоянию тома.

Как это работает

Именованные тома предоставляют постоянное или общее хранилище для контейнеров. Существует три формы объёма: именованные тома (Docker управляет местоположением, это наиболее подходящий вариант для хранения данных), привязка объёмов (вы указываете путь на хосте, что удобно для разработки) и tmpfs монтирование (виртуальное хранилище в оперативной памяти, которое никогда не сохраняется на диск). Именованные тома сохраняют данные вне writable-слоя контейнера, что позволяет им переживать удаление контейнера командой docker rm. Данные именованных томов хранятся в директории /var/lib/docker/volumes/. Volume drivers (например, NFS, EBS и т.д.) позволяют подключать свои backend хранилища к Docker.

Когда применять

Именованные тома используются для хранения данных баз данных, загруженного контента или любых данных, которые должны пережить удаление контейнера. Привязка объёмов удобна для разработки, особенно для live-reload кода с хоста. Tmpfs монтирование используется для временных данных, которые хранятся в оперативной памяти и никогда не сохраняются на диск. Для многоконтейнерных production окружений рекомендуется использовать сетевые файловые системы (например, Ceph, EFS, GlusterFS) вместо volume-драйверов Docker, так как это обеспечивает более простое управление и сохранение данных при рестарте Docker.

Типичные ошибки

Типичные ошибки при использовании именованных томов включают хранение важных данных в контейнере, который может быть удален с помощью команды docker rm; использование bind-mount в контейнере, который запущен под другим UID, чем владелец на хосте, что может привести к ошибке доступа; забывание очистить именованные тома после использования команды docker compose down -v, что может привести к появлению осиротевших томов; использование bind mounts в production окружении "потому что в dev так", что может привести к привязке к путям на хосте. Для предотвращения этих ошибок рекомендуется периодически использовать команды docker volume ls и docker volume prune для очистки неиспользуемых томов.

Связанные понятия

Полезные ресурсы

Проверить знания (1)

Загрузка вопросов…