Desenvolvimento

16 ago, 2016

Docker 1.12 – O que vem por aí

Publicidade

Oi, pessoal! Já falei no blog Mundo Docker sobre ferramentas e soluções, como por exemplo: Docker Compose, Docker Swarm, SwarmkitDocker Network, entre outras. 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, que 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_1

Serviços

No Docker 1.12, foi introduzido o conceito de serviço, que já existe no Kubernetes, e que agora possibilita 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, e você pode aumentar a quantidade de containers que irão atender esse serviço. Para isso, execute:

docker_2

Além de poder criar e escalonar, você pode realizar a atualização de seu ambiente, basta utilizar o comando update, e pode ainda definir uma política 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 que 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, independentemente se o container estiver nele ou não, isso porque 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, e ele identifica quem possui o container que atende o serviço e redireciona o trafego para ele. Por isso, é importante que, quando você criar um novo serviço, você defina uma rede também, pois reduzirá o tempo de processamento que a engine precisará para identificar onde se encontra 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 política 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é? Grande abraço!