Статьи

Развертывание приложения Java EE в Docker Swarm Cluster

Что такое Docker Swarm?

Docker Swarm  предоставляет родную кластеризацию для Docker. Кластеризация с использованием Docker Swarm 0.2.0  представляет собой базовое введение в Docker Swarm и как создать простой кластер из трех узлов. Для повышения квалификации ключевые компоненты Docker Swarm показаны ниже:

Короче говоря,  Swarm Manager  — это предопределенный Docker Host, который является единой точкой для всего администрирования. Дополнительные хосты Docker идентифицируются как  узлы  и обмениваются данными с диспетчером по протоколу TCP. По умолчанию Swarm использует размещенную  службу обнаружения на основе Docker Hub, используя токены для обнаружения узлов, являющихся частью кластера. На каждом узле запускается  агент узла,  который регистрирует указанный демон Docker, отслеживает его и обновляет службу обнаружения со статусом узла. Контейнеры работают на узле.

Этот блог  содержит полную информацию, но краткая сводка по созданию кластера приведена ниже:


# Create cluster
TOKEN=`docker run swarm create`
# Creating Swarm master
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://$TOKEN swarm-master
# Creating swarm node 01
docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN swarm-node-01
Create swarm node 02
docker-machine create -d virtualbox --swarm --swarm-discovery token://$TOKEN swarm-node-02

Список кластера показывает:


NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
swarm-master             virtualbox   Running   tcp://192.168.99.106:2376   swarm-master (master)
swarm-node-01            virtualbox   Running   tcp://192.168.99.107:2376   swarm-master
swarm-node-02   *        virtualbox   Running   tcp://192.168.99.108:2376   swarm-master

У него есть один мастер и два узла.

Разверните приложение Java EE в Docker Swarm

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

Связывание контейнеров Docker с несколькими хостами  объясняет, как связать контейнеры с несколькими хостами Docker. Он развертывает приложение Java EE 7 в WildFly на одном хосте Docker и связывает его с контейнером MySQL, работающим на другом хосте Docker. Мы можем развернуть оба этих контейнера с помощью виртуального хоста, и затем они будут развернуты в кластере Docker Swarm.

Давайте начнем!

MySQL на Docker Swarm

  1. Запустите контейнер MySQL
    
    docker run --name mysqldb -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -e MYSQL_DATABASE=sample -e MYSQL_ROOT_PASSWORD=supersecret -p 3306:3306 -d mysql
  2. Статус контейнера можно увидеть как:
    
    CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                           NAMES
    b49d627a0431        mysql:latest        "/entrypoint.sh mysq   5 minutes ago       Up 4 minutes        192.168.99.107:3306->3306/tcp   swarm-node-01/mysqldb
  3. Это показывает, что контейнер работает  swarm-node-01. Убедитесь, что вы подключены к кластеру Docker Swarm с помощью  eval $(docker-machine env --swarm swarm-master).
  4. Найдите IP-адрес хоста, на котором запущен этот контейнер:
    
    ~> docker inspect --format '{{ .Node.Ip }}' $(docker ps -q --filter 'name=*mysqldb*')
    192.168.99.107

WildFly на Docker Swarm

  • Запустите сервер приложений WildFly, передав IP-адрес хоста и порт, на котором работает сервер MySQL: 
  • Статус контейнера можно увидеть как:
    
    ~> docker ps
    CONTAINER ID        IMAGE                                  COMMAND                CREATED             STATUS              PORTS                           NAMES
    ab5717083812        arungupta/wildfly-mysql-javaee7:host   "/opt/jboss/wildfly/   25 minutes ago      Up 25 minutes       192.168.99.108:8080->8080/tcp   swarm-node-02/mywildfly   
    b49d627a0431        mysql:latest                           "/entrypoint.sh mysq   34 minutes ago      Up 33 minutes       192.168.99.107:3306->3306/tcp   swarm-node-01/mysqldb
  • Наслаждайтесь!