Conhecendo o Docker

Diego Brito Sousa
ViaHubtecnologia
Published in
3 min readAug 18, 2020
https://cdn-images-1.medium.com/max/800/1*PiDUAnE55Oa4ojmRV8CQMA.jpeg

O Docker é um projeto de código-fonte aberto usado para permitir a automatização da entrega de aplicações em contêineres auto-suficientes que podem ser executados em ambiente de computação em nuvem ou em equipamento local.

Diferença entre virtualização e contêiner

Os contêineres e a virtualização tem alocação e isolação de recursos similares, porém seu funcionamento é diferente.

Ambiente Virtualizado

O Docker não é virtualização, mas contêiner. A virtualização funciona criando um equipamento virtual abstrato dentro de um equipamento físico real. É como criar várias máquinas virtuais dentro de uma máquina real. Já os contêineres por sua vez abstraem apenas o sistema operacional utilizando-se dos recursos do sistema operacional hospedeiro.

Ambiente sendo executado em Contêiner

Funcionamento de um Contêiner

Para fazer a abstração do sistema operacional o contêiner usa alguns recursos do kernel do Linux.

Para contabilizar e isolar os recursos da máquina, como processamento, memória, disco e rede é utilizado um recurso chamado Control Group ou simplesmente Cgroup. Ele cria um perfil de hardware para cada contêiner individual, dando para as aplicações dentro do contêiner a abstração de hardware individual, mas limitado.

CGroup Abstrai e cria perfis de hardware
https://stackoverflow.com/a/54937630

Os contêineres também precisam utilizar os recursos do kernel do sistema operacional, mas ao mesmo tempo é necessário isolar o que cada processo dentro de um contêiner pode enxergar. Para isso usa-se o Namespace.

O namespace cria espaços de nomes, nos quais todos os processo dentro de um mesmo espaço podem se enxergar, mas não podem enxergar os processos que estão fora ou dentro de outro namespace. Isso cria uma ilusão de que o contêiner roda um sistema operacional separado do hospedeiro visto que os processos dentro do contêiner não enxergam o que há fora, nem o que está do lado de fora consegue enxergar o que há dentro do contêiner.

A vantagem do contêiner em relação à máquina virtual

Se uma aplicação que tem 100MB rodar em um sistema operacional de 1GB for entregue em um sistema virtualizado em 4 instâncias. Nós teremos no total 4,4GB ocupados. Porém se as mesmas 4 instâncias forem entregues em um sistema de contêiner, teríamos 1GB do sistema operacional , mais 100MB de cada instância, o que dá um total de 1,4GB. Essa economia de espaço dá-se devido ao compartilhamento dos recursos do sistema operacional hospedeiro.

https://www.slideshare.net/FabioFerrari31/docker-containers-talk-linux-day-2015

Há ainda uma segunda vantagem do contêiner em relação ao ambiente virtualizado. Visto que o contêiner roda em um sistema real o desempenho do processador, do disco e da rede, é o mesmo do sistema hospedeiro pois não há sobrecarga de virtualização.

O sistema de arquivos

Em cima de tudo isso o Docker usa um sistema de arquivos em camadas chamado de Overlay File System, OVS. Neste sistema os arquivos são providos a partir de imagens como dependências, que são somadas durante a criação do contêiner. E após o contêiner ser criado estes arquivos são imutáveis, e toda mudança nos arquivos será perdida após o mesmo ser parado ou reiniciado.

https://www.slideshare.net/FabioFerrari31/docker-containers-talk-linux-day-2015

Então o CGroup limita o hardware, o Namespace limita os processos e o OVS limita o sistema de arquivos.

Após analisar estas características do Docker, podemos afirmar que ele é ideal tanto para o ambiente de desenvolvimento de aplicações, como para a entrega de aplicações para ambiente de produção.

No próximo artigo, continuaremos com a instalação do Docker.

--

--