Docker Compose для Orchestrate Containers показывает, как запустить два связанных Docker-контейнера с помощью Docker Compose . Кластеризация с использованием Docker Swarm показывает, как настроить кластер Docker Swarm.
В этом блоге будет показано, как запустить мультиконтейнерное приложение, созданное с помощью Docker Compose в кластере Docker Swarm.
Обновленная версия Docker Compose и Docker Swarm выпущена с Docker 1.7.0 .
Docker 1.7.0 CLI
Получите последнюю версию CLI Docker:
1
|
curl https: //get .docker.com /builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker |
и проверьте версию как:
1
2
|
docker - v Docker version 1.7.0, build 0baf609 |
Docker Machine 0.3.0
Получите последнюю версию Docker Machine как:
1
|
curl -L https: //github .com /docker/machine/releases/download/v0 .3.0 /docker-machine_darwin-amd64 > /usr/local/bin/docker-machine |
и проверьте версию как:
1
2
|
docker-machine - v docker-machine version 0.3.0 (0a251fe) |
Docker Compose 1.3.0
Получите последнюю версию Docker Compose как:
1
2
|
curl -L https: //github .com /docker/compose/releases/download/1 .3.0 /docker-compose- ` uname -s`-` uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose |
и проверьте версию как:
1
2
3
4
|
docker-compose - v docker-compose version: 1.3.0 CPython version: 2.7.9 OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014 |
Docker Swarm 0.3.0
Swarm запускается как Docker-контейнер и может быть загружен как:
1
|
docker pull swarm |
Вы можете узнать о Docker Swarm на docs.docker.com/swarm или о кластеризации с помощью Docker Swarm .
Создать Docker Swarm Cluster
Ключевые компоненты Docker Swarm показаны ниже:
и объяснил в кластеризации с помощью Docker Swarm .
- Самый простой способ начать работу с Swarm — использовать официальный образ Docker:
1
docker run swarm create
Эта команда возвращает токен обнаружения, называемый в этом документе <TOKEN>, и является уникальным идентификатором кластера. Он будет использоваться при создании мастера и узлов позже. Этот идентификатор кластера возвращается размещенной службой обнаружения в Docker Hub.
Он показывает вывод как:
0102030405060708091011121314docker run swarm create
Unable to
find
image
'swarm:latest'
locally
latest: Pulling from swarm
55b38848634f: Pull complete
fd7bc7d11a30: Pull complete
db039e91413f: Pull complete
1e5a49ab6458: Pull complete
5d9ce3cdadc7: Pull complete
1f26e949f933: Pull complete
e08948058bed: Already exists
swarm:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:0e417fe3f7f2c7683599b94852e4308d1f426c82917223fccf4c1c4a4eddb8ef
Status: Downloaded newer image
for
swarm:latest
1d528bf0568099a452fef5c029f39b85
Последняя строка — это <TOKEN>.
Обязательно запишите этот идентификатор кластера сейчас, так как нет возможности перечислить его позже. Это должно быть исправлено с # 661 .
- Swarm полностью интегрирован с Docker Machine, и это самый простой способ начать работу. Давайте создадим Swarm Master следующим образом:
1
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token:
//
<TOKEN> swarm-master
Замените
<TOKEN>
идентификатором кластера, полученным на предыдущем шаге.--swarm
настраивает машину с помощью Swarm,--swarm-master
настраивает созданную машину как Swarm master. Создание мастера Swarm связывается с размещенным сервисом в Docker Hub и сообщает, что мастер создан в кластере. - Подключитесь к этому вновь созданному мастеру и найдите дополнительную информацию о нем:
12
eval
"$(docker-machine env swarm-master)"
docker info
Это покажет вывод как:
01020304050607080910111213141516171819202122232425262728> docker info
Containers: 2
Images: 7
Storage Driver: aufs
Root Dir:
/mnt/sda1/var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 11
Dirperm1 Supported:
true
Execution Driver: native-0.2
Logging Driver: json-
file
Kernel Version: 4.0.5-boot2docker
Operating System: Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015
CPUs: 1
Total Memory: 996.2 MiB
Name: swarm-master
ID: DLFR:OQ3E:B5P6:HFFD:VKLI:IOLU:URNG:HML5:UHJF:6JCL:ITFH:DS6J
Debug mode (server):
true
File Descriptors: 22
Goroutines: 36
System Time: 2015-07-11T00:16:34.29965306Z
EventsListeners: 1
Init SHA1:
Init Path:
/usr/local/bin/docker
Docker Root Dir:
/mnt/sda1/var/lib/docker
Username: arungupta
Registry: https:
//index
.docker.io
/v1/
Labels:
provider=virtualbox
- Создайте узел Swarm:
1
docker-machine create -d virtualbox --swarm --swarm-discovery token:
//
<TOKEN> swarm-node-01
Замените
<TOKEN>
идентификатором кластера, полученным на предыдущем шаге.Создание узла связывается с размещенным сервисом в Docker Hub и присоединяется к ранее созданному кластеру. Это указывается с помощью
--swarm-discovery token://...
и указывает идентификатор кластера, полученный ранее. - Чтобы сделать его реальным кластером, давайте создадим второй узел:
1
docker-machine create -d virtualbox --swarm --swarm-discovery token:
//
<TOKEN> swarm-node-02
Замените
<TOKEN>
идентификатором кластера, полученным на предыдущем шаге. - Перечислите все узлы, созданные на данный момент:
1
docker-machine
ls
Это показывает вывод, похожий на приведенный ниже:
1234567docker-machine
ls
NAME ACTIVE DRIVER STATE URL SWARM
lab virtualbox Running tcp:
//192
.168.99.101:2376
summit2015 virtualbox Running tcp:
//192
.168.99.100:2376
swarm-master * virtualbox Running tcp:
//192
.168.99.102:2376 swarm-master (master)
swarm-node-01 virtualbox Running tcp:
//192
.168.99.103:2376 swarm-master
swarm-node-02 virtualbox Running tcp:
//192
.168.99.104:2376 swarm-master
Машины, которые являются частью кластера, имеют имя кластера в столбце SWARM, в противном случае пустым. Например, «lab» и «summit2015» являются автономными машинами, где, как и все остальные машины, являются частью кластера «swarm-master». Мастер Роя также идентифицирован (мастер) в столбце Рой.
- Подключитесь к кластеру Swarm и найдите некоторую информацию об этом:
12
eval
"$(docker-machine env --swarm swarm-master)"
docker info
Это показывает вывод как:
010203040506070809101112131415161718192021222324> docker info
Containers: 4
Images: 3
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 3
swarm-master: 192.168.99.102:2376
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.022 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
swarm-node-01: 192.168.99.103:2376
└ Containers: 1
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.022 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
swarm-node-02: 192.168.99.104:2376
└ Containers: 1
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.022 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 3
Total Memory: 3.065 GiB
Есть 3 узла — один мастер Swarm и 2 узла Swarm. Всего в этом кластере работает 4 контейнера — один агент Swarm на главном сервере и каждый узел, а на главном сервере работает дополнительный swarm-agent-master.
- Перечислите узлы в кластере с помощью следующей команды:
1
docker run swarm list token:
//
<TOKEN>
Это показывает вывод как:
1234> docker run swarm list token:
//1d528bf0568099a452fef5c029f39b85
192.168.99.103:2376
192.168.99.104:2376
192.168.99.102:2376
Развертывание приложения Java EE в Docker Swarm Cluster с помощью Docker Compose
Docker Compose для Orchestrate Containers объясняет, как приложения с несколькими контейнерами могут быть легко запущены с помощью Docker Compose.
- Используйте файл
docker-compose.yml
описанный в этом блоге, чтобы запустить контейнеры следующим образом:123docker-compose up -d
Creating wildflymysqljavaee7_mysqldb_1...
Creating wildflymysqljavaee7_mywildfly_1...
Файл
docker-compose.yml
выглядит так:01020304050607080910111213mysqldb:
image: mysql:latest
environment:
MYSQL_DATABASE: sample
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_ROOT_PASSWORD: supersecret
mywildfly:
image: arungupta
/wildfly-mysql-javaee7
links:
- mysqldb:db
ports:
- 8080:8080
- Проверьте контейнеры, работающие в кластере, как:
12
eval
"$(docker-machine env --swarm swarm-master)"
docker info
чтобы увидеть результат как:
010203040506070809101112131415161718192021222324docker info
Containers: 7
Images: 5
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 3
swarm-master: 192.168.99.102:2376
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.022 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
swarm-node-01: 192.168.99.103:2376
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.022 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
swarm-node-02: 192.168.99.104:2376
└ Containers: 3
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 1.022 GiB
└ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 3
Total Memory: 3.065 GiB
- «Swarm-node-02» запускает три контейнера, поэтому давайте посмотрим на список работающих контейнеров:
1
eval
"$(docker-machine env swarm-node-02)"
и увидеть список запущенных контейнеров как:
12345docker
ps
-a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b1e7d9bd2c09 arungupta
/wildfly-mysql-javaee7
"
/opt/jboss/wildfly/
38 seconds ago Up 37 seconds 0.0.0.0:8080->8080
/tcp
wildflymysqljavaee7_mywildfly_1
ac9c967e4b1d mysql:latest "
/entrypoint
.sh mysq 38 seconds ago Up 38 seconds 3306
/tcp
wildflymysqljavaee7_mysqldb_1
45b015bc79f4 swarm:latest "
/swarm
join
--addr 20 minutes ago Up 20 minutes 2375
/tcp
swarm-agent
- Приложение может быть снова доступно с помощью:
1
curl http:
//
$(docker-machine ip swarm-node-02):8080
/employees/resources/employees
и показывает вывод как:
1<?<span class=
"pl-ent"
>xml<
/span
><span class=
"pl-e"
> version<
/span
>=<span class=
"pl-s"
><span class=
"pl-pds"
>
"</span>1.0<span class="
pl-pds
">"
<
/span
><
/span
><span class=
"pl-e"
> encoding<
/span
>=<span class=
"pl-s"
><span class=
"pl-pds"
>
"</span>UTF-8<span class="
pl-pds
">"
<
/span
><
/span
><span class=
"pl-e"
> standalone<
/span
>=<span class=
"pl-s"
><span class=
"pl-pds"
>
"</span>yes<span class="
pl-pds
">"
<
/span
><
/span
>?><<span class=
"pl-ent"
>collection<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>1</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Penny</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>2</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Sheldon</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>3</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Amy</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>4</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Leonard</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>5</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Bernadette</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>6</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Raj</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>7</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Howard</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>employee<
/span
>><<span class=
"pl-ent"
>
id
<
/span
>>8</<span class=
"pl-ent"
>
id
<
/span
>><<span class=
"pl-ent"
>name<
/span
>>Priya</<span class=
"pl-ent"
>name<
/span
>></<span class=
"pl-ent"
>employee<
/span
>></<span class=
"pl-ent"
>collection<
/span
>>
- Последние инструкции для этой настройки всегда доступны по адресу: github.com/javaee-samples/docker-java/blob/master/chapters/docker-swarm.adoc .
Наслаждайтесь!
Ссылка: | Многоконтейнерные приложения с использованием Docker Compose и Swarm от нашего партнера по JCG Аруна Гупта из блога Miles to go 2.0… . |