Рубрики
Uncategorized

Запуск нескольких Spring Boot Services с Docker Compose

В этом посте мы рассмотрим, как Docker Compose облегчает настройку и запуск нескольких контейнеров … Tagged с Docker, Docker Compose, DevOps, Spring Boot.

В этом посте мы рассмотрим, как Docker Compose облегчает настройку и запуск нескольких контейнеров в вашей локальной среде.

Почему Docker сочиняет?

Во -первых, вам не нужно Docker Compose для запуска нескольких контейнеров. Вы можете сделать это просто отлично, запустив вручную и остановив контейнеры самостоятельно, как показано ранее в этом Пост Анкет Однако по мере роста количества контейнеров в вашем приложении становится все более громоздким управлять каждым контейнером вручную.

Docker Compose упрощает вещи, позволяя вам настроить мульти -контейнерное приложение в одном файле YAML. Вы можете запустить и остановить все контейнеры в приложении с помощью одной команды.

Пример кода приложения

Я создал образец приложения для этого поста, которое вы можете извлечь из GitHub Анкет Он содержит следующее

  • 2 приложения для загрузки пружины
    • Сервис банковского счета — разоблачает API REST для создания и чтения простых сведений в банке.
    • Служба конфигурации — разоблачает API REST с конфигурацией приложения для службы банковского счета
  • 2 Dockerfiles — чтобы определить изображения контейнеров для вышеуказанных сервисов
  • Docker Compose File, определяющий приложение с несколькими контейнерами

Помимо докера, я не буду вдаваться в подробности о загрузочных службах. Если вы хотите больше информации, вы можете проверить этот предыдущий пост.

Сервис банковского счета Dockerfile

Мы начнем определять изображение Docker для услуги банковского счета.

# MAINTAINER Brian HannawayFROM openjdk:8-jre-alpine
WORKDIR /app
# Add wait script to the image - script pulled from https://github.com/ufoscout/docker-compose-wait/releases/download/2.7.3/wait /wait
COPY /scripts/wait /app/RUN chmod +x /app
RUN apk --no-cache add curl
COPY /target/bank-account-service-0.0.1-SNAPSHOT.jar /app/
CMD ./wait && java -jar bank-account-service-0.0.1-SNAPSHOT.jar

От openjdk: 8-jre-alpine Подсказывает Docker использовать базовое изображение OpenJDK: 8-jre-альпийское изображение.

Workdir/App сообщает Docker создать новый рабочий каталог на изображении под названием /приложение Анкет Все дальнейшие команды будут работать из этого каталога.

Копировать/сценарии/wate/app/ Подсказывает Docker скопировать Подождите Скрипт из Сценарии Справочник на хосту до /приложение каталог на изображении. Я объясню цель Подождите Сценарий подробно позже.

Запустите chmod +x/app делает содержимое /приложение Справочник исполняемого файла

Copy/target/bank-account-service-0.0.1-snapshot.jar/app/ Копирует банку службы из целевого каталога на хосте на /приложение каталог на изображении

Cmd ./wait && java -jar bank-ccount-service-0.0.1-snapshot.jar управляет Подождите Сценарий, за которым следует услуга банковского счета. Сервис не будет работать до Подождите Сценарий завершился.

Служба конфигурации Dockerfile

Далее мы определим изображение Docker Service Service. Это немного более простая версия изображения, которое мы создали для службы банковского счета выше. Мы просто создадим рабочий каталог, копируем в банке службы и запустим его.

FROM openjdk:8-jre-alpine
MAINTAINER Brian Hannaway
WORKDIR /app
COPY /target/config-server-0.0.1-SNAPSHOT.jar /app/
ENTRYPOINT ["java", "-jar", "config-server-0.0.1-SNAPSHOT.jar"]

Определение файла Docker Compose

Теперь, когда мы определили DockerFiles для банковского счета и конфигурационных служб, следующий шаг для создания файла с композитом Docker, который описывает, как мы используем эти изображения для запуска контейнеров.

version: "3"

services: 
   config-service: 
      image: config-service 
      container_name: config-service 
      networks: 
         - micro-service-network 
      ports: 
         - 8888:8888 

   bank-service: 
      image: bank-service 
      container_name: bank-service 
      networks: 
         - micro-service-network 
      ports: 
         - 8080:8080 
      environment: 
         WAIT_HOSTS: config-service:8888

networks: micro-service-network:

Версия: "3" сообщает Docker, что мы используем версию 3 формата файла Docker-Compose. На момент написания версии 3 — последняя и рекомендуемая версия. Версия формата, которую вы используете, будет продиктовать версией Docker-Compose, которую вы используете. Я запускаю Docker версию 19.03.12, что означает, что я должен использовать версию Если вы хотите проверить, какая версия Docker-Compose совместима с вашей версией Docker, ознакомьтесь с этим Матрица совместимости Анкет

Определение услуг

Услуги Раздел определяет контейнеры, которые составляют ваше приложение. Каждое определение службы содержит всю конфигурацию, необходимую для запуска контейнера с изображения. Информация в каждом определении службы — это то, что вы обычно поставляете в командной строке, запуская контейнер вручную.

config-service: 
   image: config-service 
   container_name: config-service 
   networks: 
      - micro-service-network 
   expose: - "8888"

Служба конфигурации

конфигурация Раздел определяет все, что Docker конфигурации должна запустить контейнер для конфигурации

Изображение сообщает сочинять, какое изображение использовать для запуска контейнера.

Container_name это имя, данное контейнеру, когда он начинается. Если мы не указам имя, Compose выведет его на основе имени файла Compose и имени изображения. Например, если я опускаю атрибут имени для конфигурация и бежать Docker-Compose Up , Я вижу, что контейнеры, полученные, имя Boot-Microservices-Docker-Compose_config-service_1 Анкет

