7.3.9.1. Развертывание монолитного Uber JAR

Откройте проект CUBA в Студии, выполните действие Deployment settings, перейдите на вкладку Uber JAR и затем отредактируйте настройки, как описано ниже.

  1. Включите Build Uber JAR

  2. Включите Single Uber JAR если не включено.

  3. Нажмите кнопку Generate находящуюся справа от поля Logback configuration file.

  4. Нажмите кнопку Generate находящуюся справа от поля Custom Jetty environment file. Во всплывающем окне заполните параметры подключения к БД. Для использования в приложении стандартного контейнера PostgreSQL, нужно заменить localhost на postgres в поле Database URL.

  5. Сохраните настройки.

Соберите JAR-файл, выполнив команду buildUberJar в Gradle. Вы можете сделать это прямо в Студии, открыв диалог Search, или из командной строки:

gradle buildUberJar

Docker-образ с проектом CUBA должен использовать базовый образ OpenJDK. Для указания информации, необходимой Docker для запуска приложения, используется файл Dockerfile. Dockerfile — это текстовый файл, в котором содержится список команд Docker-клиента. Это простой способ автоматизировать процесс создания образа. В файле можно указать базовый образ Docker для запуска, местоположения кода проекта, а так же необходимые зависимости и команды, которые нужно использовать при запуске контейнера.

  1. Создайте в проекте папку docker-image.

  2. Скопируйте в неё JAR-файл.

  3. Создайте Dockerfile. Файл должен содержать следующий текст:

### Dockerfile

FROM openjdk:8

COPY . /usr/src/cuba-sales

CMD java -Dapp.home=/usr/src/cuba-sales/home -jar /usr/src/cuba-sales/app.jar
  • Инструкция FROM инициализирует новый этап сборки и устанавливает базовый образ для последующих инструкций.

  • Инструкция COPY копирует новые файлы или директории из <src> и добавляет их в файловую систему контейнера по пути <dest>. Можно указать несколько ресурсов <src> , но они должны относиться к исходному каталогу, в котором запушена сборка.

  • Главное предназначение инструкции CMD — сообщить контейнеру какие команды нужно выполнить при старте.

Для получения дополнительной информации об инструкциях Dockerfile см. Dockerfile reference.

Теперь можно создать образ:

  1. Откройте терминал из папки docker-image.

  2. Запустите команду сборки. Команда docker build довольно проста: она принимает опциональный тег с флагом -t и путь до директории, в которой лежит Dockerfile, Точка . означает текущую директорию.

docker build -t cuba-sample-sales .

Если у вас нет образа openjdk:8 то Docker-клиент сначала скачает его, а потом создаст образ приложения CUBA.

Для определения и запуска много-контейнерных Docker приложений используется инструмент Docker Compose. Вся конфигурация для docker-compose описывается в файле docker-compose.yml, и с его помощью можно одной командой поднять приложение с необходимым набором сервисов.

Конфигурационный файл будет иметь следующую сруктуру:

version: '2'

services:
  postgres:
    image: postgres:9.6.6
    environment:
      - POSTGRES_PASSWORD=cuba
      - POSTGRES_USER=cuba
      - POSTGRES_DB=sales
    ports:
     - "5433:5432"
    networks:
     - sales-network
  web:
    image: cuba-sample-sales
    ports:
     - "8080:8080"
    networks:
     - sales-network

networks:
  sales-network:

В этом файле определены два сервиса, web and postgres. Сервис web:

  • использует образ приложения CUBA, который был создан с помощью Dockerfile,

  • пробрасывает порт 8080 контейнера на порт 8080 хоста.

Сервис postgres использует публичный образ Postgres, скачанный из репозитория Docker Hub.

Для запуска приложения перейдите в директорию с файлом docker-compose.yml и выполните команду:

docker-compose up

Приложение будет доступно по адресу http://localhost:8080/app.