No mercado de infraestrutura e desenvolvimento, muito se fala sobre “levar a aplicação de um lado para o outro”, mas o verdadeiro poder do Docker não reside apenas no transporte, e sim no isolamento de processos e na eficiência de recursos. Como Google Partners, entendemos que a escolha entre Máquinas Virtuais (VMs) e Containers é uma decisão estratégica de arquitetura. Hoje, iremos conversar um pouco mais sobre o docker!

O que é, de fato, um Container?
Diferente do que muitos pensam, um container não é uma “VM leve”. Um container é um processo isolado rodando no host.
Enquanto uma Máquina Virtual isola o hardware através de um Hypervisor, o container realiza o isolamento a nível de Sistema Operacional. Ele utiliza recursos nativos do Kernel do Linux para garantir que os processos funcionem de forma independente:
- Namespaces: Responsáveis por isolar a visão do sistema que o processo possui (redes, árvores de processos, usuários e sistemas de arquivos).
- Cgroups (Control Groups): Responsáveis por limitar e monitorar o consumo de recursos físicos (como CPU, Memória e I/O), garantindo que um processo não comprometa a estabilidade do host.
Virtualização vs. Conteinerização
A principal diferença reside na camada de abstração:
- Virtualização Tradicional (VMs): Roda sobre um Hypervisor. Cada VM inclui uma cópia completa de um Sistema Operacional, os binários, as bibliotecas e a aplicação. Isso gera um overhead massivo de memória e disco.
- Conteinerização (Docker): Roda diretamente no Kernel do Host. Todos os containers compartilham o mesmo Kernel, mas possuem seus próprios sistemas de arquivos, bibliotecas e configurações isoladas.
As Camadas de Funcionamento do Docker
Para entender como o Docker sustenta essa estrutura, precisamos olhar para seus componentes de runtime e armazenamento:
- Docker Daemon: O serviço de background que gerencia todo o ciclo de vida. Ele é o responsável por gerenciar imagens, redes e volumes, comunicando-se diretamente com o Kernel para criar ambientes isolados.
- Docker Registry: O centro de distribuição. É um sistema de armazenamento e entrega de imagens. Quando você solicita uma imagem, o Daemon a busca no Registry (como o Docker Hub ou o Google Artifact Registry).
Imagens vs. Containers (A Diferença de Estado)
- Imagem: É um conjunto de camadas de leitura (Read-Only). Elas são definitivas e imutáveis.
- Container: É uma camada fina de escrita (Read-Write) adicionada sobre a imagem.
- Conceito Vital: Containers são efêmeros. Se um container morre, a camada de escrita é descartada. A imagem, no entanto, permanece intacta e pronta para instanciar um novo container em milissegundos.
Construindo a Infraestrutura: O Dockerfile
O Dockerfile não é apenas um script de instalação; é a declaração da infraestrutura como código (IaC) da sua aplicação. Ele define como as camadas da imagem serão empilhadas.
Tutorial: Construção de Imagem com Dockerfile
Para criar uma imagem robusta, seguimos uma ordem lógica de camadas. Veja este exemplo para uma aplicação estática:
Dockerfile
# 1. Imagem base imutável
FROM nginx:alpine
# 2. Definição de metadados
LABEL maintainer=”Gabriel Sotero – NetExperts”
# 3. Execução de comandos para preparar o ambiente (Criação de camada)
RUN apk add –no-cache bash
# 4. Cópia dos artefatos (Construção da camada de aplicação)
COPY ./meu-site /usr/share/nginx/html
# 5. Porta que o processo do container irá escutar
EXPOSE 80
# 6. Ponto de entrada (O que o container executará ao nascer)
CMD [“nginx”, “-g”, “daemon off;”]
O Processo de Build e Execução
Com o arquivo criado, o processo de transformação da “planta” (Dockerfile) em um “objeto” (Imagem) e finalmente em um “processo” (Container) segue estes comandos:
1. Realizando o Build (Criação da Imagem):
Bash
docker build -t netexperts/servidor-web:v1 .
Neste momento, o Docker Daemon lê o Dockerfile, executa cada instrução e armazena o resultado em camadas de cache.
2. Verificando a Persistência:
Mesmo que você desligue o computador, a imagem persistirá:
Bash
docker images
3. Instanciando o Container:
Bash
docker run -d –name meu-servidor -p 80:80 netexperts/servidor-web:v1Aqui, o Docker cria o isolamento de processo e adiciona a camada de escrita. Se este container for removido com docker rm -f, nada acontece com a imagem original.
Conclusão
Entender que o Docker manipula processos através do compartilhamento do Kernel é fundamental para otimizar custos de nuvem e performance de software. Na NetExperts, aplicamos esses conceitos para garantir que sua infraestrutura seja tão resiliente quanto suas imagens.

