Разница между методами, которые вы описали, заключается в том, что первый метод - это bind mount , а другой - том .Это больше функций Docker (нежели Docker Compose), и есть несколько преимуществ, которые предоставляют тома при монтировании пути из файловой системы вашего хоста.Как описано в документации, они:
- проще создавать резервные копии или переносить
- можно управлять с помощью
docker volumes
или API (в отличие от необработанной файловой системы) - работает как с контейнерами Linux, так и с Windows
- можно безопасно разделять между несколькими контейнерами
- может иметь содержимое, предварительно заполненное контейнером (с помощью монтирования bind иногда приходится копировать данные, затем перезапустите контейнер)
Еще одним значительным преимуществом использования томов являются драйверы томов , которые вы должны указать вместо local
.Они позволяют удаленно хранить тома (например, в облаке и т. Д.) Или добавлять другие функции, такие как шифрование.Это является основой концепции контейнеров, поскольку если запущенный контейнер не имеет состояния и использует удаленные тома, вы можете перемещать контейнер между узлами, и его можно запускать без перенастройки.
Поэтому рекомендуетсяиспользовать тома Docker.Другим хорошим примером является следующий:
services:
webserver_a:
volumes:
- ./serving/prod:/var/www
webserver_b:
volumes:
- ./serving/prod:/var/www
cache_server:
volumes:
- ./serving/prod:/cache_root
Если вы переместите каталог ./serving
в другое место, привязка монтирования прекратится, потому что это относительный путь.Как вы заметили, тома имеют псевдонимы и имеют путь, которым управляет Docker, поэтому:
- вам не нужно будет искать и заменять путь 3 раза
- тома, используя
local
хранит данные где-то еще в вашей системе и будет продолжать монтировать просто отлично
TL; DR: попробуйте и используйте тома.Они переносимы и поощряют действия, которые уменьшают зависимости от вашего хост-компьютера.