Docker e Docker Compose – O fim de “na minha máquina funciona”

Por
Atualizado em
Publicado em
4 min. de leitura

Saudações, futuro(a) aprovado(a)! Professor Gunter Amorim aqui.

Se existe uma tecnologia que revolucionou a forma como desenvolvemos e implantamos software na última década, essa tecnologia é o Docker. Acabou aquela velha desculpa do desenvolvedor: “Mas na minha máquina funciona!”. Para quem estuda para concursos de TI, especialmente para cargos de Desenvolvimento e DevOps, entender o conceito de conteinerização é obrigatório. As bancas adoram comparar containers com máquinas virtuais e cobrar a sintaxe de arquivos de configuração. Vamos dominar isso agora!

O que são Containers e o que é Docker?

Antes do Docker, usávamos Máquinas Virtuais (VMs) para isolar aplicações. Uma VM emula um hardware completo e roda um Sistema Operacional (SO) inteiro (Guest OS) sobre o servidor físico. Isso é pesado e consome muitos recursos (RAM, CPU).

O Docker popularizou o uso de Containers. Um container é uma unidade padrão de software que empacota o código e todas as suas dependências (bibliotecas, configurações, runtime) para que a aplicação rode de forma rápida e confiável em qualquer ambiente.

A Diferença Chave (Cai em Prova!):

  • VMs: Virtualizam o Hardware. Cada VM tem seu próprio Kernel e SO completo.
  • Containers: Virtualizam o Sistema Operacional. Eles compartilham o mesmo Kernel do SO da máquina hospedeira (Host), mas rodam processos isolados uns dos outros. Isso os torna extremamente leves e rápidos para iniciar.

Os 3 Pilares do Docker

Para gabaritar, você precisa distinguir estes três conceitos:

  1. Dockerfile (A Receita): É um arquivo de texto simples (sem extensão) contendo as instruções para construir uma imagem. É aqui que você define qual SO base usar, quais arquivos copiar e quais comandos rodar.
  • FROM: Define a imagem base (ex: python:3.9).
  • RUN: Executa comandos durante a construção (ex: pip install …).
  • COPY: Copia arquivos do seu PC para dentro da imagem.
  • CMD ou ENTRYPOINT: Define o comando que será executado quando o container iniciar.
  1. Imagem (O Molde): É o resultado da construção (“build”) de um Dockerfile. Uma imagem é imutável (somente leitura). Pense nela como uma “classe” na orientação a objetos. Ela contém tudo o que a aplicação precisa para rodar.
  2. Container (A Instância): É a imagem em execução. Se a imagem é a “classe”, o container é o “objeto”. Você pode criar, iniciar, parar, mover ou excluir um container. Se você gravar dados dentro de um container e apagá-lo, os dados somem (a menos que use Volumes para persistência).

O que é Docker Compose?

Imagine que sua aplicação tem um Frontend (React), um Backend (Node.js) e um Banco de Dados (PostgreSQL). Gerenciar três containers separados via linha de comando (docker run…) é trabalhoso e propenso a erros.

O Docker Compose é uma ferramenta para definir e executar aplicativos Docker de múltiplos containers.

  • Arquivo YAML: Você define toda a arquitetura no arquivo docker-compose.yml.
  • Comando Único: Com apenas um comando (docker-compose up), você sobe todos os serviços interligados.

Exemplo de docker-compose.yml:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  banco:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: senha_secreta

O código…

  • Define 2 serviços no Docker Compose: web e banco.
  • web: sobe um Nginx (nginx:latest) e expõe a porta 80 do container na 80 do host (80:80).
  • banco: sobe um PostgreSQL 13 e define a senha do usuário padrão via POSTGRES_PASSWORD.

Comparativo: VM vs. Docker

CaracterísticaMáquina Virtual (VM)Container (Docker)
IsolamentoHardware e SO completo.Processos e User Space (compartilha Kernel).
TamanhoGigabytes (GBs).Megabytes (MBs).
Tempo de BootMinutos.Segundos (ou milissegundos).
DesempenhoMenor (overhead do Hypervisor).Quase nativo.
PortabilidadeModerada.Altíssima (roda igual em qualquer lugar).

Bora ver como esse assunto é cobrado nos concursos!

1. (IADES/PROFESSOR/UNDF/2022)