Как правило, это хорошая идея, чтобы дать вашим контейнерам значимое имя. Позже вы увидите, что нам нужно ссылаться на конфигурация из Банк-сервис Анкет Мы сделаем это, используя имя, указанное в Container_name Анкет

Сети Определяет сети, которые конфигурация Контейнер присоединится, когда он начнется. В этом случае он присоединится к Микро-сервисная сеть , что мы определим позже.

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

Банковский сервис

Банк-сервис Определение очень похоже на то, что мы уже определили, с изображение , Container_name В сети и разоблачить Атрибуты похожи на те, которые определены для конфигурация

bank-service:
   image: bank-service 
   container_name: bank-service 
   networks: 
      - micro-service-network 
   expose: - "8080" 
   environment: 
      WAIT_HOSTS: config-service:8888

среда Атрибут используется для указания списка переменных среды для контейнера. В Банк-сервис Мы указываем переменную среды Wait_hosts и дайте ему значение Конфигурация: 8888 Анкет Короче говоря, это необходимо для управления запуска контейнера и убедиться, что конфигурация Работает и работает до Банк-сервис начинается. Я объясню это подробно позже.

Определение сети

Сети Раздел позволяет вам определить сеть для ваших услуг. Для нашего приложения мы определили сеть под названием Микро-сервисная сеть Анкет Когда вы бежите Docker составить , каждый начинающий контейнер будет добавлен в Микро-сервис-сети и будет видна для любого другого контейнера в приложении. Контейнеры могут ссылаться друг на друга через свое имя хоста, которое такое же, как и имя службы. Итак, в нашем примере приложения Банки-сервис может получить доступ к конфигурация как Конфигурация: 8888.

Если мы явно не определим Сеть , Docker создаст один по умолчанию и добавит все услуги в файл Compose.

Запуск приложения

Запуск Docker-Compose Up командование будем

  • Создайте мостовую сеть под названием Микро-сервисная сеть
  • Запустите контейнер, используя конфигурация изображение. Контейнер разоблачит порт 8888 на Микро-сервисная сеть и будет доступен для других контейнеров через имя хоста конфигурация Анкет
  • Запустите контейнер, используя Банк-сервис изображение. Контейнер разоблачит порт 8080 на Микро-сервисная сеть и будет доступен для других контейнеров через имя хоста Банк-сервис Анкет

Это занимает приблизительно 20 секунд для обоих Банк-сервис и конфигурация начать. Если вы бежите Контейнер Docker LS Вы должны увидеть два контейнера, которые были только что созданы.

Зависимости от обслуживания и запуск стартапа

Обычно он имеет зависимости между контейнерами, так что контейнер A требует, чтобы контейнер B был выполнен до начала контейнера A. Compose позволяет вам в определенной степени обрабатывать этот сценарий, определив заказ запуска, используя зависит_on атрибут. Например, файл Compose ниже определяет Интернет Сервис и DB Сервис, где Интернет зависит от

version: '3'

services: 
   web: 
      image: myWebApp 
      depends_on: 
         - db 
      db: 
         image: postgres

В приведенном выше примере Compose запустит контейнеры в порядке зависимости, поэтому DB Будет начато до Интернет Анкет Хотя зависит_on Устанавливает заказ, в котором запускаются контейнеры, он не гарантирует, что постгры, внутри DB Контейнер полностью работает до Интернет Контейнер начинается.

У нас аналогичная проблема в нашем примере, потому что Банк-сервис пытается позвонить конфигурация при запуске. Если конфигурация Не полностью встал и не доступен для получения запросов на порту 8888, Банк-сервис не удастся. Используя зависит_on Атрибут, чтобы начать конфигурация Во -первых, не гарантирует, что конфигурация полностью эксплуатируется до Банк-сервис называет это.

Представление докера-скомплектования

Docker-Compose-Wait это отличная утилита командной строки, которая решает проблему, описанную выше. При определении Банк-сервис Ранее мы делали докер-скомплексной ожидания, доступным для изображения, копировав Подождите Скрипт в приложение каталог.

# Add wait script to the image - script pulled from https://github.com/ufoscout/docker-compose-wait/releases/download/2.7.3/wait /waitCOPY /scripts/wait /app/

Затем мы сказали Docker запустить Подождите Скрипт вместе с банкой при запуске контейнера.

CMD ./wait && java -jar bank-account-service-0.0.1-SNAPSHOT.jar

Когда мы определили Банк-сервис В файл Docker-Compose мы включили Wait_hosts переменная среды, на которую ссылается конфигурация на порту 8888. Когда мы бежим Docker-Compose Up , Подождите Скрипт пинг конфигурация на порту 8888. Это не позволит Банк-сервис Контейнер для начала до конфигурация работает и работает на порту 8888.

Мы можем увидеть это в действии в фрагментах журнала ниже. Подождите Скрипт проверяет, если конфигурация Доступен на порту 8888, первоначально сообщая, что он недоступен.

В конце концов конфигурация начальные загрузки и работают на порту 8888. Подождите Сценарий затем сообщает Конфигурация хоста: 8888 теперь доступен и Банк-сервис Контейнер запускается.

Завершая

В этом посте мы рассмотрели, как Docker-Compose позволяет легко управлять несколькими контейнерами в простой среде одного узла. Это особенно полезно для средств разработки и автоматических тестовых сред. Если вы хотите управлять несколькими контейнерами в мульти -узловой среде, то Docker Swarm — лучше. Мы скоро посмотрим на рой в другом посте.

Пост Запуск нескольких Spring Boot Services с Docker Compose появился первым на BriansDevblog Анкет

Оригинал: «https://dev.to/briansdevblog/running-multiple-spring-boot-services-with-docker-compose-5c2g»