DEV Community

Cover image for O que é Docker?
Diego Dmitry
Diego Dmitry

Posted on • Updated on

O que é Docker?

O Docker não inventou os contêineres, mas tornou-os mais fáceis de usar com três etapas:

  1. Imagens: Ajuda você a empacotar um aplicativo (com todas as suas dependências).
  2. Registros: Ajudam a distribuir o aplicativo em todos os locais que você precisa para executá-lo.
  3. Contêineres: Executam o aplicativo de uma forma altamente reproduzível.

O Docker chama isso esse ciclo de vida de "Construir, Enviar e Executar".

Docker Build, Ship and Run

Esses são os princípios básicos sobre os quais todas as outras tecnologias de contêineres são construídas.

Observe que essas inovações agora têm padrões e são regidas pela Open Container Initiative (OCI), que faz parte da Linux Foundation.

A Imagem Docker

The Docker Image

  1. É chamado de "imagem do Docker", o nome padrão é: "Imagem OCI" ou apenas "imagem".
  2. O Docker usa uma lista de instruções, chamada de Dockerfile, que é semelhante a um script em shell, e coloca essas instruções em camadas umas sobre as outras até ter tudo o que você precisa para executar o aplicativo, inclusive todas as dependências do sistema.
  3. A inclusão das dependências é um diferencial importante entre o Docker e muitos sistemas de empacotamento. Isso ajuda a evitar o problema: "funciona na minha máquina".
  4. Se fosse um aplicativo Python para compilar, a imagem conteria o próprio aplicativo e todas as dependências Python de que precisa.
  5. A principal distinção é ela também inclui a versão exata do Python e as bibliotecas do sistema para executar corretamente o Python.
  6. Tudo está incluído, exceto o kernel do sistema operacional e os drivers de hardware. Até mesmo metadados sobre como iniciar o aplicativo, variáveis de ambiente padrão e quais portas ele escuta estão incluídos.

O Registro

The Docker Registry

  1. Chamado de "registro do Docker", ou apenas "registro", para abreviar.
  2. Essa inovação foi a chave para conectar nossa criação de imagens em uma máquina para executar nossos contêineres em outra.
  3. Agora que criamos uma imagem e a executamos em nossa máquina local, como a colocamos em todas as outras máquinas?
  4. Como posso ter certeza de que o restante da minha equipe, meu teste de CI e todos os meus servidores executam exatamente a mesma imagem?
  5. O registro é um gerenciador de pacotes baseado em HTTP que funciona como o apt, yum, npm e outros gerenciadores de pacotes.
  6. Você pode fazer upload de uma imagem e, em seguida, downlaod da imagem em outro lugar.
  7. O protocolo de registro é eficiente. Ele só faz upload e download das partes alteradas (camadas) e armazena a imagem no cache local das máquinas para a execução rápida de novos contêineres.

Pense nas imagens e no registro como o gerenciador de pacotes, onde podemos criar, baixar e executar qualquer aplicativo em qualquer sistema. Isso inclui a criação e a execução no Linux, macOS, Windows, na nuvem, no seu data center, em um mainframe ou em um pequeno Raspberry Pi. O Docker funciona em todos eles.

O Docker Container

The Docker Container

  1. Chamado de "Docker contêiner", o nome padrão "Contêiner OCI" ou apenas "contêiner". Ele não é chamado de "docker" ou "dockers". Docker são muitas coisas.
  2. O Docker iniciará sua imagem de contêiner em um novo contêiner em execução e usará o comando especificado no Dockerfile para iniciá-lo.
  3. Usa dois recursos do kernel Linux, chamados namespaces e cgroups (grupos de controle), para isolar seu aplicativo de modo que ele não possa ver o restante do host. Para o aplicativo, os únicos arquivos que ele vê são os que estão na imagem do contêiner. Ele não vê nenhum outro processo fora do contêiner e até mesmo tem sua própria interface de rede e IP privado.
  4. Agora, deixe-me enfatizar: isso NÃO é virtualização. Trata-se de isolamento de aplicativos, semelhante ao chroot.
  5. Você pode iniciar muitos desses contêineres a partir da mesma imagem de contêiner, no mesmo sistema, e todos eles estarão isolados uns dos outros. As alterações de arquivos em um contêiner não afetam os arquivos em outro.

Leitura adicional

Top comments (0)