Hoje quando o assunto é Docker, basta uma simples busca no Google para descobrirmos uma enxurrada de links falando sobre o assunto, explicando o que é, como usar Docker, tutoriais mais elaborados, segurança no uso do Docker, segurança e hacking de containers, etc. Mas com esse monte de referência as vezes ficamos até confusos na hora de decidir o que utilizar, qual a melhor forma de publicar seus containers, qual orquestrador utilizar, e por aí vai.
Ouça o conteúdo na íntegra abaixo:
Primeiro Contato
Lembro bem quando um colega de trabalho me apresentou a ferramenta, com a promessa de nunca mais precisar passar horas configurando um ambiente de desenvolvimento antes de começar a de fato desenvolver.
Esta era uma dificuldade bastante comum antes do surgimento do Docker. Era sempre um grande “tempo perdido” configurando ambiente quando alguém resolvia formatar sua máquina, ou um novo colaborador era contratado.
Antes de usar Docker, algumas ferramentas já vinham tentando resolver essa questão, porém possuíam em geral arquivos de configuração bastante complexos. Isso sem falar que normalmente dependiam de uma máquina virtual para operar (gerando um consumo de memória desnecessário para o processo de desenvolvimento). Ainda assim a frase “mas funciona na minha máquina” ainda era bastante comum de se escutar.
Claro que demorou um pouco até pegar o jeito, aprender as melhores práticas; como construir um Dockerfile bom, com o melhor aproveitamento possível na construção das camadas da imagem, etc. Mas depois de um tempo utilizando já não restava dúvidas de que esta era a tecnologia que viria a suprir de vez as necessidades de dependências no ambiente do desenvolvedor.
Usar Docker em Produção
Após um bom tempo de uso, e de já sentirmos segurança ao utilizar a ferramenta, foi a vez de dar o próximo passo: usar Docker em ambiente de produção.
Obviamente não foi uma decisão impensada e ficamos um certo tempo receosos, visto que quando tomamos esta decisão pouco se falava sobre o assunto na Internet e poucos no Brasil ousavam usar Docker em ambiente produção.
Em 2017 fui convidado a contar um pouco sobre a experiência que tivemos aqui na KingHost no Conexão KingHost, maior evento online e gratuito de desenvolvimento web do Brasil (cujas inscrições para a edição deste ano já estão abertas). Ao implantar a tecnologia em produção, até teve alguns percalços, mas gerou um conhecimento bastante interessante e que pude compartilhar com a comunidade no evento.
Naturalmente, acostumados com ambiente de desenvolvimento, começamos utilizando o Docker Compose como orquestrador, visto que no período que tomamos a decisão, não tínhamos muitas referências de orquestradores. Docker Swarm ainda era muito novo, e ainda tinha muitos problemas a serem melhorados. O Kubernetes, outra referência que temos hoje, também tinha seus poréns e ainda precisava muito pra chegar na maturidade que tem hoje.
Neste período experimentamos várias formas de publicação dos nossos containers até encontrar a melhor para o nosso caso. Algumas ainda envolviam processos manuais, outras já utilizando serviços de descoberta de containers, um load balancer na frente, ferramentas de CI, etc.
Orquestradores de Containers
Implantar Docker em produção pode ser realizado de várias maneiras. Porém de longe a forma mais prática é a utilização de algum orquestrador de container, que já agrupa várias soluções em uma única ferramenta.
Você pode fazer todo o processo de forma manual, criando uma máquina, entrando via SSH, rodando comandos, e colocando um load balancer em cima dessa estrutura toda. Mas hoje temos disponíveis orquestradores bastante maduros e com recursos que automatizam se não todo, boa parte do processo, facilitando a implementação de um deploy contínuo.
Os orquestradores são ferramentas que organizam e coordenam como serão executados os containers, em quais máquina (nós), quantas réplicas, limitações de recurso, etc. Em geral são baseados em arquivos de configuração, que indicam todas as peculiaridades e dependência de uma aplicação. Em suma: são ferramentas que abstraem o conceito de máquina simplificando o gerenciamento do ciclo de vida de seus containers.
Para ambiente de desenvolvimento temos como referência quase unânime o Docker Compose, que basicamente agrupa todas as dependências da aplicação em apenas um arquivo de configuração, facilitando na hora de “subir o ambiente” para desenvolver algo. Porém para o cenário de produção ele possui algumas limitações que não se enquadram muito bem para a situação.
Para utilização em ambiente de produção temos duas referências de orquestradores bastante difundidas atualmente. Primero temos o Docker Swarm, a “solução oficial” da Docker, que desde a versão 1.12 já vem “embutido” junto do cli. A segunda grande referência atual é o tão aclamado Kubernetes, solução do Google para orquestração de containers, bastante robusta, madura e versátil.
Ambas as soluções citadas possuem prós e contras, e também não são as únicas opções de orquestração disponíveis voltadas a abstrair a gerência de ambiente de produção. Mas certamente estas são de longe as mais discutidas e recomendadas atualmente.
Docker Swarm x Kubernetes
Aproveite e mate nossa curiosidade deixando nos comentários como foi a sua experiência com o Docker. Se já utiliza em ambiente de produção, ou até como você gerencia suas publicações utilizando o Docker. Fique ligado no Blog da KingHost para mais novidades.
O que você achou deste conteúdo?