Implementação do Docker na Amazon usando o Tutum explicou como implantar uma imagem do Docker no Tutorial do Docker. Tutum agora é Nuvem do Docker.
Ler Anunciando o Docker Cloud para obter mais detalhes.

Os principais recursos do Docker Cloud são:
- Autenticação usando o Docker ID
- Integração com o Docker Hub
- Suporte para Repositórios oficiais do Docker
- Mecanismo Docker com suporte comercial
- Capacidade de implementar e dimensionar seus aplicativos usando GUI, API e CLI
Este blog mostrará:
- Conceitos-chave do Docker Cloud
- Como criar um novo nó do Docker Cloud
- Como instalar o Docker Cloud CLI
- Como criar um novo Docker Cloud Service
- Acessar o servidor Couchbase no Docker Cloud
- Como encerrar o Docker Cloud Service e o Node
E, por fim, ele deixará algumas referências para os documentos do Docker Cloud.
O blog usará Servidor Couchbase - um banco de dados de documentos JSON de código aberto, altamente dimensionável, para a imagem do Docker.
Docker Cloud TL;DR
Aqui estão os comandos rápidos para executar uma imagem do Docker usando o Docker Cloud na Amazon:
|
1 2 3 4 5 |
brew install docker-cloud docker-cloud nodecluster create -t 1 --tag couchbase couchbase-node aws us-west-1 m3.large docker-cloud service create --tag couchbase -p 8091:8091 -p 8092:8092 -p 8093:8093 -p 11210:11210 arungupta/couchbase docker-cloud service start {SERVICE_ID} docker-cloud service inspect {SERVICE_ID} | jq ".container_ports[0].endpoint_uri" | sed 's/tcp/http/g' |
Mais detalhes abaixo.
Principais conceitos da nuvem do Docker
Vamos entender os principais conceitos do Docker Cloud:
- Nós são hosts/VMs Linux individuais usados para implementar e executar seus aplicativos. Novos nós podem ser provisionados para aumentar a capacidade. O Docker Cloud não fornece serviços de hospedagem. Os nós são provisionados usando servidores físicos, máquinas virtuais ou provedores de nuvem.
- Cluster de nóss são grupos lógicos de nós do mesmo tipo. Os clusters de nós permitem dimensionar a infraestrutura com facilidade, provisionando mais nós.
- Serviços são grupos lógicos de contêineres da mesma imagem. Os serviços simplificam o dimensionamento do aplicativo em diferentes nós.
O Docker Cloud pode ser gerenciado com Web, CLI ou API REST. Este blog usará a CLI do Docker Cloud para executar todos os comandos.
Instalar a CLI do Docker Cloud
Instale o Docker Cloud CLI:
|
1 2 3 4 5 |
brew install docker-cloud ==> Downloading https://homebrew.bintray.com/bottles/docker-cloud-1.0.2.yosemite.bottle.tar.gz Already downloaded: /Library/Caches/Homebrew/docker-cloud-1.0.2.yosemite.bottle.tar.gz ==> Pouring docker-cloud-1.0.2.yosemite.bottle.tar.gz ? /usr/local/Cellar/docker-cloud/1.0.2: 482 files, 4.1M |
As instruções completas de instalação estão em Instalação da CLI. Verificar versão:
|
1 2 |
docker-cloud -v docker-cloud 1.0.2 |
O conjunto completo de comandos é:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
usage: docker-cloud [-h] [-v] {action,container,event,exec,login,node,nodecluster,repository,run,service,stack,tag,trigger,up} ... Docker Cloud CLI optional arguments: -h, --help show this help message and exit -v, --version show program's version number and exit Docker Cloud CLI commands: {action,container,event,exec,login,node,nodecluster,repository,run,service,stack,tag,trigger,up} action Action-related operations container Container-related operations event Get real time Docker Cloud events exec Run a command in a running container login Please use "docker login" to log into Docker Cloud node Node-related operations nodecluster NodeCluster-related operations repository Repository-related operations run Create and run a new service service Service-related operations stack Stack-related operations tag Tag-related operations trigger Trigger-related operations up Create and deploy a stack |
Salve as credenciais de login:
|
1 2 3 4 5 6 |
docker login Username: arungupta Password: Email: arun.gupta@gmail.com WARNING: login credentials saved in /Users/arungupta/.docker/config.json Login Succeeded |
Criar um novo nó do Docker Cloud
Registre as credenciais do seu provedor de nuvem com IU da Web do Docker Cloud conforme explicado em Link para um provedor de serviços de nuvem. Amazon, Digital Ocean, Azure e outros há suporte para provedores de nuvem.
Crie um novo cluster de nós com um único nó:
|
1 2 |
docker-cloud nodecluster create -t 1 --tag couchbase couchbase-node aws us-west-1 m3.large 42a34e04-02e1-47be-bf87-ec06e0e0b604 |
Esse cluster de nós tem um único nó (-t 1) e usa a tag "couchbase" (--tag couchbase). Os últimos quatro parâmetros são o nome do nodecluster (nó couchbase, provedor (aws, região (us-west-1 e nodetype (m3.large).
Cada nó desse cluster de nós receberá a tag atribuída. Isso será usado posteriormente para atribuir serviços a um nó ou cluster de nós específico.
O status desse cluster de nós pode ser verificado:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
docker-cloud nodecluster inspect 42a34e04-02e1-47be-bf87-ec06e0e0b604 | jq { "disk": 60, "uuid": "42a34e04-02e1-47be-bf87-ec06e0e0b604", "tags": [ { "name": "couchbase" } ], "current_num_nodes": 1, "region": "/api/infra/v1/region/aws/us-west-1/", "target_num_nodes": 1, "state": "Deployed", "node_type": "/api/infra/v1/nodetype/aws/m3.large/", "resource_uri": "/api/infra/v1/nodecluster/42a34e04-02e1-47be-bf87-ec06e0e0b604/", "destroyed_datetime": null, "provider_options": {}, "nodes": [ "/api/infra/v1/node/5c4c78e0-71c9-4420-9a1d-fdb04a35d1de/" ], "deployed_datetime": "Tue, 15 Mar 2016 17:18:17 +0000", "nickname": "couchbase-node", "dockercloud_action_uri": "", "name": "couchbase-node" } |
O painel de controle em cloud.docker.com é atualizado para mostrar: 
Também é possível ver mais informações sobre cada nó: 
Criar um novo serviço do Docker Cloud
Crie um serviço do Docker Cloud:
|
1 2 |
docker-cloud service create --tag couchbase -p 8091:8091 -p 8092:8092 -p 8093:8093 -p 11210:11210 arungupta/couchbase 936dbe58-7c7c-4289-837a-15d29128e5ea |
Se houver vários clusters de nós, então --tag é usado para atribuir um serviço a um cluster de nós. docker-cli#10 é arquivado para garantir que várias portas possam ser expostas usando o formato -p 8091-8093:8091-8093. Isso será alinhado com a CLI do docker.
A imagem do Docker usada aqui é arungupta/couchbase. Esta imagem é baseada na imagem oficial do couchbase imagem em Docker Hub e pré-configura-o para diferentes serviços.
Inicie o serviço Docker Cloud:
|
1 2 |
docker-cloud service start 834343fd-b1d5-4d66-a2cd-69d27a471658 834343fd-b1d5-4d66-a2cd-69d27a471658 |
O painel de controle atualizado tem a seguinte aparência:
Obtenha os registros do Docker Cloud Service:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
docker-cloud service logs 834343fd-b1d5-4d66-a2cd-69d27a471658 couchbase-d96eed5d-1 | 2016-03-14T22:54:04.826000846Z Starting Couchbase Server -- Web UI available at https://:8091 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.832855273Z * Trying 127.0.0.1... couchbase-d96eed5d-1 | 2016-03-14T22:54:19.833816400Z % Total % Received % Xferd Average Speed Time Time Time Current couchbase-d96eed5d-1 | 2016-03-14T22:54:19.834647384Z Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 127.0.0.1 (127.0.0.1) port 8091 (#0) couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835659864Z > POST /pools/default HTTP/1.1 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835705633Z > User-Agent: curl/7.40.0-DEV couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835764766Z > Host: 127.0.0.1:8091 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835808491Z > Accept: */* couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835849972Z > Content-Length: 36 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835890805Z > Content-Type: application/x-www-form-urlencoded couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835951739Z > couchbase-d96eed5d-1 | 2016-03-14T22:54:19.836153748Z } [36 bytes data] couchbase-d96eed5d-1 | 2016-03-14T22:54:19.836431490Z * upload completely sent off: 36 out of 36 bytes couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838702601Z < HTTP/1.1 200 OK couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838831946Z < Server: Couchbase Server couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838882039Z < Pragma: no-cache couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838929456Z < Date: Mon, 14 Mar 2016 22:54:19 GMT couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838944199Z < Content-Length: 0 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838973658Z < Cache-Control: no-cache couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838984780Z < 100 36 0 0 100 36 0 5643 --:--:-- --:--:-- --:--:-- 6000 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.839338450Z * Connection #0 to host 127.0.0.1 left intact couchbase-d96eed5d-1 | 2016-03-14T22:54:19.843462008Z * Trying 127.0.0.1... couchbase-d96eed5d-1 | 2016-03-14T22:54:19.844335715Z % Total % Received % Xferd Average Speed Time Time Time Current couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845478686Z Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 127.0.0.1 (127.0.0.1) port 8091 (#0) couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845676061Z > POST /node/controller/setupServices HTTP/1.1 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845729619Z > User-Agent: curl/7.40.0-DEV couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845805193Z > Host: 127.0.0.1:8091 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845858410Z > Accept: */* couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845911479Z > Content-Length: 26 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845986653Z > Content-Type: application/x-www-form-urlencoded couchbase-d96eed5d-1 | 2016-03-14T22:54:19.846040578Z > couchbase-d96eed5d-1 | 2016-03-14T22:54:19.846312512Z } [26 bytes data] couchbase-d96eed5d-1 | 2016-03-14T22:54:19.846561659Z * upload completely sent off: 26 out of 26 bytes couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847024846Z < HTTP/1.1 200 OK couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847082032Z < Server: Couchbase Server couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847157246Z < Pragma: no-cache couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847211690Z < Date: Mon, 14 Mar 2016 22:54:19 GMT couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847266024Z < Content-Length: 0 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847344403Z < Cache-Control: no-cache couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847411160Z < 100 26 0 0 100 26 0 6056 --:--:-- --:--:-- --:--:-- 8666 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.849284426Z * Connection #0 to host 127.0.0.1 left intact couchbase-d96eed5d-1 | 2016-03-14T22:54:19.853702443Z * Trying 127.0.0.1... couchbase-d96eed5d-1 | 2016-03-14T22:54:19.853890120Z % Total % Received % Xferd Average Speed Time Time Time Current couchbase-d96eed5d-1 | 2016-03-14T22:54:19.853943309Z Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 127.0.0.1 (127.0.0.1) port 8091 (#0) couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854112174Z > POST /settings/web HTTP/1.1 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854169870Z > User-Agent: curl/7.40.0-DEV couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854223412Z > Host: 127.0.0.1:8091 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854278756Z > Accept: */* couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854335649Z > Content-Length: 50 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854391073Z > Content-Type: application/x-www-form-urlencoded couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854447141Z > couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854683623Z } [50 bytes data] couchbase-d96eed5d-1 | 2016-03-14T22:54:19.855024680Z * upload completely sent off: 50 out of 50 bytes couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859378932Z < HTTP/1.1 200 OK couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859530830Z < Server: Couchbase Server couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859611527Z < Pragma: no-cache couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859794083Z < Date: Mon, 14 Mar 2016 22:54:19 GMT couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859848224Z < Content-Type: application/json couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859912932Z < Content-Length: 39 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859957829Z < Cache-Control: no-cache couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859972017Z < couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859986584Z { [39 bytes data] 100 89 100 39 100 50 6060 7770 --:--:-- --:--:-- --:--:-- 8333 couchbase-d96eed5d-1 | 2016-03-14T22:54:19.860221103Z * Connection #0 to host 127.0.0.1 left intact couchbase-d96eed5d-1 | 2016-03-14T22:54:19.860730000Z {"newBaseUri":"https://127.0.0.1:8091/"}/entrypoint.sh couchbase-server |
O registro mostra a saída do API REST do Couchbase invocado para configurar o servidor Couchbase.
Acessar o servidor Couchbase no Docker Cloud
Inspecione o serviço Docker Cloud em busca das portas de contêineres expostas:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
docker-cloud service inspect 936dbe58-7c7c-4289-837a-15d29128e5ea | jq ".container_ports" [ { "protocol": "tcp", "outer_port": 8091, "inner_port": 8091, "port_name": "unknown", "published": true, "endpoint_uri": "tcp://couchbase-b9132b42.936dbe58.svc.dockerapp.io:8091/" }, { "protocol": "tcp", "outer_port": 8092, "inner_port": 8092, "port_name": "unknown", "published": true, "endpoint_uri": "tcp://couchbase-b9132b42.936dbe58.svc.dockerapp.io:8092/" }, { "protocol": "tcp", "outer_port": 8093, "inner_port": 8093, "port_name": "unknown", "published": true, "endpoint_uri": "tcp://couchbase-b9132b42.936dbe58.svc.dockerapp.io:8093/" }, { "protocol": "tcp", "outer_port": 11210, "inner_port": 11210, "port_name": "unknown", "published": true, "endpoint_uri": "tcp://couchbase-b9132b42.936dbe58.svc.dockerapp.io:11210/" } ] |
Para ser mais específico, o URI exato do Console da Web do Couchbase pode ser obtido como:
|
1 2 |
docker-cloud service inspect 936dbe58-7c7c-4289-837a-15d29128e5ea | jq ".container_ports[0].endpoint_uri" | sed 's/tcp/http/g' "https://couchbase-b9132b42.936dbe58.svc.dockerapp.io:8091/" |
Acesse o Console da Web do Couchbase em https://couchbase-b9132b42.936dbe58.svc.dockerapp.io:8091/ para ver a tela de login do Console da Web do Couchbase. Insira as credenciais de senha de Administrador e senha. 
E o Console da Web do Couchbase parece:
Encerrar o serviço e o nó do Docker Cloud
Verifique a lista de serviços do Docker Cloud em execução:
|
1 2 3 |
docker-cloud service ps NAME UUID STATUS #CONTAINERS IMAGE DEPLOYED PUBLIC DNS STACK couchbase-b9132b42 936dbe58 ▶ Running 1 arungupta/couchbase:latest 10 minutes ago couchbase-b9132b42.936dbe58.svc.dockerapp.io |
Encerrar o serviço:
|
1 |
docker-cloud service terminate 936dbe58 |
Verifique a lista de nós:
|
1 2 3 |
docker-cloud node ls UUID FQDN LASTSEEN STATUS CLUSTER DOCKER_VER 5c4c78e0 5c4c78e0-71c9-4420-9a1d-fdb04a35d1de.node.dockerapp.io 35 seconds ago ▶ Deployed couchbase-node 1.9.1-cs2 |
Terminar o nó como:
|
1 |
docker-cloud node rm 5c4c78e0 |
Referências do Docker Cloud
- Primeiros passos com o Docker Cloud
- Tutoriais de nuvem do Docker
- API do Docker Cloud
- Perguntas sobre Fóruns do Docker
Neste blog, você aprendeu:
- Conceitos-chave do Docker Cloud
- Como criar um novo nó do Docker Cloud
- Como instalar o Docker Cloud CLI
- Como criar um novo Docker Cloud Service
- Acessar o servidor Couchbase no Docker Cloud
- Como encerrar o Docker Cloud Service e o Node
Aproveite! Fonte: https://www.couchbase.com/blog/getting-started-docker-cloud/

