Перейти к основному содержимому

Развертывание Java War в контейнере Docker

· 4 мин. чтения

Задача: Медиана двух отсортированных массивов

Даны два отсортированных массива размерами n и m. Найдите медиану слияния этих двух массивов.
Временная сложность решения должна быть O(log(m + n)) ...

ANDROMEDA

1. Обзор

В этом руководстве мы научимся развертывать WAR-файл Java внутри контейнера Docker .

Мы развернем файл WAR на Apache Tomcat , бесплатном веб-сервере с открытым исходным кодом, который широко используется в сообществе Java.

2. Разверните файл WAR на Tomcat

WAR (архив веб-приложений) — это заархивированный файл, который упаковывает все файлы, связанные с веб-приложением, и их структуру каталогов.

Для простоты развертывание WAR-файла на Tomcat — это не что иное, как копирование этого WAR-файла в каталог развертывания на сервере Tomcat. Каталог развертывания в Linux — $CATALINA_HOME/webapps . $CATALINA_HOME обозначает каталог установки сервера Tomcat.

После этого нам нужно перезапустить сервер Tomcat , который извлечет файл WAR внутри каталога развертывания.

3. Разверните WAR в контейнере Docker

Предположим, что у нас есть файл WAR для нашего приложения, ROOT.war , который нам нужно развернуть на сервере Tomcat.

Чтобы достичь нашей цели, нам нужно сначала создать Dockerfile. Этот Dockerfile будет включать в себя все зависимости, необходимые для запуска нашего приложения.

Далее мы создадим образ Docker, используя этот Dockerfile, а затем шаг для запуска контейнера Docker.

Давайте теперь углубимся в эти шаги один за другим.

3.1. Создать Dockerfile

Мы будем использовать последний Docker-образ Tomcat в качестве базового образа для нашего Dockerfile. Преимущество использования этого образа в том, что все необходимые зависимости/пакеты предустановлены. Например, если мы используем последние образы Ubuntu/CentOS Docker, нам нужно вручную установить Java, Tomcat и другие необходимые пакеты.

Поскольку все необходимые пакеты уже установлены, все, что нам нужно сделать, это скопировать WAR-файл ROOT.war в каталог развертывания сервера Tomcat. Вот и все!

Давайте посмотрим поближе:

$ ls
Dockerfile ROOT.war
$ cat Dockerfile
FROM tomcat

COPY ROOT.war /usr/local/tomcat/webapps/

$CATALINA_HOME/webapps обозначает каталог развертывания для Tomcat . Здесь CATALINA_HOME для официального Docker-образа Tomcat — это /usr/local/tomcat . В результате полный каталог развертывания окажется /usr/local/tomcat/webapps .

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

3.2. Создайте образ Docker

Давайте теперь создадим образ Docker, используя только что созданный Dockerfile:

$ pwd
/foreach
$ ls
Dockerfile ROOT.war
$ docker build -t myapp .
Sending build context to Docker daemon 19.97kB
Step 1/2 : FROM tomcat
---> 710ec5c56683
Step 2/2 : COPY ROOT.war /usr/local/tomcat/webapps/
---> Using cache
---> 8b132ab37a0e
Successfully built 8b132ab37a0e
Successfully tagged myapp:latest

Команда сборки docker создаст образ Docker с тегом myapp.

Обязательно создайте образ Docker из каталога, в котором находится Dockerfile. В нашем примере выше мы находимся внутри каталога /foreach , когда собираем образ Docker.

3.3. Запустить Docker-контейнер

На данный момент мы создали файл Dockerfile и создали из него образ Docker. Теперь запустим контейнер Docker:

$ docker run -itd -p 8080:8080 --name my_application_container myapp
e90c61fdb4ac85b198903e4d744f7b0f3c18c9499ed6e2bbe2f39da0211d42c0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e90c61fdb4ac myapp "catalina.sh run" 6 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp my_application_container

Эта команда запустит контейнер Docker с именем my_application_container, используя образ Docker myapp.

Порт по умолчанию для сервера Tomcat — 8080. Поэтому при запуске контейнера Docker обязательно всегда связывайте порт контейнера 8080 с любым доступным портом хоста. Здесь для простоты мы использовали хост-порт 8080.

3.4. Проверьте настройку

Давайте теперь проверим все, что мы сделали до сих пор. Мы получим доступ к URL-адресу http://<IP>:<PORT> в браузере для просмотра приложения.

Здесь IP -адрес обозначает общедоступный IP-адрес (или частный IP-адрес в некоторых случаях) хост-компьютера Docker. PORT — это порт контейнера, который мы открыли при запуске контейнера Docker (в нашем случае — 8080).

Мы также можем проверить настройку с помощью утилиты curl в Linux:

$ curl http://localhost:8080
Hi from ForEach!!!

В приведенной выше команде мы выполняем команду с хост-компьютера Docker. Итак, мы можем подключиться к приложению с помощью localhost. В ответ утилита curl печатает необработанный HTML-код веб-страницы приложения.

4. Вывод

В этой статье мы научились развертывать WAR-файл Java в контейнере Docker. Мы начали с создания Dockerfile, используя официальный образ Tomcat Docker. Затем мы создали образ Docker и запустили контейнер приложения.

Наконец, мы проверили настройку, обратившись к URL-адресу приложения.