Шаблоны сохранения данных
Тема дорожной карты · Docker & Containers
Шаблоны сохранения данных — это ключевые техники для обеспечения надежного хранения информации в контейнерных средах. В контейнерных технологиях, таких как Docker, все данные, которые нужно сохранить, должны находиться вне записываемого слоя образа. Это делается для обеспечения того, что данные не будут утеряны при удалении контейнера или пересоздании его из образа. Это особенно важно для баз данных, где потеря данных может привести к серьезным проблемам.
Три основных паттерна для сохранения данных в контейнерах: именованные тома (управляет Docker, идеально для БД и production сред), bind mounts (путь хоста маппится внутрь контейнера, удобно для исходников и конфигураций в dev средах), и tmpfs-mount (хранение данных в оперативной памяти, подходит для кеша и временных файлов, которые не требуют долгосрочного хранения).
Как это работает
Шаблоны сохранения данных обеспечивают постоянное или общее хранилище для контейнеров. Три формы этого подхода включают именованные тома, bind mounts и tmpfs-mount. Именованные тома — это контейнерные тома, управляемые Docker, и они переживают удаление контейнера, сохраняя данные в /var/lib/docker/volumes/. Bind mounts позволяют указать путь на хосте, который будет маппироваться внутрь контейнера. tmpfs-mount используются для хранения данных в оперативной памяти, что делает их идеальными для кеша и временных файлов.
Volume drivers, такие как NFS, EBS, и другие, могут быть использованы для подключения своих backend хранилищ к контейнерам. Это позволяет использовать сетевые файловые системы, такие как Ceph, EFS, или GlusterFS, для хранения данных, что делает их более надежными и переживающими рестарт Docker.
Когда применять
Именованные тома идеально подходят для хранения данных баз данных, загруженного контента и всего, что должно пережить удаление контейнера. Bind mounts удобны для разработки, когда нужно обеспечить live-reload кода с хоста. tmpfs-mount используются для хранения данных в оперативной памяти, что делает их идеальными для кеша и временных файлов, которые не требуют долгосрочного хранения.
Для многопользовательских production сред рекомендуется использовать сетевые файловые системы, такие как Ceph, EFS, или GlusterFS, вместо volume-драйверов. Это делает хранение данных более надежным и позволяет переживать рестарт Docker.
Типичные ошибки
Типичные ошибки при использовании шаблонов сохранения данных включают хранение важных данных в файловой системе контейнера, что приводит к потере данных при удалении контейнера. Также проблемой является использование bind-mount в контейнере, который запускается под другим UID, чем владелец на хосте, что приводит к ошибке доступа. Забытые именованные тома после использования команды docker compose down -v остаются осиротевшими. Использование bind mounts в production среде "потому что в dev так" привязывает к путям хоста, что может привести к проблемам с производительностью.
Для предотвращения этих ошибок рекомендуется регулярно использовать команду docker volume ls для просмотра всех томов и docker volume prune для удаления заброшенных томов.
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…