👩💻 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🔹Сохранение данных: базы данных или файловые хранилища сохраняют данные даже после удаления контейнера.
🔹Общий доступ к данным: несколько контейнеров могут использовать общий том.
🔹Разработка: привязанные тома позволяют разрабатывать без пересборки контейнеров, так как код обновляется на лету.
🔹Резервное копирование и миграция: данные тома можно скопировать с одного хоста на другой.