O que é Docker? Containers explicados do zero para desenvolvedores e times de TI
Se você já ouviu a frase “funciona na minha máquina” e sabe a dor que ela causa, o Docker foi criado para eliminar exatamente esse problema. Com containers, a aplicação e tudo que ela precisa para rodar — dependências, configurações, versões de bibliotecas — viajam juntos em um pacote padronizado que funciona igual em qualquer ambiente: desenvolvimento, staging ou produção.
Neste guia você vai entender o que é Docker, como ele funciona, a diferença entre containers e máquinas virtuais, os comandos essenciais e como ele se encaixa em uma arquitetura moderna de software.
- O que é: plataforma de containerização que empacota aplicações e suas dependências em containers isolados e portáteis.
- Problema que resolve: incompatibilidades de ambiente entre desenvolvimento, staging e produção — o famoso “funciona na minha máquina”.
- Conceitos-chave: imagem (template), container (instância em execução), Dockerfile (receita), Docker Hub (repositório de imagens), Docker Compose (orquestração local).
- Onde é usado: deploy de aplicações web, microsserviços, pipelines de CI/CD, ambientes de desenvolvimento padronizados.
O que é Docker?
Docker é uma plataforma open source que permite criar, distribuir e executar aplicações em containers. Um container é um ambiente isolado e leve que contém tudo que uma aplicação precisa para funcionar — código, runtime, bibliotecas, variáveis de ambiente e configurações — sem depender do sistema operacional do host para além do kernel Linux.
Lançado em 2013 pela empresa Docker Inc. (originalmente dotCloud), o Docker democratizou a containerização — tecnologia que existe no Linux desde os anos 2000 (LXC, cgroups, namespaces) mas que era complexa de usar diretamente. O Docker criou uma interface simples e padronizada que transformou a forma como software é desenvolvido e implantado.
Container vs. Máquina Virtual: qual a diferença?
Essa é a pergunta mais comum de quem está começando com Docker. As duas tecnologias isolam ambientes, mas de formas fundamentalmente diferentes:
| Critério | Container Docker | Máquina Virtual (VM) |
|---|---|---|
| Isolamento | Processo isolado — compartilha o kernel do host | Sistema operacional completo isolado |
| Tamanho | Megabytes (imagens leves) | Gigabytes (SO completo) |
| Tempo de inicialização | Milissegundos a segundos | Dezenas de segundos a minutos |
| Overhead de recursos | Mínimo | Significativo (hypervisor + SO) |
| Portabilidade | Alta — roda igual em qualquer host Linux/Docker | Moderada — depende do hypervisor |
| Isolamento de segurança | Moderado (compartilha kernel) | Alto (SO completamente separado) |
Na prática, containers e VMs são complementares: muitas empresas rodam containers dentro de VMs — a VM fornece o isolamento do hardware, o container fornece a padronização do ambiente da aplicação.
Conceitos fundamentais do Docker
Imagem Docker
Uma imagem é um template imutável e em camadas que define o que estará dentro do container. É como uma “fotografia” do ambiente da aplicação. Imagens são construídas a partir de um Dockerfile e armazenadas localmente ou em registries como o Docker Hub.
Container
Um container é uma instância em execução de uma imagem. Você pode criar dezenas de containers a partir da mesma imagem — cada um isolado, com seu próprio processo, sistema de arquivos e rede. Containers são efêmeros: quando parados e removidos, não deixam rastros.
Dockerfile
O Dockerfile é o arquivo de texto com as instruções para construir uma imagem. Exemplo básico para uma aplicação Node.js:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]Docker Hub
Registry público de imagens Docker — o equivalente ao GitHub para imagens de containers. Você encontra imagens oficiais de praticamente qualquer tecnologia: nginx, postgres, redis, python, node, mysql e centenas de outras. Usar imagens oficiais é a forma mais rápida de começar.
Docker Compose
Ferramenta para definir e executar aplicações multi-container. Com um único arquivo docker-compose.yml, você sobe toda a stack da aplicação — aplicação web, banco de dados, cache, fila — com um único comando: docker compose up.
Comandos Docker essenciais
| Comando | O que faz |
|---|---|
docker pull nginx | Baixa a imagem do nginx do Docker Hub |
docker run -p 80:80 nginx | Cria e inicia um container nginx mapeando a porta 80 |
docker ps | Lista containers em execução |
docker ps -a | Lista todos os containers (incluindo parados) |
docker stop [id] | Para um container gracefully |
docker rm [id] | Remove um container parado |
docker images | Lista imagens locais |
docker build -t minha-app . | Constrói imagem a partir do Dockerfile no diretório atual |
docker exec -it [id] bash | Abre terminal interativo dentro de um container |
docker logs [id] | Exibe os logs de um container |
Docker Compose na prática
Exemplo de docker-compose.yml para uma aplicação web com banco de dados PostgreSQL:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://user:password@db:5432/mydb
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Com esse arquivo, docker compose up -d sobe toda a stack em segundos.
docker compose up e têm o ambiente de desenvolvimento idêntico ao dos colegas em minutos — sem horas de configuração manual, sem conflitos de versão, sem “funciona na minha máquina”.Docker em produção: Kubernetes e além
Para produção com múltiplos containers, alta disponibilidade e escalabilidade, o Docker sozinho não é suficiente — entra o Kubernetes (K8s), o orquestrador de containers mais adotado do mundo. O Kubernetes gerencia o ciclo de vida dos containers em clusters de servidores, incluindo: escalonamento automático, balanceamento de carga, rollouts sem downtime e recuperação automática de falhas.
Para quem está começando ou tem operações menores, alternativas mais simples ao Kubernetes incluem Docker Swarm (nativo no Docker), Portainer (interface gráfica para gerenciar containers) e plataformas como Railway, Render e Fly.io que abstraem toda a orquestração.
Perguntas frequentes sobre Docker
Docker roda no Windows e macOS?
Sim. O Docker Desktop está disponível para Windows e macOS. No Windows, ele usa o WSL 2 (Windows Subsystem for Linux) como backend. No macOS, usa uma VM Linux leve. A experiência é praticamente idêntica ao Linux, embora com algum overhead adicional por conta da camada de virtualização.
Posso usar Docker para banco de dados em produção?
É possível, mas requer atenção extra à persistência de dados (volumes) e backup. Muitas equipes preferem usar bancos de dados gerenciados (RDS, Cloud SQL, Neon) em produção e Docker apenas para desenvolvimento e testes, onde a persistência não é crítica.
Docker é gratuito?
O Docker Engine (versão CLI, open source) é gratuito para todos os usos. O Docker Desktop é gratuito para uso pessoal e em pequenas empresas (menos de 250 funcionários e receita menor que US$ 10M). Empresas maiores precisam de licença paga. O Docker Hub tem plano gratuito com pulls limitados e planos pagos para uso intenso.
Qual a diferença entre Docker e Podman?
Podman é uma alternativa open source ao Docker desenvolvida pela Red Hat. A principal diferença é que o Podman é “daemonless” (não precisa de um processo daemon rodando como root) e é compatível com a maioria dos comandos Docker. É a opção preferida em ambientes corporativos com requisitos de segurança mais rígidos, especialmente no ecossistema RHEL/CentOS.
Docker é necessário para aprender Kubernetes?
Ter familiaridade com containers e Docker é altamente recomendado antes de aprender Kubernetes. O Kubernetes orquestra containers — entender como um container funciona, como construir imagens e como configurar aplicações multi-container é a base necessária para trabalhar com K8s de forma eficiente.
Conclusão
Docker se tornou uma das ferramentas mais fundamentais do desenvolvimento e operações de software moderno. Seja para padronizar ambientes de desenvolvimento, simplificar deploys ou construir arquiteturas de microsserviços, entender Docker é hoje uma habilidade essencial para desenvolvedores, engenheiros de DevOps e administradores de sistemas. O melhor jeito de aprender é praticando: instale o Docker, rode os primeiros containers e construa sua primeira imagem.
Confira mais conteúdos sobre tecnologia e infraestrutura no Atraca para continuar sua jornada no universo DevOps.
Perguntas frequentes sobre Docker (FAQ)
O que é Docker?
Docker é uma plataforma de containerização que permite empacotar aplicações com todas as suas dependências em containers isolados e portáteis, garantindo que funcionem de forma consistente em qualquer ambiente.
Qual a diferença entre Docker e máquina virtual?
Máquinas virtuais emulam hardware completo e têm sistema operacional próprio, consumindo mais recursos. Containers Docker compartilham o kernel do SO host, são muito mais leves, iniciam em segundos e usam menos memória e disco.
Docker é difícil de aprender?
Os conceitos básicos (imagens, containers, volumes, redes) podem ser aprendidos em alguns dias. Para uso em produção com Docker Compose e orquestração (Kubernetes), o aprendizado é gradual e mais demorado.
Docker funciona no Windows?
Sim. O Docker Desktop para Windows usa WSL 2 (Windows Subsystem for Linux) para rodar containers Linux nativamente. Para containers Windows, usa o Hyper-V. O Docker Desktop também está disponível para macOS.
Docker e Kubernetes são a mesma coisa?
Não. Docker cria e executa containers individuais. Kubernetes é um orquestrador que gerencia clusters de containers em escala, automatizando deploy, escalabilidade e recuperação de falhas em ambientes de produção complexos.