Nos dias atuais, a tendência é a não utilização de VMs no processo de deploy de aplicações. Em vez disso, utiliza-se outra tecnologia e uma das grandes vantagens desse uso é que suas instâncias são imutáveis, ou seja, uma vez que sua execução foi iniciada, suas configurações não podem ser alteradas, ao contrário do que acontece com VMs. No mercado, uma dessas ferramentas mais utilizadas é o Docker. Qual é o nome dado a esse tipo de tecnologia?

  1. Virtualização de integração
  2. Automatização de entregas
  3. Infraestrutura particionada
  4. Conteinerização
  5. Computação em nuvem

COMENTÁRIO

A alternativa correta é a D. A tecnologia descrita é a Conteinerização, da qual o Docker é o principal expoente no mercado atual. Diferente das Máquinas Virtuais (VMs), que exigem um sistema operacional completo para cada instância, os contêineres compartilham o kernel do sistema operacional hospedeiro, o que os torna extremamente leves e rápidos. A imutabilidade mencionada é um pilar dessa tecnologia: uma vez criada a imagem do contêiner, ela permanece inalterada; se houver necessidade de atualização, gera-se uma nova imagem e substitui-se a instância anterior, garantindo que o ambiente de execução seja sempre idêntico e livre de derivações de configuração (config drift).

2. (VUNESP/ANALISTA/ALESP/2022)

No contexto de virtualização por contêineres, por exemplo, por meio do software Docker, uma imagem de uma aplicação “conteinerizada” é:

  1. um repositório centralizado na Internet, aberto ou não, onde se pode hospedar arquivos relativos à aplicação.
  2. um arquivo de log, contendo todos os eventos relevantes sobre a execução da aplicação, desde o instante inicial.
  3. uma unidade de empacotamento, como um arquivo em formato específico, que contém os arquivos necessários para a execução da aplicação e suas dependências.
  4. uma cópia de segurança (backup) de todo o código-fonte da aplicação.
  5. uma instância em execução da aplicação.

COMENTÁRIO

A alternativa correta é a C. Uma imagem no ecossistema Docker funciona como um modelo (template) de leitura, sendo uma unidade de empacotamento estática que agrupa o código da aplicação, bibliotecas, dependências e configurações necessárias para sua execução. É fundamental não confundir a imagem com o contêiner (descrito na opção E), que é a instância viva e em execução dessa imagem. Enquanto a imagem é o artefato portátil e imutável que garante que o software rode da mesma forma em qualquer lugar, o contêiner é o processo isolado que nasce a partir dela. As demais opções descrevem erroneamente conceitos como repositórios (A), logs (B) ou backups de código (D).

3. (FCC/ANALISTA/TRT-19/2022)

A fim de utilizar o Docker em sua organização, um Analista necessitou conhecer os principais componentes dessa plataforma, tais como:

I. Software que roda na máquina onde o Docker está instalado. Recebe comandos do cliente a partir de Command Line Interfaces ou API’s REST.

II. Mecanismo usado para criar imagens e containers.

III. Coleção de imagens hospedadas e rotuladas que juntas permitem a criação do sistema de arquivos de um container. Pode ser público ou privado.

IV. Repositório usado para hospedar e baixar diversas imagens. Pode ser visto como uma plataforma de Software as a Service (SaaS) de compartilhamento e gerenciamento de imagens.

Os itens de I a IV correspondem, correta e respectivamente, a Docker

  1. Conteiner − Compose − Swarm − Image.
  2. Daemon − Image − Container − Registry.
  3. Engine − Swarm − Hub − Registry.
  4. Daemon − Engine − Registry − Hub.
  5. Conteiner − Engine − Compose − Hub.

COMENTÁRIO

A alternativa correta é a D. A questão descreve os pilares da arquitetura Docker: o (I) Daemon é o processo de plano de fundo que gerencia os objetos Docker e responde às requisições da API; a (II) Engine é o motor ou mecanismo fundamental que possibilita a criação e execução de imagens e contêineres; o (III) Registry é o serviço de armazenamento e distribuição que organiza coleções de imagens (podendo ser local ou remoto); e o (IV) Hub (Docker Hub) é o exemplo mais conhecido de um Registry gerenciado como serviço (SaaS), onde a comunidade compartilha e baixa imagens publicamente.

Conclusão

O Docker transformou a infraestrutura em código. Para sua prova, lembre-se sempre do mantra: Container compartilha Kernel; VM tem Kernel próprio. Além disso, foque nos comandos básicos do Dockerfile (FROM, RUN, CMD) e na função do Docker Compose (orquestrar múltiplos containers via YAML). Dominando isso, você garante pontos valiosos em DevOps e Infraestrutura!

Nos vemos no próximo artigo!

Por
Atualizado em
Publicado em
4 min. de leitura