Containers e Docker: o que são e como utilizar

Docker

A palavra container é bastante utilizada até mesmo em português e designa, geralmente, volumosas caixas de embalagem para transporte, à longa distância (sobretudo por via marítima), de variadas mercadorias.

Porém, no mundo da programação, o termo tem outro significado: os containers são utilizados em larga escala no desenvolvimento, testes e, principalmente, na produção de softwares.

São eles que permitem rodar múltiplos sistemas isolados dentro de um sistema operacional real.

O que são containers?

O container nada mais é do que um ambiente isolado, disposto em um servidor, que divide um único host de controle. Vamos voltar ao exemplo dos containers tradicionais para explicar melhor esse conceito.

Um navio cargueiro pode carregar diversos containers. Caso um dos recipientes seja danificado, os demais não são afetados. Afinal, são isolados, protegidos e estão carregando seus próprios produtos.

Trazendo para o mundo do desenvolvimento, cada container possui uma função e sua responsabilidade. Caso um deles sofra um dano, o funcionamento do sistema não para e a função afetada é redirecionada para um novo container.

Diferença entre containers e VMs

Os containers funcionam um pouco como as VMs, mas de uma maneira muito mais específica e granular.

Em uma máquina virtual, é possível utilizar diversos recursos e ferramentas, como Apache e PHP, porém tudo roda em um mesmo sistema operacional. Em caso de pane, todas as funcionalidades são afetadas.

No caso dos containers, a ideia é que cada um faça apenas um serviço e assuma uma só responsabilidade. Ou seja, seria um rodando com Apache e outro com PHP.

Desta forma, é possível isolar os processos de cada ferramenta, garantindo que nenhuma atrapalhe o funcionamento da outra.

Para serviços web, por exemplo, os containers deixam a infraestrutura muito mais intercambiável, eficiente e flexível.

Eles isolam um único aplicativo e suas dependências – todas as bibliotecas externas de software que o aplicativo precisa executar – tanto do sistema operacional subjacente quanto de outros containers. 

Todos os aplicativos em container compartilham um único sistema operacional comum (Linux ou Windows), mas eles são compartilhados entre um e outro e do sistema como um todo.

À primeira vista, eles podem até tornar a situação um pouco mais complexa, porém, principalmente nos servidores de produção, oferecem um ganho enorme em termos de escala e performance e, portanto, são uma ferramenta valiosa.

Docker e sua relação com containers

A tecnologia Docker usa o kernel do Linux e recursos do kernel como Cgroups e namespaces para segregar processos. Assim, eles podem ser executados de maneira independente. 

As ferramentas de container, incluindo o Docker, fornecem um modelo de implantação com base em imagens. Isso facilita o compartilhamento de uma aplicação ou conjunto de serviços, incluindo todas as dependências deles em vários ambientes.

O Docker também automatiza a implantação da aplicação (ou de conjuntos de processos que constituem uma aplicação) dentro desse ambiente de container.

Essas ferramentas baseadas nos containers Linux (o que faz com que o Docker seja exclusivo e fácil de usar) oferecem aos usuários acesso sem precedentes a aplicações, além da habilidade de implementar com rapidez e de ter total controle sobre as versões e distribuição.

Além disso, o software é open source e a comunidade trabalha constantemente para sua melhoria.

As vantagens do uso do Docker

  • O Docker permite um uso mais eficiente dos recursos do sistema;
  • As instâncias de aplicativos em container usam muito menos memória do que as máquinas virtuais, elas são inicializadas e interrompidas mais rapidamente e podem ser armazenadas muito mais densamente em um hardware host. Tudo isso equivale a menos gastos com TI;
  • A redução de custos irá variar dependendo de quais aplicativos estão em jogo e de quão intensivos os recursos podem ser, mas os containers funcionam invariavelmente como mais eficientes que as VMs. Também é possível economizar nos custos de licenças de software, porque é necessário muito menos instâncias do sistema operacional para executar as mesmas cargas de trabalho;
  • O Docker permite ciclos de entrega de software mais rápidos;
  • O software corporativo deve responder rapidamente a mudanças de condições. Isso significa que o escalonamento fácil atende à demanda e facilita a atualização para adicionar novos recursos conforme a necessidade do negócio;
  • Os containers Docker facilitam a colocação rápida de novas versões de software, com novos recursos de negócios, e a rápida reversão para uma versão anterior, se necessário. Eles também facilitam a implementação de estratégias como implantações em azul / verde;
  • O Docker permite a portabilidade de aplicativos;
  • Docker ajuda a arquitetura de microsserviços;
  • Os containers são leves, portáteis e facilitam a construção de software em linhas de pensamento avançadas, de modo que o desenvolvedor não está tentando resolver os problemas de amanhã com os métodos de desenvolvimento de ontem.

Limitações atuais no uso do Docker

O Docker não fornece as mesmas funcionalidades parecidas com UNIX que os containers Linux tradicionais oferecem. Isso inclui a capacidade de usar processos como cron ou syslog dentro do container, junto à aplicação.

O Docker também tem algumas limitações em questões como a limpeza de processos netos (grandchild) após o encerramento dos processos filhos (child), algo que é processado de forma natural nos containers Linux tradicionais.

Essas desvantagens podem ser mitigadas ao modificar o arquivo de configuração e configurar essas funcionalidade desde o início, algo que não é imediatamente óbvio em um primeiro momento.

Além disso, há outros subsistemas e dispositivos do Linux sem espaço de nomes. Incluindo os dispositivos SELinux, Cgroups e /dev/sd*.

Isso significa que, se um invasor adquirir controle sobre esses subsistemas, o host será comprometido. Para manter-se leve, o compartilhamento do kernel do host com os containers gera a possibilidade dessa vulnerabilidade na segurança.

Isso é diferente nas máquinas virtuais, que são mais firmemente segregadas a partir do sistema host.

Conclusão

Mesmo com desafios a serem enfrentados, não é por acaso que os containers estão se tornando cada vez mais populares. Eles reduzem a necessidade de contar com uma grande estrutura e permitem utilizar apenas um sistema operacional normal.

Como os containers ficam dispostos neste único ambiente, é muito mais fácil realizar a manutenção, além de ser mais leve e permitir a portabilidade.

Ficou interessado em se aprofundar nessa tecnologia? Conheça nosso curso de gestão de containers com Docker!

5 3 votações
Article Rating
Inscrever
Notificar
guest

1 Comentário
Mais novos
Mais velho Mais votado
Feedbacks em linha
Ver todos os comentários
Daniel Caixeta
Daniel Caixeta
3 anos atrás

Ótimo artigo …