Зачем запускать процесс JVM в Docker - PullRequest
0 голосов
/ 20 марта 2019

Мой вопрос можно перефразировать как: Плюсы и минусы докера или другого контейнера для Java-приложения .

Я нашел тонныинформация о Docker и VM, но я не смог найти статью о Java в преимуществах Docker.

Java-программа работает как процесс JVM, уже являющийся "так называемой" виртуальной машиной.Почему многие ИТ-специалисты хотят запускать Java-программу в Docker?

Существуют инструменты, помогающие управлять контейнерами Docker: kubernetes, docker-compose, Docker Swarm и т. Д. Развернуть все приложение проще (микроархитектура -services, например), с любой настраиваемой конфигурацией так легко: docker-compose up и docker-compose.yml определяют конфигурацию.С помощью таких инструментов также легко выполнять оркестровку и масштабирование.

Можно ли управлять JVM (виртуальными машинами Java) аналогично управлению контейнерами?Есть ли такой инструмент или технология там?Мне пришло в голову одно жестко закодированное ограниченное решение - создать bash-сценарии для развертывания всего стека ваших приложений.

Перед контейнерами мы запускали наши приложения на виртуальных машинах в облаке.Но виртуальная машина стоит дорого (для запуска приложения требуется больше ресурсов, также есть хост-ОС и ОС VM).Технология Docker позволяет запускать процесс приложения внутри контейнера с использованием хост-ОС ( при условии, что контейнер и ОС хоста имеют одинаковое ядро ​​, например, оба они на основе Linux).

Другое преимуществоконтейнера - легкость в освоении.Вместо того, чтобы устанавливать различные зависимости для вашего приложения (базы данных, кэши, серверы приложений, прокси-серверы и т. Д.), Вы можете получать необходимые изображения и запускать из них контейнеры, не устанавливая эти зависимости на своем компьютере разработчика.

Но опять жепочему бы не запустить процесс JVM на хост-компьютере для производства?Например, у нас есть пять контейнеров, и мы знаем, что они будут выполнять там процесс Java (это важно; в противном случае будет иметь смысл использовать отдельный контейнер для каждого технологического стека).Таким образом, у нас может быть один хост-компьютер с установленной JRE, и мы можем запустить там 5 процессов JVM без контейнеров.Почему нет?

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Представим, что на вашем хосте запущено 5 процессов JVM.
Как насчет, если:
- Вы хотите масштабировать на другой хост, если ваше приложение перегружено (добавьте больше процесса JVM на другой хост вручную / скрипт, прокси-сервер конфигурации, dns для нового узла). С помощью инструмента оркестровки Docker вы можете масштабировать одним щелчком мыши или развертыванием
- Как насчет того, если процесс умирает, вам нужно написать скрипт мониторинга / cron, чтобы убедиться, что он жив и перезапустить, если он остановился. У нас может быть самовосстановление с помощью инструмента оркестровки
И много идей для инструмента оркестровки:

Provisioning and deployment of containers
Redundancy and availability of containers
Scaling up or removing containers to spread application load evenly across host infrastructure
Movement of containers from one host to another if there is a shortage of resources in a host, or if a host dies
Allocation of resources between containers
External exposure of services running in a container with the outside world
Load balancing of service discovery between containers
Health monitoring of containers and hosts
Configuration of an application in relation to the containers running it

Тем не менее, архитектура инструмента оркестровки будет сложной. Мы должны решить, исходя из цели и текущей архитектуры

1 голос
/ 20 марта 2019

Как вы говорите в последнем бите вашего вопроса, контейнер намного дешевле, чем виртуальная машина, поскольку он не виртуализирует оборудование и ОС в целом.

Кроме того, при создании образа Docker очень легко просто захватить контейнер и запустить его мгновенно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...