У меня есть приложение, которое использует встроенную БД, а также генерирует журналы и необработанные метрики для следующей структуры каталогов:
/opt/myapp/data/
database/
logs/
raw_metrics/
Я нахожусь в процессе изучения Docker и пытаюсь «докеризировать» это приложение и пытаюсь найти решение для монтажа/объема, которое позволяет мне достичь следующих целей:
- Встроенная база данных хранится в одном и том же смонтированном томе независимо от того, сколько у меня запущено экземпляров контейнера
myapp
. Другими словами, все экземпляры контейнера записывают свои данные в общий томdatabase/
; а также - Я также предпочел бы то же самое для своих журналов и необработанных метрик (то есть: все экземпляры контейнера записывают журналы/метрики в один и тот же общий том), за исключением того, что здесь мне нужно иметь возможность различать данные журнала и метрики для каждого контейнера. Другими словами, мне нужно знать, что контейнер X сгенерировал конкретное сообщение журнала, или что контейнер Y ответил на запрос через 7 секунд и т. д.
Мне интересно, какая стандартная процедура здесь, в стране докеров. После прочтения официальной документации Docker, а также этой статьи о томах Docker. мой предварительный подход заключается в следующем:
- Создайте контейнер тома данных и подключите его, скажем, к
/opt/myapp
на хост-компьютере. - Затем я могу настроить свою встроенную базу данных для чтения содержимого БД и записи его в
/opt/myapp/database
, и я полагаю (если я правильно понимаю то, что прочитал), что все экземпляры контейнера будут совместно использовать одну и ту же БД. - Каким-то образом внедрить идентификатор контейнера или какой-либо другой уникальный идентификатор в каждый экземпляр контейнера и реорганизовать мой код ведения журналов и метрик, чтобы включить этот введенный идентификатор при создании журналов или необработанных метрик, чтобы у меня мог быть, скажем, файл
/opt/myapp/logs/containerX.log
, файл/opt/myapp/logs/containerY.log
, и т. д. Но меня очень интересует стандартная практика объединения журналов между контейнерами Docker!
Кроме того, и, возможно, гораздо более важным является тот факт, что я не уверен, что это решение будет работать в сценарии с несколькими хостами, где у меня есть Swarm/кластер с десятками myapp
контейнеров на нескольких хостах. Будет ли мой Data Volume Container волшебным образом синхронизировать том /opt/myapp
на всех хостах? Если нет, то какое решение для монтирования общих томов для контейнеров, независимо от того, на каком хосте они работают? Заранее спасибо!