Ответ 1
Трудно ответить на вопрос "лучшей практики", потому что это вопрос мнения. И мнения не в тему о переполнении стека.
Поэтому я приведу конкретный пример того, что я сделал в серьезном развертывании.
Я запускаю ELK (Elasticsearch, Logstash, Kibana). Он контейнер.
Для моих хранилищ данных у меня есть контейнеры для хранения. Эти контейнеры хранения содержат локальную файловую систему:
docker create -v /elasticsearch_data:/elasticsearch_data --name ${HOST}-es-data base_image /bin/true
Я также использую etcd
и confd
, чтобы динамически перенастроить мои службы, указывающие на базы данных. etcd
позволяет хранить ключевые значения, поэтому на упрощенном уровне:
CONTAINER_ID=`docker run -d --volumes-from ${HOST}-es-data elasticsearch-thing`
ES_IP=`docker inspect $CONTAINER_ID | jq -r .[0].NetworkSettings.Networks.dockernet.IPAddress`
etcdctl set /mynet/elasticsearch/${HOST}-es-0
Поскольку мы регистрируем его в etcd
, мы можем использовать confd
для просмотра хранилища значений ключа, отслеживания его изменений и перезаписи и перезапуска других наших сервисов.
Я использую haproxy
для этого иногда, и nginx
, когда мне нужно что-то более сложное. Оба они позволяют вам указать наборы хостов для "отправки" трафика и иметь некоторые основные механизмы доступности/нагрузки.
Это означает, что я могу быть довольно ленив о перезапуске/перемещении/добавлении узлов elasticsearch, потому что процесс регистрации обновляет всю среду. Механизм, подобный этому, используется для openshift
.
Чтобы конкретно ответить на ваш вопрос:
- DB упаковывается в контейнер, по тем же причинам другие элементы.
- Объемы для хранилища БД - это контейнеры для хранения, проходящие через локальные файловые системы.
- "поиск" базы данных выполняется с помощью
etcd
на родительском хосте, но в остальном я минимизировал свой размер установки. (У меня есть общий шаблон "install" для хостов докеров, и старайтесь не добавлять к нему что-либо дополнительное, когда это возможно).
По моему мнению, преимущества докера значительно уменьшаются, если вы полагаетесь на локальный хост, имеющий (конкретный) экземпляр базы данных, потому что у вас больше нет возможности для пакетного тестирования - развертывания, развернуть новую систему за считанные минуты.
(Приведенный выше пример - я буквально перестроил все это за 10 минут, и большинство из них было docker pull
, переносящим изображения)