docker volume CLI
Тема дорожной карты · Docker & Containers
Используемая подкоманда docker volume управляет именованными volumes отдельно от контейнеров, которые их монтируют: create, ls, inspect, rm, prune. Именованные volumes — это рекомендуемый способ хранения данных приложения, так как они позволяют Docker управлять местоположением данных, что делает их удобными для использования на разных хостах. Они также поддерживают различные драйверы (например, local, NFS, CSI), что делает их гибкими для различных сценариев использования.
Как это работает
Подкоманда docker volume предоставляет постоянное или общее хранилище для контейнеров. Существует три основные формы volumes: именованные volumes, bind mounts и tmpfs mounts. Именованные volumes создаются с помощью команды docker volume create, и Docker управляет их местоположением. Bind mounts позволяют указывать путь на хосте, что удобно для разработки, так как они позволяют в реальном времени перезагружать код. Tmpfs mounts представляют собой временные файловые системы, которые хранятся в оперативной памяти и не сохраняются на диске.
Именованные volumes переживают удаление контейнеров с помощью команды docker rm, что делает их идеальными для хранения данных базы данных, загруженного контента и всего, что должно пережить удаление контейнера. Данные именованных volumes хранятся в директории /var/lib/docker/volumes/.
Volume drivers, такие как NFS, EBS и другие, могут быть подключены к volumes для использования своих backend-систем. Это позволяет использовать различные типы хранилищ данных, такие как сетевые файловые системы, облачные сервисы и т.д.
Когда применять
Именованные volumes рекомендуются для хранения данных базы данных, загруженного контента и всего, что должно пережить удаление контейнера. Bind mounts удобны для разработки, так как они позволяют в реальном времени перезагружать код. Tmpfs mounts используются для хранения временных данных в оперативной памяти, таких как кэши и временные загрузки, которые не должны сохраняться на диске.
Для многоконтейнерных производственных сред рекомендуется использовать сетевые файловые системы, такие как Ceph, EFS и GlusterFS, вместо драйверов volumes Docker. Это делает управление данными более простым и позволяет им переживать рестарт Docker.
Типичные ошибки
Типичные ошибки при использовании docker volume включают хранение важных данных в файловой системе контейнера, что может привести к потере данных при удалении контейнера. Также могут возникнуть проблемы с разрешениями доступа при использовании bind mounts в контейнерах, которые запускаются под другим UID, чем владелец на хосте. Забытые именованные volumes могут остаться после выполнения команды docker compose down -v, что может привести к потере данных. Наконец, использование bind mounts в производственных средах "потому что в разработке так" может привести к привязке к путям хоста, что может быть нежелательным.
Для предотвращения этих ошибок рекомендуется регулярно использовать команды docker volume ls и docker volume prune, чтобы убедиться, что все неиспользуемые volumes удалены.