Мой вопрос можно перефразировать как: Плюсы и минусы докера или другого контейнера для 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 без контейнеров.Почему нет?