← Назад к вопросам

Что такое Docker Volume?

2.0 Middle🔥 151 комментариев
#Python Core#Soft Skills#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Docker Volume

Docker Volume — это механизм для хранения и управления данными в Docker, который позволяет сохранять состояние между запусками контейнеров, обмениваться данными между контейнерами и избежать потери информации при удалении контейнера.

Основные концепции

Волюмы — это отделённые хранилища данных, управляемые Docker. Они существуют независимо от жизненного цикла контейнера, в отличие от данных в файловой системе контейнера, которые удаляются при удалении контейнера.

Типы хранилищ в Docker

Докер поддерживает три способа хранения данных:

  1. Volumes — управляемые Docker, хранятся в /var/lib/docker/volumes/
  2. Bind mounts — привязка директорий хоста к контейнеру
  3. tmpfs mounts — данные в оперативной памяти (для Linux)

Создание и использование Volume

import docker

client = docker.from_env()

volume = client.volumes.create(name="my_volume")
print(f"Volume создан: {volume.name}")

container = client.containers.run(
    "ubuntu:latest",
    "echo 'данные' > /data/file.txt",
    volumes={"my_volume": {"bind": "/data", "mode": "rw"}},
    detach=True
)

Docker CLI команды

docker volume create my_volume
docker volume ls
docker volume inspect my_volume
docker volume rm my_volume
docker run -v my_volume:/data --name my_container ubuntu:latest

Пример: Persistent Database

docker volume create postgres_data

docker run -d \
  --name postgres \
  -e POSTGRES_PASSWORD=secret \
  -v postgres_data:/var/lib/postgresql/data \
  postgres:15

При перезагрузке контейнера все данные БД сохранятся.

Основные преимущества Volumes

  1. Независимость от контейнера — данные не удаляются при docker rm
  2. Обмен между контейнерами — несколько контейнеров могут использовать один volume
  3. Удобство резервных копий — легко бэкапировать и мигрировать
  4. Performance — оптимизация доступа к данным
  5. Безопасность — данные отделены от кода контейнера
  6. Драйверы хранилища — поддержка NFS, S3 и других backend'ов

Отличие от Bind Mount

docker run -v my_volume:/data ubuntu:latest
docker run -v /home/user/data:/data ubuntu:latest

Очистка неиспользуемых Volumes

docker volume prune
docker volume ls -f "dangling=true"

Volumes — это критический компонент при использовании Docker в production, обеспечивающий надёжность и управляемость данных.