Docker — guia rápido para iniciantes

Renan Lima
5 min readApr 25, 2021

Para que possamos entender melhor o conceito do Docker, é preciso primeiramente passearmos pelo conceito tradicional de virtualização.

VIRTUALIZAÇÃO

É inegável que o processo de virtualização trouxe uma grande abertura para evolução das tecnologias. Muito do que vemos hoje em ambientes cloud só foram possíveis por conta delas.

Há alguns anos se tornou muito comum a virtualização de máquinas para execução de processos específicos. Com o intermédio de um Hypervisor, como exemplo o Virtual Box e o VMWare, vimos surgir a possibilidade se ter um sistema operacional completo rodando em um sistema operacional host totalmente diferente e de forma completamente isolada.

As máquinas virtuais passaram então a ter ainda mais sentido com o surgimento de serviços cloud, em que toda a lógica de computação em nuvem está baseada nessa tecnologia. Esse ganho deveu-se principalmente pela possibilidade de isolamento de processos e elasticidade de recursos de acordo com a nossa necessidade, ou seja, podemos criar quantas máquinas virtuais forem necessárias para aquilo que queremos

VM X DOCKER

Apesar de as inúmeras vantagens que o Docker possui sobre as máquinas virtuais, nem sempre será possível usá-lo. Isso porque podemos considerar dois pontos que o Docker não conseguirá atender

  • Todas as imagens obrigatoriamente serão baseadas em Linux. Isso significa que não existem, e nem é possível, criar imagens baseadas em outros sistemas operacionais.
  • Não é possível usar o um kernel diferente do Kernel do Host. O Docker engine vai rodar em cima de uma determinada versão do kernel e não será possível alterar essa versão.

Com a imagem abaixo, conseguimos enxergar ainda mais nitidamente a estrutura sobre a qual cada uma das duas tecnologias descansam.

Percebemos que com o uso da VM o hypervisor é responsável pela criação de cada máquina virtual, que terá um sistema operacional completo, com suas libs e bins e um software isolado. Já com o docker, removemos o hypervisor e fazemos o uso de um kernel em comum que será utilizado por cada container criado, porém mantendo o mesmo isolamento desejado.

IMAGEM

Uma imagem no universo Docker é um modelo de sistemas de arquivos “read-only”, formado em camadas, que dará origem a um determinado container.

Imagens funcionam de forma análoga a uma classe Java. Sempre que queremos instanciar um novo objeto, por exemplo, recorremos ao comando new UmaDeterminadaClasse();. Da mesma forma podemos entender uma imagem, porém, ao invés de usarmos o new, fazemos uso do comando build através da linha de comando no terminal referenciando um arquivo chamado Dockerfile.

Para compreendermos melhor, vamos criar um arquivo Dockerfile uma pasta que irá subir um container com o postgres. Neste exemplo criei uma pasta chamada PDI e lá dentro criei meu Dockerfile:

Dentro do nosso Dockerfile vamos inserir as seguintes linhas:

O que acabamos de criar é o shape que servirá para montarmos as nossas imagens sempre que precisarmos.

Agora basta rodarmos o seguinte comando no terminal:

docker image build -t meu-container-db ./path/to/docker/file

A engine do docker irá baixar a imagem do postgres hospedada no docker registry e ela ficará disponível a partir de então para subirmos nosso container.

Uma outra observação importante é o que falamos sobre camadas.
As camadas nada mais são que as linhas que adicionamos no Dockerfile
Entendendo isso, podemos interpretar a nossa imagem, gerada a partir do nosso Dockerfile terá 5 camadas, que são as linhas que estão presentes no arquivo.

CONTAINERS

No universo da logística o termo Container é bastante conhecido. É só lembrar daqueles imensos navios cargueiros que atravessam o mundo carregando mercadorias de todo o canto, que garantem a integridade e isolamento dos produtos.

Olhando para as áreas de tecnologia conseguimos fazer a mesma observação. Os containers garantem que tenhamos processos sendo executados de forma completamente isolada utilizando um mesmo kernel.

A tecnologia de containers já existia mesmo antes do surgimento do Docker e descansava sobre o conceito LXC(Linux Containers), que é um kit de ferramentas, bibliotecas entre outras features, que garantem o isolamento de processos sem a necessidade de um sistema operacional completo rodando.

E foi olhando para o LXC a equipe do google criou mais uma camada de gerenciamento: a Docker engine. Essa nova camada facilitou gerenciamento dos containers criados, pois até então, para se ter a produtividade necessária com LXC, era preciso se ter um conhecimento mais aprofundado nessa tecnologia.

Pelo conceito em si, podemos entender que Containers são sistemas de arquivos construídos a partir do que chamamos de imagem. Com o uso de containers temos a certeza de que o software irá executar sempre da mesma forma, independente da configuração do ambiente externo.

A fim de finalizarmos nosso entendimento sobre containers, vamos subir nosso container com o postgres rodando o seguinte comando:

docker container run -p 5432:5432 meu-container-db

Para sabermos se tudo deu certo, basta apenas rodarmos um dos comandos abaixo. Na prática ambos atingem o mesmo objetivo, porém o primeiro foi adotado após convenção de comandos do Docker.

docker container ps ou docker ps

Com isso nós podemos ver como é fácil isolar os processos, reduzindo drasticamente o risco de impactos em ambiente produtivo. Obviamente esses são apenas conceitos iniciais. O universo docker possui uma vastidão de imagens para serem usadas, tanto de imagens oficiais do docker registry, como imagens criadas por terceiros, além da própria evolução da ferramenta quem vem ganhando espaço maciço no mercado mundial. Para o profissional de T.I, como se diz em inglês, Docker is a must.

--

--