Buscar

O que é Docker?

O que é Docker, como ele empacota aplicações em containers, a diferença entre container e máquina virtual, os comandos essenciais e como ele se encaixa no fluxo moderno de software.

Gabriel Pedroso8 min de leitura
O que é Docker?

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. A tese em uma frase: o Docker empacota a aplicação junto com o ambiente dela, então o que roda no seu notebook roda idêntico em produção — o fim do "na minha máquina funcionava".

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 numa arquitetura moderna de software. O caminho de uma aplicação até virar container é este:

1Dockerfilea receita: imagem base, dependências e comando
2Buildvira uma imagem imutável e em camadas
3Registrya imagem é enviada ao Docker Hub
4Runa imagem sobe como container isolado
5EscalaN containers iguais; Compose e K8s orquestram
Do código ao container: o Dockerfile vira uma imagem no build, a imagem vai para um registry, e cada container é uma instância isolada dela. Compose e Kubernetes orquestram muitos containers.

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érioContainer DockerMáquina Virtual (VM)
IsolamentoProcesso isolado — compartilha o kernel do hostSistema operacional completo isolado
TamanhoMegabytes (imagens leves)Gigabytes (SO completo)
Tempo de inicializaçãoMilissegundos a segundosDezenas de segundos a minutos
Overhead de recursosMínimoSignificativo (hypervisor + SO)
PortabilidadeAlta — roda igual em qualquer host Linux/DockerModerada — depende do hypervisor
Isolamento de segurançaModerado (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

ComandoO que faz
docker pull nginxBaixa a imagem do nginx do Docker Hub
docker run -p 80:80 nginxCria e inicia um container nginx mapeando a porta 80
docker psLista containers em execução
docker ps -aLista todos os containers (incluindo parados)
docker stop [id]Para um container gracefully
docker rm [id]Remove um container parado
docker imagesLista imagens locais
docker build -t minha-app .Constrói imagem a partir do Dockerfile no diretório atual
docker exec -it [id] bashAbre 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.

Por que times de desenvolvimento adoram Docker: novos membros do time clonam o repositório, rodam 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.

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

O que é Docker?

Docker é uma plataforma de containerização que empacota uma aplicação com todas as suas dependências em um container isolado e portátil, garantindo que ela funcione igual em qualquer ambiente — do notebook do desenvolvedor à produção.

Qual a diferença entre Docker e máquina virtual?

A máquina virtual emula um hardware completo e roda um sistema operacional próprio, consumindo mais recursos. O container Docker compartilha o kernel do host, é muito mais leve, inicia em segundos e usa menos memória e disco. Muitas vezes eles se combinam: containers rodando dentro de VMs.

Docker é gratuito?

O Docker Engine (a CLI, open source) é gratuito para qualquer uso. O Docker Desktop é gratuito para uso pessoal e em pequenas empresas, e exige licença paga em empresas grandes. O Docker Hub tem plano gratuito com limite de pulls e planos pagos para uso intenso.

Qual a diferença entre Docker e Podman?

O Podman é uma alternativa open source ao Docker, da Red Hat. A principal diferença é que ele é "daemonless" (não precisa de um processo rodando como root) e é compatível com a maioria dos comandos Docker — preferido em ambientes corporativos com segurança mais rígida, sobretudo no ecossistema RHEL.

Docker e Kubernetes são a mesma coisa?

Não. O Docker cria e executa containers individuais. O Kubernetes é um orquestrador que gerencia clusters de containers em escala, automatizando deploy, balanceamento, escalonamento e recuperação de falhas. Aprender Docker primeiro é a base para entender o Kubernetes.