Отказ от ответственности: я не эксперт в Event Store. Могут быть функции, специфичные для Event Store, которые делают его менее подходящим для запуска из контейнера, о котором я не знаю.
В общем, вы можете «докеризировать» большинство сервисов, и они могут одинаково хорошо работать как сервис, который изначально запускается на сервере.
Вещи, которые нужно знать:
- где вы храните свои данные
- где вы храните ваши файлы конфигурации
- какая производительность требуется
- как насчет безопасности
Данные: из-за способа запуска контейнера в примере ваши данные будут «внутри» контейнера. Удалите или обновите контейнер, и ваши данные исчезнут навсегда.
Чтобы сделать ваши данные постоянными, используйте тома данных или контейнеры томов данных. Они хранят ваши данные на хосте (их Dockerfile уже поддерживает их, см. VOLUME
).
Существуют также решения для хранения данных, которые позволяют удаленно обращаться к данным с помощью плагинов для томов.
Файлы конфигурации: та же история, что и для ваших данных. Вы можете сохранить свои конфигурационные файлы в томе данных (контейнере) или передать их через Dockerfile (как они сделали в своем Dockerfile).
Производительность: в некоторых ситуациях при использовании Docker и нативной может наблюдаться незначительное снижение производительности. См. Https://stackoverflow.com/q/21889053/4459346.
Безопасность: из-за способа запуска контейнера в примере хранилище событий будет отображаться на хост-компьютере. Любой может получить к ним доступ извне. Чтобы они оставались локальными для хоста, используйте -p 127.0.0.1:1113:1113
.
В компании, в которой я работаю, я установил сервер mysql
в контейнере. Данные и файлы конфигурации «хранятся» в контейнере тома данных. Я также настроил задание cron, которое запускает другой контейнер для резервного копирования данных mysql
на хост.
Многие приложения (также «докеризованные») успешно используют mysql
таким образом. Мы не видели никакой разницы с запуском mysql
. Может быть более 50 пользователей одновременно.