Este blog explicará como começar a usar o Docker para AWS e implantar um sistema multi-host Cluster de enxame na Amazon.


Muito obrigado a @friismo por me ajudar a depurar os conceitos básicos!
boot2docker -> Máquina Docker -> Docker para Mac
Você está empacotando seus aplicativos usando o Docker e usando boot2docker para executar contêineres no desenvolvimento? Então você está realmente vivendo sob uma rocha!
É altamente recomendável fazer a atualização para Máquina Docker para desenvolvimento/teste de contêineres do Docker. Ele encapsula o boot2docker e permite criar uma ou mais VMs leves em seu computador. Cada
A VM atua como um mecanismo do Docker e pode executar vários contêineres do Docker. A execução de várias VMs permite que você configure vários hosts Docker Swarm em seu laptop local com facilidade.
Máquina Docker também já é notícia velha. DockerCon 2016 anunciado versão beta pública do Docker para Mac. Isso significa que qualquer pessoa pode
inscreva-se no Docker para Mac em docker.com/getdocker e usá-lo para desenvolvimento/teste de contêineres do Docker. É claro que também existe o Docker para Windows!
O Docker para Mac ainda é um host único, mas tem um modo de enxame que permite inicializá-lo como um cluster Swarm de nó único.
O que é o Docker para AWS?
Então, agora que você está usando o Docker para Mac para desenvolvimento, qual seria a sua plataforma de implantação? A DockerCon 2016 também anunciou o Docker para AWS e Azure Beta.
O Docker para AWS e Azure inicia uma frota de Docker 1.12 Engines com o modo swarm ativado imediatamente. O modo de enxame significa que os mecanismos individuais do Docker se formam em um enxame auto-organizado e auto-recuperável, distribuído em zonas de disponibilidade para maior durabilidade.
Somente cobranças do AWS e do Azure se aplicam; o Docker para AWS e o Docker para Azure são gratuitos no momento. Inscreva-se no Docker para AWS e Azure em beta.docker.com. Observe que a disponibilidade é restrita no momento
tempo. Quando sua conta for ativada, você receberá um e-mail de convite, conforme mostrado abaixo:

Valores do Docker para o AWS CloudFormation
Clique em Pilha de lançamento para ser redirecionado para a página de modelo do CloudFormation. Adote os padrões:

Modelo S3
O URL será preenchido automaticamente e ficará oculto aqui. Clique em Próximo. Essa página permite que você especifique detalhes para o modelo CloudFormation:

As seguintes alterações podem ser feitas:
- Nome do modelo
- Número de gerente e trabalhador nós, 1 e 3 nesse caso. Observe que somente um número ímpar de gerentes pode ser especificado. Por padrão, os contêineres são agendados somente nos nós de trabalho.
- Tamanho da AMI dos nós mestre e de trabalho
- Uma chave já configurada em sua conta do AWS
Clique em Próximo e usar os padrões:

Clique em Próximo, confirme as configurações:


Selecione
Recursos de IAM caixa de seleção e clique em Criar para criar o modelo do CloudFormation. Foram necessários cerca de 10 minutos para criar um cluster de 4 nós (1 gerente + 3 trabalhadores):

Mais detalhes
sobre o cluster podem ser vistas no Console do EC2:

Detalhes do cluster do Docker para AWS Swarm
A guia Output (Saída) do Console do EC2 mostra mais detalhes sobre o cluster:

