Azure: запуск Docker Swarm на Azure Container Service

Автор: | 08/08/2016
 

azure_logoAzure Container Service позволяет использовать контейнеры в Azure.

В примере ниже – запустим Docker Swarm мастер и три агента, после чего с помощью Docker Compose – запустим приложение из приватного репозитория в Docker Hub.

Без особых деталей, больше информации тут>>> и тут>>>.

Деплой ACS Swarm через ARM

Логинимся в Azure:

$ azure login

Выбираем подписку:

$ azure account list
$ azure account set 3a3db38d-***-***-***-24d66ae03e38

Переключаемся в режим Azure Resource Manager:

$ azure config mode arm

Создаём группу ресурсов:

$ azure group create jm-acs-1 -l westeurope

Деплоим swarm-кластер из шаблона 101-acs-swarm:

$ azure group deployment create jm-acs-1 jm-acs-1-init --template-uri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/101-acs-swarm/azuredeploy.json
info:    Executing command group deployment create
info:    Supply values for the following parameters
dnsNamePrefix: jm-app-1
sshRSAPublicKey: ssh-rsa AAAA***
+ Initializing template configurations and parameters                          
+ Creating a deployment                                                        
info:    Created template deployment "jm-acs-1-init"
+ Waiting for deployment to complete                                           
data:    DeploymentName     : jm-acs-1-init
data:    ResourceGroupName  : jm-acs-1
...
data:    masterFQDN  String  jm-app-1mgmt.westeurope.cloudapp.azure.com                         
data:    sshMaster0  String  ssh [email protected] -A -p 2200
data:    agentFQDN   String  jm-app-1agents.westeurope.cloudapp.azure.com                       
info:    group deployment create command OK

Подробнее о деплое из шаблонов – в посте Azure: Resource manager, Azure CLI и деплой resource group.

Проверяем лог деплоя:

$ azure group show jm-acs-1
info:    Executing command group show
+ Listing resource groups                                                      
+ Listing resources for the group                                              
...
data:      Location: westeurope
...

Находим строку подключения к Swarm Master хосту:

$ azure group deployment show jm-acs-1 jm-acs-1-init | grep ssh
data:    sshRSAPublicKey     String  ssh-rsa AAAA***
data:    sshMaster0  String  ssh [email protected] -A -p 2200

Подключаемся, указав ключ через -i:

$ ssh [email protected] -A -p 2200 -i ~/.ssh/setevoy_main
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-65-generic x86_64)
...
azureuser@swarm-master-704BADFB-0:~$

Проверяем состояние Docker:

$ docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 2
...
Insecure Registries:
 127.0.0.0/8

Проверяем его:

$ docker run -it hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c04b14da8d14: Pull complete 
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

Compose

Устанавливаем переменную DOCKER_HOST:

$ export DOCKER_HOST=:2375

Создаём docker-compose.yml:

web:
  image: "username/jm-test-app1:1.0.0-26.1"
  ports:
    - "80:4000"
  restart: "always"

Т.к. мы используем приватный репозиторий – то требуется авторизация:

$ docker login -u username -p password -e [email protected]
Flag --email has been deprecated, will be removed in 1.13.
Login Succeeded

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

$ docker-compose up -d
Pulling web (username/jm-test-app1:1.0.0-26.1)...
swarm-agent-704BADFB000000: Pulling username/jm-test-app1:1.0.0-26.1... : downloaded
Creating azureuser_web_1

Проверяем:

$ docker ps
CONTAINER ID        IMAGE                                     COMMAND                 CREATED              STATUS              PORTS                   NAMES
725d79d09d2b        username/jm-test-app1:1.0.0-26.1   "node /src/server.js"   About a minute ago   Up About a minute   10.0.0.4:80->4000/tcp   swarm-agent-704BADFB000000/azureuser_web_1

Находим URL агента:

$ azure group deployment show jm-acs-1 jm-acs-1-init | grep agentFQDN
data:    agentFQDN   String  jm-app-1agents.westeurope.cloudapp.azure.com

И проверяем приложение:

$ curl jm-app-1agents.westeurope.cloudapp.azure.com
Hello World

Готово.

Ссылки по теме

Deploy an Azure Container Service cluster

Container management with Docker Swarm

Docker Swarm Clusters on Azure

Docker Machine,Swarm and Compose for multi-container and multi-host applications with Couchbase and WildFly