Conhecendo mais um pouco do Docker Service
setembro 5, 2016 5:00 pm Publicado por major Deixe um comentário
Hoje queremos trazer em detalhes para vocês uma das features implementadas no Docker 1.12 (que foi lançado no último dia 29), o Docker Service. Para quem ainda não leu o nosso artigo sobre as novidades do Docker 1.12, o Docker Service é uma feature que foi incorporada pela engine Docker em sua última versão e que permite ao administrador criar e administrar sua stack de serviço dentro de um cluster Swarm, sem precisar utilizar uma segunda ferramenta para isso. Ela é parte integrante de uma série de melhorias que permitiram ao Docker 1.12 ter a camada de orquestração nativa em sua engine.
Mas afinal, como isso me ajuda? Bem, nas versões anteriores do Docker, para você ter algum tipo de orquestração, você teria que utilizar uma série de ferramentas, como a Docker Swarm, Docker Compose – isso sem falar, que, se você quisesse provisionar isso em larga escala mesmo, o recomendado era utilizar Kubernetes, Mesos ou alguma outra forma de orquestração mais adequada. Agora está tudo dentro da própria engine do Docker, o que permite ter maior controle sob o que se está utilizando e, claro, permite manipular esse ambiente de forma mais simples.
Para serviço especificamente, foi adicionado o sub-comando: docker service, e dentro dele alguns itens, veja:
docker service create: possibilita a criação de sua stack de serviço, é ele o que você mais vai ver hoje;
docker service inspect: verifica as informações sobre seu serviço e retorna informações sobre parametro utilizados para inicialização do mesmo, imagem utilizada etc;
docker service ls: lista todos os serviços que você tem criado, e lhe retorna informações sobre nome, quantidade de replicas etc;
docker service rm: remove o serviço desejado do cluster;
docker service ps: 2° comando mais útil, retorna para você o status de cada container que atende um serviço, é muito parecido com o docker ps, com a diferença de lhe trazer apenas informações sobre os container que fazem parte de um serviço criado, você pode ainda utilizar filtros para ter um retorno mais simplificado;
docker service scale: com o scale é possível realizar o escalonamento de seu serviço, é possível você aumentar a quantidade de containers que atenderão o seu serviço;
docker service update: comando que lhe permite realizar modificações no serviço criado, através dele é possível modificar informações sobre quantidade de memória, cpu, dentre muitas outras coisas em seu serviço.
Tudo certo com a teoria? Então, vamos a prática.
Nosso problema: queremos criar uma stack para nosso ElasticSearch, nosso objetivo é escalar esse ambiente quantas vezes eu quiser e atualizá-lo de forma consistente.
Primeiro, temos que criar nosso service:
docker service create --replicas 1 --update-delay 10s --update-parallelism 1 --name elasticsearch elasticsearch
O que isso quer dizer? Vamos lá:
Replicas – número de containers que eu quero criar nesse momento, deve ser no mínimo um (por motivos óbvios);
Update-delay – quando for realizado uma procedimento de atualização do ambiente, qual será a cadência de atualização dos containers;
Update-parallelism – quantidade de containers que desejamos atualizar por vez;
Name – nome do serviço e por último a imagem que vamos utilizar para esse serviço.
O retorno do comando será algo parecido com isso:
Certo, meu serviço está criado. Como o escalono agora? Fácil, olha o print:
Note que, para escalar, basta executar o comando: docker service scale $(seu-servico)=numero. Agora, vamos atualizar o nosso ambiente, certo? Muito fácil, basta executar o comando: docker service update. Com ele é possível modificar diversos atributos do serviço, como portas publicadas, limites de recursos, número de replicas, imagem, política de escalonamento etc.
Em nosso exemplo, vamos atualizar a imagem que nosso serviço utiliza. Veja que quando criamos, a imagem utilizada era a elasticsearch:latest, agora queremos testar a última versão do elasticsearch, que está em alpha (no dia da criação desse artigo) que é a 5.0; para isso, basta executar: docker service update –image elasticsearch:5.0 elasticsearch. Veja o que aconteceu:
Veja que nosso serviço não foi atualizado de uma vez só. Esse processo foi sendo realizado conforme os containers iam sendo atualizados, isso devido a nossa política de update que definimos na criação do serviço. Com o update, você pode realizar diversas ações – veja mais em: docker service update –help, ele lhe mostrará todas as opções disponíveis.
Como removemos um serviço? Bem, você já deve ter imaginado como: docker service rm nome_do_servico.
Ahh, você se lembra que falamos aqui que no Docker 1.12 era possível criar um serviço distribuído dentro Swarm e acessá-lo de qualquer lugar? Pois bem, quando você criar um serviço, pode especificar qual será a porta pública dele – no exemplo acima não utilizamos isso, mas você pode definir (através do parâmetro -p) que a porta 8080 seja a porta de seu serviço; com isso, todo o trafego enviado para a porta 8080 nos ips de seus nós do cluster de Swarm será redirecionado para os containers que atendam esse serviço. Lembrando que para você criar um serviço distribuído, é necessário ter um cluster de Swarm ativo.