Docker 1.12 – O que vem por aí

Oi Pessoal,
Já vimos aqui no blog algumas ferramentas e soluções, como por exemplo: Docker Compose, Docker Swarm, SwarmkitDocker Network, dentre outros. Bom, o que você sabe sobre elas é essencial para entender a nova versão do Docker, que será lançada em agosto e que está em RC4 atualmente.

A grande novidade no Docker 1.12 é ter a orquestração nativa, sem a necessidade de ter duas ou mais ferramentas para criar seu cluster de Docker, basta apenas que você tenha a engine instalada e a partir dela poderá montar seu ambiente. Outra grande novidade é o conceito de serviço, esse conceito nós já tratamos em Swarmkit, e é algo que foi incorporado ao Docker para facilitar o deploy e escalonamento das aplicações. Vamos ver o que muda?

Orquestração:

Agora para você criar um cluster de Docker, basta rodar:

docker swarm init

Com isso você iniciará o primeiro nó do cluster, para adicionar mais nós ao cluster execute o seguinte comando em outro nó:

docker swarm join IP-DO-MANAGER:2377

Veja na imagem abaixo a sequência de comandos:

docker_swarm

Serviços:

No Docker 1.12 foi introduzido o conceito de serviço, que já existe no Kubernetes, e que agora possibilita a criação, atualização e escalonamento da sua camada de serviço (seja ela de frondend ou backend) de forma muito mais fácil. Por exemplo:

docker service create --replicas 1 --name servico1 alpine echo "Ola Mundo"

Dessa forma você estará criando um serviço com um container de Alpine, você pode aumentar a quantidade de containers que irão atender este serviço, para isso execute:
docker_service

Além de poder criar e escalonar, você pode ainda realizar a atualização de seu ambiente, basta utilizar o comando update, e pode ainda definir uma politica de atualização (por exemplo, executar a atualização em um container por vez, com isso ele removerá um container e iniciará um novo baseado na nova imagem). Você pode ainda, definir um bloco de rede para cada serviço, com isso você isola totalmente os ambientes, veja:

docker service create --replicas 3 --name webservers --network web --publish 80:80/tcp nginx

Dessa forma, serão criados 3 containers (caso você tenha colocar 2 ou mais hosts no cluster de Swarm, será criado um container por host). O mais interessante nesse ambiente é que, se você acessar a porta 80 de qualquer host que esteja no cluster Swarm, seu acesso será redirecionado ao serviço, independente se o container esteja nele ou não, isso por que o Docker garante que o serviço esteja acessível mesmo que um nó venha a falhar. E como o Docker faz isso? Simples, através da 3 feature adicionada nessa versão:

Roteamento:

Quando você criar um cluster via Docker Swarm, o Docker se encarregará de atribuir ao serviço um identificador único dentro do cluster, com isso, quando for solicitado acesso á porta exposta na criação do serviço, o acesso será roteado para o container que é responsável por aquele serviço (ou mais de um é claro), ele faz isso através do algoritmo de routing mesh que está presente na engine, ele identifica quem possuí o container que atende o serviço e redireciona o trafego para ele, por isso é importante que, quando você criar um novo serviço define uma rede também, pois reduzirá o tempo de processamento que a engine precisará para identificar onde encontra-se o container.

Segurança:

Por último e não menos importante, vem a questão de segurança. No Docker 1.12, toda a comunicação do cluster é realizada via tls, e quem garante o rotacionamento desses certificados (renovação e deploy) assim como a criação de certificados para novos nós é o nó manager, que é eleito baseado em uma série de parâmetros (disponibilidade e saúde), mas que de maneira geral é o primeiro nó onde você iniciou o cluster. Os certificados são rotacionados de tempos em tempos, e você pode modificar essa politica também.

Há mais coisas? Claro! Foi adicionado também um sub comando do comando docker plugin que permite você plugar de forma mais fácil os plugins do Docker, quando você realizar um docker plugin install nome_do_plugin, lhe será informado ao que exatamente aquele plugin terá acesso, e poderá assim permitir ou não sua instalação.

