@dipech

Как поменять путь хранения named volumes на хост-машине в docker?

Что имеется:
Имеется продакшн сервер, на котором планируется держать веб-приложение, которое будет крутиться при помощи docker'а. Я использую docker-compose и named volumes, которые помогают расшаривать данные между контейнерами.
На сервере установлено 2 диска: HDD (2 ТБ) и SSD (500 ГБ).

Что необходимо:
Нужно хранить часть persistent данных на HDD (например, большие пользовательские данные), а другую данных хранить на SSD (исходный код и базу данных).

Что я уже попробовал:
После чтения сотни мануалов и статей в документации, был найден вот подход, описанный ниже (код docker-compose прилагается).
Данный подход, судя по найденной информации, работает для большинства людей (но не для меня, почему то).
Также стоит отметить, что все необходимые пути на хост-машине (например: “/awesomeapp_source_files”) были заранее созданы и все permissions и owners были настроены.

docker-compose.prod.yml

volumes:
   volume_source:
       driver: local
       driver_opts:
           type: none
           o: bind
           # SSD
           device: /awesomeapp_source_files
   volume_database:
       driver: local
       driver_opts:
           type: none
           o: bind
           # SSD
           device: /awesomeapp_database_files
   volume_public_data:
       driver: local
       driver_opts:
           type: none
           o: bind
           # HDD
           device: /var/awesomeapp/public_files
   volume_private_data:
       driver: local
       driver_opts:
           type: none
           o: bind
           # HDD
           device: /var/awesomeapp/private_files

services:
   # Контейнер содержит исходный код приложения. Исходники расшариваются при помощи named volumes.
   app:
       volumes:
           - volume_source:/var/www
           - volume_public_data:/var/www/public/data:nocopy
           - volume_private_data:/var/www/data:nocopy

   nginx:
       volumes:
           - volume_source:/var/www:nocopy
           - volume_public_data:/var/www/public/data:nocopy
           - volume_private_data:/var/www/data:nocopy

   mysql:
       volumes:
           - volume_database:/var/lib/mysql

   php:
       volumes:
           - volume_source:/var/www:nocopy
           - volume_public_data:/var/www/public/data
           - volume_private_data:/var/www/data


Ключевые настройки тут эти:
driver_opts:
    type: none
    o: bind
    device: /path/to/folder/on/host


Если я удаляю их - на хост-машине named volumes хранятся по стандартным путям: “/var/lib/docker/volumes/{NAMED_VOLUME_NAME}/_data”. И моё приложение работает как ожидается.

Однако, как только я использую данные настройки, то мои директории на хост-машине (“/awesomeapp_source_files”, “/var/awesomeapp/private_files”, “/var/awesomeapp/public_files”) и директории внутри контейнеров (“/var/www”, “/var/www/data”, “/var/www/public/data”) пустые.

Моё предположение (не знаю насколько но верное) заключается в том, что данные не синхронизируются из контейнеров на хост, и далее из хостовых директорий в контейнеры.
Но я понятия не имею как это проверить. И что нужно сделать чтобы исправить поведение.

Пожалуйста, помогите с решением. Надеюсь на вашу помощь.
  • Вопрос задан
  • 753 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы