DEV Community

loading...
Cover image for ūüź≥Docker#00 Introdu√ß√£o Concentual

ūüź≥Docker#00 Introdu√ß√£o Concentual

David Silva
S√≥ t√ī a passeio
„ÉĽUpdated on „ÉĽ4 min read

Tenho estudado Docker com mais vontade de alguns meses pra cá (além de trabalhar no dia a dia) e não faz muito sentido fazer tudo isso se eu não passar a diante.

Honestamente meu intuito é que este texto facilite um pouco sua vida, vou mesclar um pouco da minha experiência que vai desde o desenvolvimento até o Deploy para Produção. No meio do caminho talvez eu cite ferramentas extras que também podem ajudá-lo (espero).

Este artigo faz parte da série Manual "básico" de Docker. Digo básico pois realmente há muito mais do que pretendo escrever.

Duas observa√ß√Ķes importantes sobre este projeto:

  1. N√£o ser√° o estado da arte de primeira, n√£o espere isso. Ali√°s, suas id√©ias, coment√°rios e corre√ß√Ķes ser√£o levados a s√©rio e revisarei o que for necess√°rio.
  2. Eu não tenho tanta pressa. Ao mesmo tempo que estou escrevendo, estou lendo mais e sempre reviso algumas partes, implemento, melhoro, etc. Então isso pode ficar um tanto extenso mas farei o possível para que valha seu tempo.

O que é Docker?

Como na própria documentação:

Docker é uma plataforma para criar, executar e compartilhar aplicativos em containers.

Isso pode n√£o dizer muito ainda, mas de fato diz quase tudo.

Desenvolvido pela empresa Docker, Inc., Docker é um software de administração de contêineres que visa abstrair a camada de virtualização de uma forma que simplifique (MUITO) a vida de desenvolvedores e administradores de sistemas.

Você já deve ter usado ou visto uma máquina virtual. Daquelas que nos permitem rodar um sistema operacional sobre o outro, sabe? Tipo VirtualBox. Você instala o VirtualBox no Windows e pode instalar outro Windows (espero que não faça) dentro dele.

Isso √© bastante √ļtil para fazer testes em ambientes diferentes do que voc√™ est√° usando e at√© para rodar aplica√ß√Ķes que n√£o funcionam no seu sistema atual. √Č diferente de uma m√°quina virtual, que executa um sistema operacional (guest OS) sobre o outro (host OS) e, s√≥ depois, executa as aplica√ß√Ķes.

Um cont√™iner tem a capacidade de se beneficiar do kernel do seu sistema host para executar aplica√ß√Ķes.

Na imagem abaixo, fica um pouco mais claro:

https://dev-to-uploads.s3.amazonaws.com/i/erzekt4smvip27horqb7.png

Comparativo entre a arquitetura de um sistema de contêineres versus arquitetura de um sistema virtualizado. Fonte: https://docs.docker.com/get-started/

Note que quando usamos uma máquina virtual com um sistema operacional inteiro e só depois a aplicação desejada, estamos literalmente jogando fora uma grande quantidade de recursos de hardware que podem (e devem) ser melhor aproveitados. Além de ser caro em recursos físicos, é lento e pesado. Ou seja, fica muito mais complexo replicar, compartilhar e, claro, escalar utilizando uma arquitetura baseada em máquina virtuais.

Tudo que estamos falando agora, a respeito de contêineres não é tão novo assim, e já funcionava antes do Docker. O Unix permitia realizar essa tarefa nativamente através do velho chroot, incluído em 1979, de forma limitada mas realizável. Melhorou no GNU/Linux, com a possibilidade de rodar processos isolados com o cgroup, desenvolvido pelo time de engenharia da Google em 2006 (talvez eu faça isso manualmente e documento em um outro artigo).

Apesar de cont√™ineres serem poss√≠veis desde muito tempo atr√°s, n√£o eram uma tarefa simples de se realizar. At√© que o Docker veio para facilitar tudo isso, abstraindo toda complexidade t√©cnica e nos permitindo usar os recursos e dedicar tempo em nossas pr√≥prias aplica√ß√Ķes. Por√©m, alguns conceitos precisam ser bem entendidos para se aprofundar melhor no mundo dos cont√™ineres: a diferen√ßa entre imagens e cont√™ineres.

Imagens

A abstra√ß√£o n√£o est√° apenas na execu√ß√£o dos cont√™ineres, como vimos at√© agora, mas tamb√©m na cria√ß√£o das imagens que s√£o utilizadas como base para a execu√ß√£o deles. Imagem √© uma esp√©cie de molde usado para a cria√ß√£o das inst√Ęncias (cont√™iner). Existem diversas imagens j√° constru√≠das e podemos reaproveit√°-las para facilitar nossa vida. A Docker, Inc. √© respons√°vel pelo maior hub de imagens oficiais e n√£o-oficiais, o Docker Hub (https://hub.docker.com/).

Imagens são construídas a partir de um arquivo de receita conhecido por Dockerfile. Em breve vamos começar a escrever essas receitas e compreender maneiras boas e ruins de fazer diversas coisas, para diferentes cenários.

Contêineres

Damos o nome de cont√™iner a qualquer inst√Ęncia criada a partir de um molde (imagem docker). Fazendo um paralelo com o paradigma de orienta√ß√£o a objetos, a imagem docker √© a classe enquanto que o objeto √© o cont√™iner. Podemos ter diversos cont√™ineres criados a partir da mesma imagem. Um cont√™iner permite executar a inst√Ęncia de alguma coisa de forma isolada, flex√≠vel e escal√°vel. Ele s√≥ vive enquanto seu prop√≥sito de execu√ß√£o estiver, claro, em execu√ß√£o.

Quando lidamos com containers, precisamos come√ßar considerando que os containers s√≥ nascem para morrer. Ou seja, n√£o tenha apego emocional no planejamento, ele precisa nascer, executar e morrer. Voc√™ pensando assim, come√ßar√° a desenvolver aplica√ß√Ķes cada vez mais 'conteineriz√°veis'.

Discussion (0)

Forem Open with the Forem app