Bacana né? Se gostou nos ajude divulgando o blog e caso tenha dúvida nos avise 😉

Grande Abraço!

Entusiasta Open Source, seu principal foco é ir atrás de ideias novas e torna-las realidade através de soluções simples e eficientes, o menos é mais, e o dividir é multiplicar.

Docker Swarm

Oi Pessoal,

Hoje queremos trazer para vocês mais uma das ferramentas que o Docker disponibiliza em seu ecossistema, chegou a hora de conhecermos o Docker Swarm. O Docker Swarm é uma ferramenta nativa do Docker que permite a criação de clusters de Docker, ou seja, podemos fazer com que diversos hosts de Docker estejam dentro do mesmo pool de recursos, facilitando assim o deploy de containers. É possível por exemplo criar um container sem necessariamente saber em qual host ele está, pois o Swarm disponibilidade uma API de integração, onde é possível realizar grande parte das atividades administrativas de um container. Quer ver na prática?

Requisitos:

  • Estar com a versão 1.6+ do Docker
  • Abrir a API do Docker para o Swarm Manager

 

Mãos a obra:

1 – Baixando a imagem oficial:

$ docker pull swarm

2 – Criando o cluster:

$ docker run --rm swarm create 
4765653423fdecsdfe875954a6e2h78ed # 

 

O retorno desse comando será o ID do Cluster, armazena essa informação pois será importante nas próximas etapas.

3 – Adicionando nós ao cluster:

$ docker run -d swarm join --addr=<node_ip:2375> token://4765653423fdecsdfe875954a6e2h78ed

4 – Configurando o Manager:

$ docker run -d -p <porta_manager>:2375 swarm manage token://4765653423fdecsdfe875954a6e2h78ed

Lembrando que <porta_manager> será a porta que você utilizará para se comunicar com o Swarm Manager, responsável pela administração do cluster, a arquitetura ficará da forma como a imagem abaixo:

5 – Verificando o Cluster:

$ docker -H tcp://ip:porta_manager> info

O retorno será algo parecido com isso:

Containers: 0 
Nodes: 3 
agent-2: 172.31.0.1:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 514.5 MiB 
agent-1: 172.31.0.2:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 514.5 MiB 
agent-0: 172.31.0.3:2375 
  └ Containers: 0 
  └ Reserved CPUs: 0 / 1 
  └ Reserved Memory: 0 B / 514.5 MiB

Você pode enfrentar alguma dificuldade relacionada a TLS, principalmente se estiver apenas testando, para resolver isso basta executar: unset DOCKER_TLS_VERIFY, com isso não será verificado se os hosts possuem acesso via TLS ativado.

Para administrar seu cluster (criar containers, etc) basta utilizar o IP e Porta do Swarm Manage, dessa forma:

$ docker -H tcp://<manager_ip:manager_port> info 
$ docker -H tcp://<manager_ip:manager_port> run ... 
$ docker -H tcp://<manager_ip:manager_port> ps 

Para listar os nós que fazem parte do cluster, bata utilizar o comando abaixo:

$ docker run --rm swarm list token://4765653423fdecsdfe875954a6e2h78ed
172.31.0.1:2375 
172.31.0.2:2375 
172.31.0.3:2375

 

É claro que isso é apenas o início, tendo o cluster montado é possível criar filtros de identificação por tipo de serviço, isso é muito útil para criar containers com o mesmo tipo de serviço em um mesmo local sem a necessidade de saber onde. Mas isso é história para um próximo post 😉

Fique atento as novidades do Blog, e ajude divulgando o mundodocker.com.br.

Abraço!

 

Entusiasta Open Source, seu principal foco é ir atrás de ideias novas e torna-las realidade através de soluções simples e eficientes, o menos é mais, e o dividir é multiplicar.