Mais detalhes
sobre o cluster pode ser obtido de duas maneiras:
- Faça login no cluster usando SSH
- Crie um túnel e configure a CLI local do Docker
Criar conexão SSH com o Docker para AWS
Faça login usando o comando mostrado no Valor da coluna Saída guia. Crie uma conexão SSH como:
|
1 2 3 4 |
ssh -i ~/.ssh/aruncouchbase.pem docker@Docker4AWS-ELB-SSH-945956453.us-west-1.elb.amazonaws.com The authenticity of host 'docker4aws-elb-ssh-945956453.us-west-1.elb.amazonaws.com (52.9.246.163)' can't be established. ECDSA key fingerprint is SHA256:C71MHTErrgOO336qAuLXah7+nc6dnRSEHFgYzmXoGyQ. Are you sure you want to continue connecting (yes/no)? yes |
Observe que estamos usando aqui a mesma chave que foi especificada durante o modelo do CloudFormation. A lista de contêineres pode ser vista usando docker ps comando:
|
1 2 3 4 5 |
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b7be5c7066a8 docker4x/controller:aws-v1.12.0-rc3-beta1 "controller run --log" 48 minutes ago Up 48 minutes 8080/tcp editions_controller 3846a869c502 docker4x/shell-aws:aws-v1.12.0-rc3-beta1 "/entry.sh /usr/sbin/" 48 minutes ago Up 48 minutes 0.0.0.0:22->22/tcp condescending_almeida 82aa5473f692 docker4x/watchdog-aws:aws-v1.12.0-rc3-beta1 "/entry.sh" 48 minutes ago Up 48 minutes naughty_swartz |
Criar um túnel SSH para o Docker para AWS
Como alternativa, um túnel SSH pode ser criado como:
|
1 |
ssh -i ~/.ssh/aruncouchbase.pem -NL localhost:2375:/var/run/docker.sock docker@Docker4AWS-ELB-SSH-945956453.us-west-1.elb.amazonaws.com & |
Configuração do DOCKER_HOST:
|
1 |
export DOCKER_HOST=localhost:2375 |
A lista de contêineres pode ser vista como acima usando docker ps comando. Além disso, é possível obter mais informações sobre o cluster usando informações da plataforma comando:
|
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 |
docker info Containers: 4 Running: 3 Paused: 0 Stopped: 1 Images: 4 Server Version: 1.12.0-rc3 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 32 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: host bridge overlay null Swarm: active NodeID: 02rdpg58s1eh3d7n3lc3xjr9p IsManager: Yes Managers: 1 Nodes: 4 CACertHash: sha256:4b2ab1280aa1e9113617d7588d97915b30ea9fe81852b4f6f2c84d91f0b63154 Runtimes: runc Default Runtime: runc Security Options: seccomp Kernel Version: 4.4.13-moby Operating System: Alpine Linux v3.4 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 993.8 MiB Name: ip-192-168-33-110.us-west-1.compute.internal ID: WHSE:7WRF:WWGP:62LP:7KSZ:NOLT:OKQ2:NPFH:BQZN:MCIC:IA6L:6VB7 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 46 Goroutines: 153 System Time: 2016-07-07T04:03:11.344531471Z EventsListeners: 0 Username: arungupta Registry: https://index.docker.io/v1/ Experimental: true Insecure Registries: 127.0.0.0/8 |
Veja a seguir alguns detalhes importantes desse resultado:
- 4 nós e 1 gerente, o que significa 3 nós de trabalho
- Todos os nós estão executando o Docker Engine versão 1.12.0-rc3
- Cada VM é criada usando o Alpine Linux 3.4
Dimensionamento de nós de trabalho no Docker para AWS
Todos os nós de trabalho são configurados em um Grupo do AWS AutoScaling. O nó do gerenciador é configurado em um grupo separado do AWS AutoScaling.

Esse primeiro
permite que você dimensione a contagem de trabalhadores usando o grupo Autoscaling. O Docker ingressará ou removerá automaticamente novas instâncias do Swarm. Alterar a contagem de gerentes ao vivo é não compatíveis com esta versão. Selecione o
Grupo AutoScaling para nós de trabalho para ver detalhes completos sobre o grupo:

Clique em Editar para alterar o número de instâncias desejadas para 5 e salve a configuração clicando em Salvar botão:

Leva alguns segundos para que as novas instâncias sejam provisionadas e incluídas automaticamente no cluster do Docker Swarm. O grupo de Autoscaling atualizado é mostrado como:

E agora informações da plataforma O comando mostra a saída atualizada como:
|
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 |
docker info Containers: 4 Running: 3 Paused: 0 Stopped: 1 Images: 4 Server Version: 1.12.0-rc3 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 32 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: overlay null host bridge Swarm: active NodeID: 02rdpg58s1eh3d7n3lc3xjr9p IsManager: Yes Managers: 1 Nodes: 6 CACertHash: sha256:4b2ab1280aa1e9113617d7588d97915b30ea9fe81852b4f6f2c84d91f0b63154 Runtimes: runc Default Runtime: runc Security Options: seccomp Kernel Version: 4.4.13-moby Operating System: Alpine Linux v3.4 OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 993.8 MiB Name: ip-192-168-33-110.us-west-1.compute.internal ID: WHSE:7WRF:WWGP:62LP:7KSZ:NOLT:OKQ2:NPFH:BQZN:MCIC:IA6L:6VB7 Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): true File Descriptors: 48 Goroutines: 169 System Time: 2016-07-07T04:12:34.53634316Z EventsListeners: 0 Username: arungupta Registry: https://index.docker.io/v1/ Experimental: true Insecure Registries: 127.0.0.0/8 |
Isso mostra que há um total de 6 nós com 1 gerente.