Что такое volumes и bind mounts? В чём разница?
Подробный ответ
Зачем нужны mounts
Данные внутри writable layer контейнера не стоит считать постоянными: при удалении контейнера они пропадут. Mounts позволяют хранить данные отдельно от жизненного цикла конкретного контейнера.
Docker volumes
Volume — это хранилище, которое создаётся и управляется Docker. Docker определяет, где оно находится на хосте, и может подключать один volume к контейнеру или нескольким контейнерам.
services:
db:
image: postgres:16
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Named volumes обычно хорошо подходят для данных PostgreSQL, Redis и других сервисов, потому что Docker управляет их расположением и жизненным циклом.
Bind mounts
Bind mount привязывает конкретный путь хостовой файловой системы к пути внутри контейнера. Изменения в файлах на хосте сразу видны внутри контейнера, и наоборот.
services:
web:
build: .
volumes:
- ./src:/app/srcОсновная разница
volume управляется Docker, а bind mount использует указанный путь на хосте;
volume лучше подходит для постоянных данных сервисов;
bind mount удобен для локальной разработки и редактирования исходного кода;
bind mount сильнее зависит от структуры файловой системы и прав на конкретной машине.
Read-only mount
Если контейнеру не нужно менять подключённые файлы, mount можно сделать доступным только для чтения.
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:roКак ответить на собеседовании
Volume — это постоянное хранилище под управлением Docker, его обычно использую для данных базы. Bind mount — это прямая привязка папки хоста к папке контейнера; он удобен в development, когда нужно сразу видеть изменения исходного кода в контейнере.
Оцени свой прогресс