Docker é uma ferramenta aberta (open source) que permite gerenciar os famosos containers Linux. No presente texto,que não pretende esgotar o assunto, reuni três conceitos que considero importante para entendimento inicial sobre a utilização desse recurso na área de tecnologia, sobretudo para o dia a dia de desenvolvedores.
Para começar, isolamento
Entende-se por isolamento uma forma de empacotar uma aplicação com todos os recursos necessários para sua execução e, desse modo, o software sempre irá se comportar da mesma maneira, independente do ambiente (desenvolvimento, homologação e produção).
O que é Docker?
Nesse contexto, o Docker é responsável por gerenciar vários processos, ou serviços, de maneira isolada do host, como banco de dados e uma aplicação, por exemplo, sendo executados em containers diferentes.
Container, Namespaces e Cgroups
Seguindo uma definição básica,fornecida pelo blog Escotilha Livre, containers são:
[...] abstrações virtuais de uma técnica de virtualização conhecida como virtualização a nível de sistema operacional.
Ele é uma forma de segregar processos e sua virtualização é considerada menos isolada pelo fato de existir o compartilhamento de partes do Kernel entre o host e o container. Isso torna a inicialização do processo uma execução rápida que pode levar segundos.
Essa separação, ou isolamento, é possível porque o Docker utiliza de dois recursos do Linux Kernel: Namespaces e Cgroups.
Os Namespaces são responsáveis por gerar o isolamento de grupos de processos em seu nível lógico, como o gerenciamento de usuários, rede, etc., garantido que o container não enxergue os processos do host e vice-versa. Logo, ao criar um container, são criados namespaces como pid(Process ID) para isolar processos, net(Network) para controlar e isolar as redes de cada container,ipc(Inter Process Communication) que permite a comunicação entre processos, etc.
Para gerenciar os recursos físicos que são compartilhados entre esses processos existe o Cgroups. Ele fornece ao Docker o poder de compartilhar CPU, memória, I/O, etc., entre o host e o container. Além disso, é possível limitar ou restringir esses recursos para containers específicos.
Conclusão
Portanto, com base nesses conceitos iniciais é possível verificar benefícios na utilização dessa ferramenta como, velocidade, praticidade, agilidade, disponibilidade e economia de recursos. Nos próximos resumos pretende-se abordar conceitos mais focados na ferramenta, como imagem, volumes e muito mais.
Referências
Container docker: o que é e quais são as vantagens de usar?
No final das contas: o que é o Docker e como ele funciona?
Linux namespaces
Namespace, o que é?
Capítulo 1. Introdução ao Grupos de Controle (Cgroups)
Containers com Docker - Do desenvolvimento à produção
Top comments (3)
Estou aprendendo Docker e o seu resumo me fez entender bastante coisa! Obrigado :D
Top demais!
Can it be said that the container is a computer? Which works in parallel to the main one, in this case being the physical hardware