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-адресу приложения.