Portainer - Gerenciador Docker

domingo, 24 de março de 2019

Portainer - Gerenciador Docker


Olá jovens padawans, como vocês têm estado ?

Ultimamente tenho estado muito em contato com Docker, (sim, AINDA Docker) e resolvi trazer uma série um pouco mais "dia-a-dia" de Docker para vocês, principalmente para nossos amigos desenvolvedores.

Como o MESTRE Jefferson Noronha, da Linux Tips, já dizia: "Os nossos nobres colegas desenvolvedores já estão acostumados com tecnologias novas e 'se virar' para conseguir gerir seus ambientes locais.". Não exatamente com estas palavras rsrs

Um dos maiores desafios que nós, sysadmins/infra, enfrentamos quando temos a missão de proporcionar a facilidade para que qualquer pessoa possa gerir seus containeres locais, é fornecer uma interface amigável para nossos "clientes"/usuários. Sem aquela porrada de comandos CLI que nós estamos acostumados, e até preferimos.





Então, vamos colocar uma situação hipotética aqui.
Um desenvolvedor, em média, trabalha em 3 ou 4 projetos simultaneamente (estando inserido no projeto).
Este dev utiliza sua máquina local para subir containeres para realizar testes de seu código, ver se está tudo ok, se não há erros primitivos.
Imagina comigo agora, o tamanho do HD que esse nosso colega deve ter para armazenar todos os volumes, imagens e containeres que ele gerou ao longo de 4 anos de trabalho. Sem contar a organização para manusear tudo isso e não se perder, mesmo que ele utilize persistência de volumes.

Pois bem, para amenizar tudo isso e ter uma visão mais clara do que ele próprio possui em sua máquina, ou em um servidor de testes, onde há vários deploys de teste por dia, criando-se um ambiente containerizado por deploy (incluindo container de aplicação, banco de dados, e outros serviços necessários pra 1 testezinho.), temos um software muito leve, que é um container e vai ajudar muito seu coleguinha.

Portainer.

O que é Esse tal de Portainer ?


"Legal, mas o que é isso ? como pode me ajudar de verdade ?"

Portainer é uma interface WEB que te auxilia no gerenciamento do seu endpoint Docker. Seja ele local ou em um servidor.
Com ele é possível excluir containeres, volumes, imagens, consultar os logs de cada container, montar uma stack (docker-compose) e inclusive abrir um console para o container.

Logo, imagine você, em um ambiente repleto de containeres e imagens, a facilidade que essa ferramenta te dá quando precisa liberar acesso a alguns containeres para um time e os demais containeres não podem sofrer alteração.

Vou além, e lhes coloco na situação mais vista nas pequenas empresas, onde há diversas máquinas Docker, sem uma estrutura de orquestração swarm, kubernetes ou até um painel na cloud para isto.
Como você, jovem padawan, centralizaria todos estes endpoints de Docker e gerenciaria os acessos para que o time de desenvolvimento não quebre o ambiente de Q&A e vice-versa ?

A ferramenta Portainer é um container que você pode subir em sua própria máquina para gerenciar quantos endpoints de docker quiser.



Na imagem acima, temos dois endpoints de Docker em dois servidores distintos.
Estes dois endpoints estão sendo gerenciados pelo meu portainer local, como um container do meu notebook.

Como instalar ?

É muito simples realizar o deploy do seu Portainer. Basta subir um container em seu Docker environment com um volume apontando para o socket docker.
O container vem mapeado para a porta TCP 9000 com o serviço HTTP.

Linux
$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Nota: O mapeamento /var/run/docker.sock é válido somente para ambientes Linux

Windows
$ docker volume create portainer_data
$ docker run -d -p 9000:9000 --name portainer --restart always -v \\.\pipe\docker_engine:\\.\pipe\docker_engine -v portainer_data:C:\data portainer/portainer
Nota: O mapeamento \\.\pipe\docker_engine é válido somente para ambientes Windows versão 1803+

Exportando um Endpoint Docker


Há basicamente 4 formas (atualmente) de se expor os endpoints Docker para serem gerenciados pelo Portainer:

  • Local - Este método é quando o container da ferramenta está sendo executado pelo endpoint Docker que se deseja gerenciar, através da montagem do socket do docker (/var/run/docker.sock) como volume do container. Esta prática pode ser adotada pelos desenvolvedores que querem gerir sua máquina local.
  • API Docker - Este é um dos métodos mais indicados para expormos nossos servidores standalone para o Portainer de forma segura. Este é o método que utilizo e consiste em gerarmos chaves para comunicação exclusiva entre o endpoint e a ferramenta via API própria do Docker por TCP Seguro (TLS).
  • Portainer Agent - Este método é mais utilizado em clusters (Swarm) para que o Portainer identifique todo o cluster e o gerencie. É um método mais simples que se baseia em subir um container possuindo um agent do próprio portainer que possui acesso administrativo direto ao seu cluster docker em uma das máquinas do mesmo.
  • Microsoft Azure ACI (Azure Container Instances) - Esta feature do Portainer, por ora, é experimental. Onde o Portainer se conecta na Azure API para gerenciamento dos seus containeres da cloud Azure.


Em um próximo artigo, trarei para vocês como expor a API do seu Docker standalone e como configurá-la para comunicação com o Portainer.

Controle de Usuários

Como mencionei, quando se tem vários times que não podem ter o mesmo ambiente em comum, é possível separar por grupos de usuários os acessos aos containeres, até mesmo aos endpoints.
Uma das maiores features recém-adicionadas ao Portainer é o suporte à estrutura de autenticação Oauth, que permite algumas heranças de permissões.


Na imagem acima, vemos que conseguimos criar um usuário baseado nos grupos/times criados previamente. Isto permite darmos permissões especificas para os containeres.
Na imagem abaixo, vemos um container com permissão apenas para o time DEV por exemplo.


Outras Ferramentas

Fora o Portainer, existem outras ferramentas que proporcionam funcionalidades similares, porém, desconheço uma ferramenta que nos forneça uma gama de possibilidades e flexibilidade de gerenciamento como o Portainer.
Kitematic - Ferramenta mais utilizada para gerenciamento de máquinas locais, e em ambientes MAC/Windows.
DockStation - Esta ferramenta vem crescendo seu número de usuários e trabalha como uma aplicação desktop e não uma interface WEB para gerenciamento dos containeres.

0 comentários :

Postar um comentário