Docker, Volume против Bind Mounts для постоянных данных, таких как DB ,asticsearch? - PullRequest
0 голосов
/ 04 февраля 2019

объем данных док-станции и каталог подключенного хоста

говорит, что volumes должно быть предпочтительнее, чем bind mounts

У меня есть несколько вопросов по этой проблеме.В посте написано:

When you create a volume, it is stored within a directory on the Docker host

Терпите меня, но я новичок в докере, и мне интересно, что здесь такое docker host.

Это машина, на которой я создаю образ (возможно, нет)?
Это машина, на которой будет запускаться образ?Если это так, что произойдет, если я запусту образ на нескольких машинах, создаст ли он два независимых тома?
Когда у меня настроены developement и production, как Docker управляет двумя отдельными томами для каждой среды?

Кроме того, при использовании docker-compose down кажется довольно легко потерять данные, когда я использую тома данных, это первое препятствие, которое заставляет меня колебаться при использовании data volumes, есть ли очевидное решение для смягчения этой проблемы?

1 Ответ

0 голосов
/ 04 февраля 2019

На самом деле это не доктрина - не использовать привязные крепления.Да, они могут повредить файловую систему вашего хоста, если смонтированы неточно (например, -v /bin:/var/log), как только у вас по умолчанию будут права root в контейнере;также они менее переносимы, но они облегчают обмен файлами между хостом и контейнером.Если вы хотите предоставить начальную конфигурацию для вашей службы или поместить исходный код для компиляции в контейнер, я полагаю, что вы предпочтете bind mount вместо создания и запуска временного контейнера для операций docker volume cp.Кроме того, вы всегда должны использовать опцию :ro, когда это возможно (только для чтения), чтобы предотвратить изменение данных внутри контейнера.

Docker host - это машина (ПК), на которой работает демон Docker.

Это машина, на которой я создаю образ (вероятно, нет)?

Не соответствует действительности.Вы можете создавать, используя docker CLI или docker API удаленно.

Это машина, на которой будет запускаться образ?

Да, изображения запускаются демоном Docker.и, следовательно, это будет хост.

Если это так, что произойдет, если я запусту образ на нескольких машинах, создаст ли он два независимых тома?

Этозависит.Запускать образы на разных машинах можно по-разному, начиная с оркестраторов, таких как kubernetes или docker swarm, и заканчивая ручным запуском на отдельных демонах докера.С помощью оркестраторов можно иметь один и тот же том, общий для разных хостов, но в этом случае вы не можете использовать bind mounts, вы используете volumes.

Когда у меня есть разработка и производственная настройкаКак Docker управляет двумя отдельными томами для каждой среды?

Docker управляет не ты.

Кроме того, при использовании docker-compose при использовании томов данных кажется довольно легко потерять данные, это первое препятствие, которое заставляет меня колебаться в использовании томов данных, есть ли очевидное решение для смягченияпроблема?

Тома могут легко сохраняться между docker-compose сессиями.Самый явный способ добиться этого - заранее объявить том с помощью

docker volume create foo

, а затем использовать его в ваших файлах композиции:

version: '3'
services:
  abc:
    volumes:
      foo:/foo
volumes:
  foo:
    external: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...