Статьи

Микросервисы JVM — приложение на основе JVM в качестве контейнера Docker

Продолжение руководства по интеграции Windows и Docker . Цель этого поста — показать быстрый и простой способ создания нового проекта JVM и запустить его в качестве контейнера Docker в Windows .

В предыдущем посте я описал, как настроить среду Docker на ПК под Windows и запустить существующий контейнер Docker . Теперь пришло время создать собственный проект JVM , создать образ Docker и запустить его.

Когда дело доходит до быстрого прототипирования чего-либо на платформе JVMGroovy — отличный выбор языка. Кроме того, использование Groovy в этом руководстве является прекрасным примером многоязычного характера микросервисов JVM базе Docker . Для инструмента сборки мой естественный выбор — Gradle , который также будет использоваться в этом руководстве.

Настройте Gradle с помощью sdkman

Gradle можно установить и добавить в PATH вручную, но существует инструмент sdkman , который значительно упрощает установку Gradle и других утилит. Итак, я бы посоветовал потратить несколько минут, чтобы настроить его и использовать для установки Gradle .

  1. Прежде всего следует установить unzip , так как это требуется для установщика sdkman . В новой консоли bash выполните.
    1
    $ pacman -S unzip
  2. Затем установите sdkman .
    1
    $ export SDKMAN_DIR="$HOME/.sdkman" && curl -s get.sdkman.io | bash
  3. После установки могут возникнуть проблемы с запуском sdkman в среде msys2 . Причина объяснена в соответствующем выпуске GitHub

    1. Чтобы исправить это, откройте файл ~/.sdkman/bin/sdkman-init.sh и найдите строку.
      1
      if [[ -n "${CANDIDATE_NAME}" && -h "${CANDIDATE_DIR}" ]]; then
    2. Замените это на.
      1
      if [[ -n "${CANDIDATE_NAME}" && -d "${CANDIDATE_DIR}" ]]; then
  4. Теперь sdkman готов, откройте новую консоль bash и установите последнюю версию Gradle .
    1
    $ sdk install gradle
  5. Убедитесь, что Gradle был установлен правильно (может потребоваться открытие нового bash ).
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    $ gradle --version
     
    ------------------------------------------------------------
    Gradle 2.9
    ------------------------------------------------------------
     
    Build time:   2015-11-17 07:02:17 UTC
    Build number: none
    Revision:     b463d7980c40d44c4657dc80025275b84a29e31f
     
    Groovy:       2.4.4
    Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
    JVM:          1.8.0_45 (Oracle Corporation 25.45-b02)
    OS:           Windows 8.1 6.3 amd64

Образец Groovy приложения

  1. Структура папок проекта может быть сгенерирована с помощью задачи Gradle .
    1
    $ gradle init --type groovy-library
  2. После генерации Library.groovy и LibraryTest.groovy могут быть удалены.
  3. Создать главное приложение class.ua.eshepelyuk.blog.Hello.groovy
    1
    2
    3
    package ua.eshepelyuk.blog
     
    println "Hello from Docker by Groovy and Gradle" (1)

    (1) объявление public static void main может быть опущено в Groovy

    Хотя gradle init генерирует скрипты- обертки Gradle , я не буду использовать их в этом руководстве. Для реальных проектов я бы предложил использовать обертку и не полагаться на локальную установку Gradle .

    Включить поддержку Docker для скрипта сборки проекта

    При использовании Gradle вам не нужно иметь дело с Dockerfile и другими вещами для создания образа Docker . Для этого есть плагины :))

    Чтобы включить и настроить их, просто добавьте несколько строк в build.gradle как описано ниже.

    Включить плагины

    build.gradle

    1
    2
    3
    4
    5
    plugins {
        id 'groovy'
        id 'application' (1)
        id 'com.bmuschko.docker-java-application' version '2.6.1' (2)
    }

    (1) Плагин для создания работающего приложения, которое может быть встроено в образ Docker

    (2) Плагин поддержки Docker

    Настроить плагины

    build.gradle

    1
    2
    3
    4
    5
    6
    7
    8
    mainClassName = 'ua.eshepelyuk.blog.Hello' (1)
     
    docker {
        url = System.env.DOCKER_HOST.replaceAll("tcp", "https") (2)
        javaApplication {
            tag = "eshepelyuk/hellodockergradle:latest" (3)
        }
    }

    (1) Точка входа для плагина application

    (2) Исправление URL-адреса док-машины для Java API

    (3) Имя тега изображения Docker

    Создайте образ и запустите контейнер Docker

    Прежде чем перейти к дальнейшим действиям, необходимо запустить скрипт start.sh из Docker для установки Windows. Пожалуйста, обратитесь к предыдущему сообщению для деталей.

    1. Выполните команду для создания образа Docker .
      1
      $ gradle dockerBuildImage
    2. Проверьте, доступно ли новое изображение, запустив docker image . Вывод команды должен включать новое изображение с тегом eshepelyuk/hellodockergradle (настройка из build.gradle ).
      1
      2
      3
      4
      5
      $ docker images
      REPOSITORY                        TAG                 IMAGE ID            CREATED                  VIRTUAL SIZE
      ..
      eshepelyuk/hellodockergradle   latest              daa12bd8bb4f        About a minute ago   649 MB
      ..
    3. Запустите контейнер с помощью docker run и проверьте вывод на соответствие ожидаемому классу Hello.groovy .
      1
      2
      $ docker run eshepelyuk/hellodockergradle
      Hello from Docker by Groovy and Gradle

    Полный код проекта доступен на My GitHub