Как задеплоить war в Docker контейнер и запустить tomcat?

Здравствуйте!
Помогите кто чем может)
Начал изучать docker и что- то не задалось…
Задача:
Есть образ с томкатом
Нужно запустить контейнер подкинуть туда варик и запустить томкат.(2я задача поставить деб пакет)
Не могу найти норм. статьи в помощь…
Нашел только про DockerFile и сборку образа, но мне не совсем это подходит. Мне не нужно собирать образ
мне просто нужно задеплоить приложение для тестов в контейнер…
Спасибо.

Вам нужно деплоить в уже запущенный контейнер что-ли?

  • Замапте директорию с хост ОС (где появляется war) на webapps директорию tomcat в контейнере.
  • По идее там должна быть опция динамического деплоя, чтобы не перезапускать сервер.

А вообще, чем не устроил вариант правки / наисания нового dockerfile, явно копируя ваш app в качестве build step’а в контейнер?

2 лайка

Я мыслил “терминами вагранта” что ли… Запустил бокс, скопировал файл, запустил томкат. Я понимаю, что это совершенно разные вещи, но понять как это делать, в docker что-то не получается… Может он не подходит для моих целей? Но я только и слышу вокруг “тесты на docker” “тесты на docker” … Вот решил попробовать)

Ну я думал, что собирать образ каждый раз - идея не очень хорошая… Хотя судя по всему это одна из “фишек” docker…

А каждый раз - это как часто? Если сопутствующие образы уже хотя бы раз загружены, процесс занимает минимум времени. К тому же, вы ведь когда деплоите приложение при помощи CI, тоже ждете некоторое время? Так чем этот процесс отличается? Хотите новую версию? Да, придется подождать. Хотя, вариант с мэпингом фолдера тоже должен работать.

согласен с ArtOfLife. Лучше мапить директорию и запускать сервер - еще нужно будет написать скрипт, который будет ждать пока ваше приложение будет готово к работе.

Что касается сборки образа каждый раз - если честно, не уверен в том, что это хорошая идея, хотя в целом зависит от ваших нужд и конфигурации, но при этом подходе вы быстро захламите диск новыми слоями вашего образа. Up to you, как говорится.

Попробуйте GitHub - testcontainers/testcontainers-java: Testcontainers is a Java library that supports JUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container., если пишете на java. Запуск делается весьма просто:

GenericContainer tomcat = new GenericContainer("tomcat:8.0");
tomcat.withExposedPorts(8080);
tomcat.addFileSystemBind(warPath,
                "/usr/local/tomcat/webapps/myapp.war", BindMode.READ_ONLY);
tomcat.start();
System.out.println("http://" + tomcat.getContainerIpAddress() + ":" + tomcat.getMappedPort(8080));

всё. Если для вашего тестового приложения нужны каки-то базы и прочие вещи, можете перед запуском tomcat слинковать контейнеры аля

tomcat.addLink(rabbit, “rabbitmq”);

Теперь если мне кто-то в ответ покажет как это сделать на weblogic, буду благодарен.

Спасибо. Попробую

Как бы сделал я:

  1. Написать Dockerfile с установкой tomcat и всеми необходимыми зависимостями для проекта.
    В Dockerfile добавил бы bash скрипт через ADD и поставил бы его в RUN, чтобы он пускался при старте.

  2. В bash скрипте из п.1 делается установка пакета и запуск приложения, а так же все действия по его развертыванию, если требуется останавливать и запускать повторно, то делается проверка на то, что установлено все или нет, чтобы например не перезатереть разворачиваемую БД или папочки с файликами.

  3. собираем один раз образ через docker build

  4. Запускаем сколько хочется раз docker run с параметром -d и -v <нужная_директория>:<в_нужное_место>

Запилил аналогичную штуку для любителей питона

http://automation-remarks.com/python-testcontainer/

1 лайк