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 -vDocker 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 -vdocker-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-composechmod +x /usr/local/bin/docker-compose | 
и проверьте версию как:
| 
 1 
2 
3 
4 
 | 
docker-compose -vdocker-compose version: 1.3.0CPython version: 2.7.9OpenSSL 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 createUnable tofindimage'swarm:latest'locallylatest: Pulling from swarm55b38848634f: Pull completefd7bc7d11a30: Pull completedb039e91413f: Pull complete1e5a49ab6458: Pull complete5d9ce3cdadc7: Pull complete1f26e949f933: Pull completee08948058bed: Already existsswarm: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:0e417fe3f7f2c7683599b94852e4308d1f426c82917223fccf4c1c4a4eddb8efStatus: Downloaded newer imageforswarm:latest1d528bf0568099a452fef5c029f39b85Последняя строка — это <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 infoContainers: 2Images: 7Storage Driver: aufsRoot Dir:/mnt/sda1/var/lib/docker/aufsBacking Filesystem: extfsDirs: 11Dirperm1 Supported:trueExecution Driver: native-0.2Logging Driver: json-fileKernel Version: 4.0.5-boot2dockerOperating System: Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015CPUs: 1Total Memory: 996.2 MiBName: swarm-masterID: DLFR:OQ3E:B5P6:HFFD:VKLI:IOLU:URNG:HML5:UHJF:6JCL:ITFH:DS6JDebug mode (server):trueFile Descriptors: 22Goroutines: 36System Time: 2015-07-11T00:16:34.29965306ZEventsListeners: 1Init SHA1:Init Path:/usr/local/bin/dockerDocker Root Dir:/mnt/sda1/var/lib/dockerUsername: arunguptaRegistry: 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-machinelsЭто показывает вывод, похожий на приведенный ниже:
1234567docker-machinelsNAME ACTIVE DRIVER STATE URL SWARMlab virtualbox Running tcp://192.168.99.101:2376summit2015 virtualbox Running tcp://192.168.99.100:2376swarm-master * virtualbox Running tcp://192.168.99.102:2376 swarm-master (master)swarm-node-01 virtualbox Running tcp://192.168.99.103:2376 swarm-masterswarm-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 infoContainers: 4Images: 3Role: primaryStrategy: spreadFilters: affinity, health, constraint, port, dependencyNodes: 3swarm-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=aufsswarm-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=aufsswarm-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=aufsCPUs: 3Total 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://1d528bf0568099a452fef5c029f39b85192.168.99.103:2376192.168.99.104:2376192.168.99.102:2376 
Развертывание приложения Java EE в Docker Swarm Cluster с помощью Docker Compose
Docker Compose для Orchestrate Containers объясняет, как приложения с несколькими контейнерами могут быть легко запущены с помощью Docker Compose.
-   Используйте файл 
docker-compose.ymlописанный в этом блоге, чтобы запустить контейнеры следующим образом:123docker-compose up -dCreating wildflymysqljavaee7_mysqldb_1...Creating wildflymysqljavaee7_mywildfly_1...Файл
docker-compose.ymlвыглядит так:01020304050607080910111213mysqldb:image: mysql:latestenvironment:MYSQL_DATABASE: sampleMYSQL_USER: mysqlMYSQL_PASSWORD: mysqlMYSQL_ROOT_PASSWORD: supersecretmywildfly:image: arungupta/wildfly-mysql-javaee7links:- mysqldb:dbports:- 8080:8080 -   Проверьте контейнеры, работающие в кластере, как:
12
eval"$(docker-machine env --swarm swarm-master)"docker infoчтобы увидеть результат как:
010203040506070809101112131415161718192021222324docker infoContainers: 7Images: 5Role: primaryStrategy: spreadFilters: affinity, health, constraint, port, dependencyNodes: 3swarm-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=aufsswarm-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=aufsswarm-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=aufsCPUs: 3Total Memory: 3.065 GiB -   «Swarm-node-02» запускает три контейнера, поэтому давайте посмотрим на список работающих контейнеров:
1
eval"$(docker-machine env swarm-node-02)"и увидеть список запущенных контейнеров как:
12345dockerps-aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESb1e7d9bd2c09 arungupta/wildfly-mysql-javaee7"/opt/jboss/wildfly/38 seconds ago Up 37 seconds 0.0.0.0:8080->8080/tcpwildflymysqljavaee7_mywildfly_1ac9c967e4b1d mysql:latest "/entrypoint.sh mysq 38 seconds ago Up 38 seconds 3306/tcpwildflymysqljavaee7_mysqldb_145b015bc79f4 swarm:latest "/swarmjoin--addr 20 minutes ago Up 20 minutes 2375/tcpswarm-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… . | 
