Найти в Дзене
Zylonix

🚀 Docker Volumes: Полное руководство

Оглавление

Контейнеры 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