Что такое 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
- Запустите контейнер 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
- Статус контейнера можно увидеть как:
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
- Это показывает, что контейнер работает
swarm-node-01
. Убедитесь, что вы подключены к кластеру Docker Swarm с помощьюeval $(docker-machine env --swarm swarm-master)
. - Найдите IP-адрес хоста, на котором запущен этот контейнер:
~> docker inspect --format '{{ .Node.Ip }}' $(docker ps -q --filter 'name=*mysqldb*') 192.168.99.107
WildFly на Docker Swarm
~> 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
Наслаждайтесь!