Контейнеры Docker изначально задумывались как эфемерные, то есть их файловая система не сохраняется после остановки или удаления контейнера. Docker Volumes (тома) обеспечивают механизм хранения и обмена данными, который выходит за пределы жизненного цикла контейнера, предотвращая потерю данных. Это особенно важно для приложений, которым требуется постоянное хранилище, таких как базы данных, CMS или stateful-сервисы.
— Типы томов Docker
Существует три основных типа томов в Docker:
Именованные тома (Named Volumes)
Это наиболее распространенный и удобный тип. Они управляются самим Docker и хранятся в файловой системе хоста в специальном каталоге
/var/lib/docker/volumes/ на Linux
Именованные тома подходят для хранения данных, требующих сохранности (например, базы данных) и легко поддаются резервному копированию или миграции.
Анонимные тома (Anonymous Volumes)
Анонимные тома, как и именованные, управляются Docker, но не имеют явного имени. Они используются для временных данных, которые не нужно сохранять между пересозданиями или перезапусками контейнера. Их сложнее отслеживать, и они автоматически удаляются, когда контейнер, их использующий, уничтожается.
Привязанные тома (Bind Mounts)
В отличие от обычных томов, привязанные тома позволяют монтировать конкретный каталог или файл с хостовой системы в контейнер. Этот метод предоставляет больше контроля над местоположением и правами доступа к данным. Изменения, внесенные в файлы на хосте, сразу отображаются в контейнере и наоборот. Bind mounts удобны для совместного использования конфигурационных файлов или исходного кода в процессе разработки.
— Создание и монтирование именованных томов
Создать именованный том можно командой:
docker volume create jenkins_home
Если имя не указано, Docker сгенерирует его автоматически. Для запуска контейнера с монтированным томом используйте флаг -v:
docker run -d --name jenkins -p 8080:8080 -v jenkins_home:/var/data jenkins/jenkins
В этом примере том jenkins_home монтируется в контейнер по пути /var/data. По умолчанию тома монтируются с правами чтения-записи. Чтобы примонтировать том в режиме "только для чтения", используйте :ro:
docker run -d --name jenkins -p 8080:8080 -v jenkins_home:/var/data:ro jenkins/jenkins
— Создание и монтирование анонимных томов
Анонимный том создается автоматически при запуске контейнера с -v, но без указания источника:
docker run -d -v /data nginx
— Создание и монтирование привязанных томов
Привязанные тома используют файловую систему хоста, а не Docker. Чтобы создать bind mount, необходимо заранее создать нужный каталог или файл на хосте. Для монтирования каталога используйте флаг -v:
docker run -d -p 80:80 -v $(pwd):/data nginx
Или более явный --mount:
docker run -d -p 80:80 --mount type=bind,source=$(pwd),target=/data nginx
Теперь любые файлы, созданные в /data внутри контейнера, появятся в текущем каталоге на хосте.
Важно: следите за правами доступа, чтобы избежать проблем с доступом к файлам.
— Просмотр и управление томами Docker
Список всех томов в системе:
docker volume ls
Просмотр информации о томе:
docker volume inspect jenkins_home
Удаление томов Docker
Удаление конкретного тома:
docker volume rm jenkins_home
Удаление всех неиспользуемых томов:
docker volume prune
Анонимные тома и привязанные тома обычно удаляются вместе с контейнером.
— Практическое применение Docker Volumes
Сохранение данных: базы данных или файловые хранилища сохраняют данные даже после удаления контейнера.
Общий доступ к данным: несколько контейнеров могут использовать общий том.
Разработка: привязанные тома позволяют разрабатывать без пересборки контейнеров, так как код обновляется на лету.
Резервное копирование и миграция: данные тома можно скопировать с одного хоста на другой.
— Лучшие практики использования томов Docker
Используйте именованные тома для важных данных.
Регулярно очищайте неиспользуемые тома, чтобы не занимать дисковое пространство.
Будьте осторожны с привязанными томами, так как они дают контейнеру доступ к файловой системе хоста.
Используйте плагины для томов для расширенных возможностей, таких как шифрование и снапшоты.
ЗаключениеDocker Volumes — это мощный инструмент для управления данными в контейнерах. Их грамотное использование значительно упрощает развертывание, разработку и администрирование контейнеризированных приложений.
📖Больше статей на Zylonix
📖 Проекты нашей команды в ТГ канале
🎯 Хештеги
#nginx #apache #сервер #вебразработка #администрирование #linux #devops