Хранилище & Объёмы

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

Docker предоставляет три основных варианта хранения данных: именованные volumes, bind-mount и tmpfs. Именованные volumes являются стандартным выбором для stateful-нагрузок, таких как базы данных, кэши и загруженные данные. Они обеспечивают постоянное хранение данных, которое переживает удаление контейнеров. Вolumes также легко бэкапируются отдельно, что делает их идеальным решением для хранения критически важных данных. Bind-mount, с другой стороны, позволяет использовать файлы и каталоги хоста в контейнере, что удобно для разработки и тестирования. tmpfs — это временное хранение данных в оперативной памяти, которое не сохраняется на диск.

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

Хранилище & Объёмы обеспечивают постоянное или общее хранение данных для контейнеров. Именованные volumes управляются Docker и могут быть переносимыми между контейнерами. Они хранятся в /var/lib/docker/volumes/ и переживают удаление контейнеров командой docker rm. Bind-mount позволяет использовать файлы и каталоги хоста в контейнере, что удобно для разработки, так как изменения на хосте мгновенно отражаются в контейнере. tmpfs — это временное хранение данных в оперативной памяти, которое не сохраняется на диск и удаляется при остановке контейнера. Volume drivers, такие как NFS, EBS и другие, позволяют использовать внешние файловые системы в качестве хранилищ данных.

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

Именованные volumes идеально подходят для хранения данных баз данных, загруженного контента и всего, что должно пережить удаление контейнера. Bind-mount удобен для разработки и тестирования, так как он позволяет использовать файлы и каталоги хоста в контейнере. tmpfs используется для хранения временных данных в оперативной памяти, таких как кэши и временные загрузки, которые не должны сохраняться на диск. Для многоконтейнерных производственных сред рекомендуется использовать сетевые файловые системы (Ceph, EFS, GlusterFS) вместо volume-драйверов Docker, так как они проще и переживают рестарт Docker.

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

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

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

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

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

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