Этот вопрос действительно слишком широк для обмена стека, но я дам несколько быстрых предложений, поскольку не похоже, что он будет помечен как слишком широкий.
SBT NativePackager - это типичный способ упаковки приложений akka для Docker. Хотя я понимаю, что есть аналогичные инструменты для других цепочек сборки.
Что касается "лучших практик", я не думаю, что есть что-то особенно отличное от любых других образов JVM Docker. Например:
- Один процесс на контейнер. Итак, нет, вы не помещаете кластер на контейнер: вы устанавливаете один узел на контейнер: таким образом, вы можете увеличивать и уменьшать масштаб, просто добавляя / удаляя контейнеры. (Выполняйте непрерывные обновления и т. Д.)
- Не используйте ограничения ЦП
- Имейте в виду, что JVM (особенно Java8) может сообщать обо всех процессорах и памятина хосте, так что вы можете вручную установить настройки потока и памяти или посмотреть флаги JVM, которые могут облегчить это, такие как
-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
- Минимальные привилегии и т. д. Собственный упаковщик SBT имеет разумные значения по умолчанию для этого,, но применяются обычные рекомендации по использованию подходящего базового образа и другие общие рекомендации по Dockerfile.
Конечно, существуют также фактические документы Akka , развертываемые в Docker.
Одной вещью, которая может оказаться полезной, является статья Lightbend о запуске Lagom в Куберне . Так как это Lagom (а не просто Akka) и Kubernetes (а не просто контейнеры), это будет супер набор вещей, которые вас волнуют. (Например, вам не безразлична настройка Postgres / Kafka.) Но она также содержит много полезных советов по работе с контейнерами:
- Размеры кучи
- Как управлять конфигурациями
- Использование хешей git для версий, чтобы сделать тэги Docker более разумными
- Как использовать собственный упаковщик
- Как использовать загрузчик Akka (хотя вам придется изменитьэто немного, если вы не используете Kubernetes