Pular para o conteúdo principal

O que é Docker: Guia para Iniciantes em 2026

· 11 min para ler
Iêso Dias
Instrutor DevOps & Cloud

Se você está começando em DevOps ou desenvolvimento, é praticamente impossível não ter ouvido falar em Docker. Ele está em vagas de emprego, em pipelines de CI/CD, em deploys na nuvem e em quase todo tutorial moderno de software.

Neste guia direto ao ponto, você vai entender o que é Docker, por que ele virou padrão da indústria e como criar e rodar seu primeiro container ainda hoje.

Quer dominar Docker e DevOps na prática? Confira o curso completo: DevOps Automação Sem Enrolação na Udemy — com exemplos reais de containerização, pipelines e automação.

O que é Docker

Docker é uma plataforma open source que permite empacotar, distribuir e executar aplicações em containers. Lançado em 2013, ele se tornou o padrão de fato para containerização e mudou para sempre a forma como construímos e entregamos software.

A definição vem da própria documentação oficial do Docker:

“Docker é uma plataforma aberta para desenvolver, distribuir e executar aplicações. Ele permite separar suas aplicações da infraestrutura para que você possa entregar software rapidamente.”

Em outras palavras: Docker resolve o famoso problema “mas na minha máquina funciona”. Ele empacota o código, runtime, bibliotecas, dependências e configurações em uma unidade portátil que roda igual em qualquer lugar — laptop, servidor on-premises, AWS, Azure ou GCP.

O que é um container

Um container é uma unidade padrão de software que empacota o código e todas as suas dependências para que a aplicação rode de forma rápida e confiável em qualquer ambiente.

Pense num container como um “mini-sistema isolado” rodando sobre o sistema operacional do host. Dentro dele tem tudo que sua aplicação precisa: código, bibliotecas, variáveis de ambiente, configurações. Fora dele, nada interfere.

Diferente de uma máquina virtual, containers compartilham o kernel do sistema operacional do host, o que os torna leves, rápidos para iniciar e econômicos em recursos.

Container vs Máquina Virtual: a diferença essencial

Essa é uma das maiores dúvidas de quem está começando. As duas tecnologias parecem fazer a mesma coisa — isolar aplicações — mas funcionam em níveis muito diferentes.

AspectoContainerMáquina Virtual
Camada de virtualizaçãoSistema operacionalHardware
Tamanho típicoDezenas de MBDezenas de GB
Tempo de bootSegundosMinutos
KernelCompartilhado com o hostPróprio (cópia completa do SO)
Densidade por servidorCentenas de containersDezenas de VMs
IsolamentoProcesso (namespaces, cgroups)Hardware completo

Resumo rápido:

  • Máquina virtual virtualiza um servidor inteiro — incluindo o SO completo
  • Container virtualiza apenas o que sua aplicação precisa — usando recursos do SO do host

Na prática, as duas tecnologias convivem: é comum rodar containers Docker dentro de VMs em produção, combinando o melhor dos dois mundos.

Como Docker funciona por baixo dos panos

Docker tem uma arquitetura cliente-servidor com três peças principais:

  1. Docker Daemon (dockerd) — o serviço que roda em background, gerencia imagens, containers, redes e volumes
  2. Docker Client (docker) — o CLI que você usa no terminal, envia comandos para o daemon
  3. Docker Registry — onde as imagens ficam armazenadas (o Docker Hub é o registro público padrão)

Por baixo, Docker usa recursos do kernel Linux como namespaces (isolamento) e cgroups (limites de recursos) para criar a “sandbox” onde o container roda. Em macOS e Windows, o Docker Desktop sobe uma VM Linux por baixo para que tudo funcione transparentemente.

Os conceitos que você precisa conhecer

Antes de colocar a mão na massa, fixe esses cinco termos:

  1. Imagem (Image) — template somente leitura que define o que vai rodar. É como um “molde”.
  2. Container — uma instância em execução de uma imagem. É como uma “peça fundida” a partir do molde.
  3. Dockerfile — arquivo de texto com instruções para construir uma imagem.
  4. Registry (Registro) — repositório onde as imagens são armazenadas e compartilhadas (Docker Hub, GitHub Container Registry, AWS ECR, Azure ACR).
  5. Volume — forma de persistir dados fora do container (porque container, por padrão, é efêmero).

A relação entre eles:

Dockerfile → (docker build) → Imagem → (docker run) → Container

Registry (Docker Hub)

Para que serve Docker no dia a dia

Docker é usado em praticamente toda a cadeia moderna de software:

  • Desenvolvimento local — subir banco de dados, Redis, Kafka em segundos sem instalar nada na máquina
  • CI/CD — pipelines reproduzíveis usando containers como ambiente de build e teste
  • Deploy em produção — empacotar a aplicação como imagem e rodar em qualquer ambiente
  • Microsserviços — cada serviço como um container independente
  • Testes automatizados — subir bancos e dependências efêmeros para suíte de testes
  • Padronização de equipes — todo dev usa o mesmo ambiente, fim do “na minha máquina funciona”

Por isso Docker se conecta diretamente com tópicos como CI/CD para iniciantes, Kubernetes e Platform Engineering.

Instalando o Docker

A forma mais fácil de começar é com o Docker Desktop (Mac, Windows e Linux). Ele já vem com Docker Engine, Docker CLI, Docker Compose e até Kubernetes embutido.

  • macOS / Windows: Docker Desktop
  • Linux: pode usar Docker Desktop ou instalar diretamente o Docker Engine via gerenciador de pacotes (apt, dnf, etc.)

Depois da instalação, valide com:

docker --version
docker run hello-world

Se aparecer a mensagem de boas-vindas, está pronto.

Comandos Docker que você usa todo dia

Não precisa decorar tudo, mas estes 10 comandos resolvem 80% do uso real:

# Imagens
docker pull nginx:latest # baixa uma imagem do registry
docker images # lista imagens locais
docker rmi nginx:latest # remove uma imagem

# Containers
docker run -d -p 8080:80 nginx # roda nginx em background, mapeando porta
docker ps # lista containers em execução
docker ps -a # inclui containers parados
docker stop <id> # para um container
docker rm <id> # remove um container parado

# Inspeção e debug
docker logs <id> # vê os logs do container
docker exec -it <id> /bin/sh # abre um shell dentro do container

A flag -p 8080:80 é uma das primeiras a entender bem: ela mapeia a porta 8080 da sua máquina para a porta 80 do container.

Exemplo prático: containerizando uma aplicação Node.js

Nada explica Docker melhor do que um exemplo real. Vamos containerizar uma aplicação Node.js simples.

Crie um arquivo Dockerfile na raiz do projeto:

# syntax=docker/dockerfile:1

# Imagem base oficial e leve
FROM node:24-alpine

# Diretório de trabalho dentro do container
WORKDIR /app

# Copia os manifestos primeiro para aproveitar cache
COPY package*.json ./

# Instala dependências de produção
RUN npm ci --omit=dev

# Copia o restante do código
COPY . .

# Documenta a porta usada pela aplicação
EXPOSE 3000

# Comando que roda quando o container sobe
CMD ["node", "index.js"]

Construa e rode:

docker build -t minha-app:1.0 .
docker run -d -p 3000:3000 --name minha-app minha-app:1.0
docker logs minha-app

Pronto: sua aplicação está rodando dentro de um container, isolada do sistema, e essa mesma imagem vai rodar identicamente no laptop do colega, no pipeline de CI e em produção.

Quer aprender Docker do zero, com Dockerfile, Docker Compose e deploy real? O curso DevOps Automação Sem Enrolação cobre exatamente esse caminho.

Imagens menores com multi-stage build

Um padrão importante já no início: multi-stage build. Você usa um “estágio de build” pesado para compilar e um “estágio final” enxuto só com o que precisa rodar.

Exemplo clássico, app Node + servir estático com Nginx:

# syntax=docker/dockerfile:1

# Estágio 1: build dos assets
FROM node:24-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Estágio 2: imagem final, só com o que vai a produção
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html

A imagem final fica com dezenas de MB em vez de centenas. Em produção, isso significa deploys mais rápidos, menos custo de storage e menor superfície de ataque.

Docker Compose: orquestrando múltiplos containers

Aplicações reais raramente são um container só. Quase sempre você tem app + banco + cache + algum serviço extra.

Para isso existe o Docker Compose: um arquivo docker-compose.yml define todos os serviços e sobe tudo com um comando. Exemplo mínimo:

services:
api:
build: .
ports:
- "3000:3000"
depends_on:
- db

db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: example
volumes:
- db_data:/var/lib/postgresql/data

volumes:
db_data:

Para subir tudo:

docker compose up -d
docker compose logs -f
docker compose down

Compose é um dos primeiros “upgrades” que você faz depois de dominar docker run.

Boas práticas para começar com o pé direito

Erros comuns de quem está começando com Docker — e como evitar:

  1. Não use latest em produção. Sempre fixe a versão (nginx:1.27-alpine, node:24-alpine). Reprodutibilidade é regra de ouro.
  2. Prefira imagens alpine ou slim. Menores, mais rápidas e com menor superfície de ataque.
  3. Não rode containers como root. Use USER no Dockerfile para reduzir risco em caso de comprometimento.
  4. Aproveite o cache de layers. Copie package.json antes de copiar o resto do código — assim o cache de npm install é reutilizado.
  5. Use .dockerignore. Evita copiar node_modules, .git e arquivos sensíveis para dentro da imagem.
  6. Não armazene segredos na imagem. Use variáveis de ambiente, secret managers ou build secrets.
  7. Adote multi-stage build quando o build precisar de ferramentas que não devem ir para produção.

Docker e o restante do mundo DevOps

Docker raramente vive sozinho. Ele se conecta com praticamente todos os outros pilares de DevOps:

  • CI/CD — containers como ambiente padronizado de build e como artefato final
  • Kubernetes — orquestrador que gerencia centenas/milhares de containers em produção
  • Infraestrutura como Código — provisionar a infra que vai rodar os containers
  • Segurança em pipelines — scanners de imagem (Trivy, Docker Scout) integrados ao CI
  • Platform Engineering — containers como base de plataformas internas
  • FinOps — porque container rodando 24h sem necessidade também gera custo

Se está começando do zero, vale acompanhar o post DevOps para Iniciantes: Guia Rápido para Começar em 2026 para encaixar Docker na trilha completa.

Perguntas frequentes sobre Docker

Docker é a mesma coisa que máquina virtual?

Não. VM virtualiza hardware e carrega um SO completo. Docker virtualiza apenas o ambiente da aplicação, compartilhando o kernel do host. Por isso containers são muito mais leves e rápidos.

Preciso de Linux para usar Docker?

Não. Docker Desktop roda em macOS, Windows e Linux. Em macOS e Windows, ele sobe uma pequena VM Linux por baixo automaticamente.

Docker é gratuito?

O Docker Engine e o Docker CLI são open source e gratuitos. O Docker Desktop é gratuito para uso pessoal, educação e pequenas empresas; empresas grandes precisam de licença comercial. Vale conferir o modelo de pricing atual antes de adotar em escala.

Qual a diferença entre Docker e Kubernetes?

Docker é a tecnologia de container — empacota e roda containers. Kubernetes é o orquestrador — gerencia centenas ou milhares de containers em vários servidores, com auto-scaling, healing e deploys controlados. Os dois trabalham juntos, não competem.

Devo aprender Docker antes de Kubernetes?

Sim, sem dúvida. Kubernetes assume que você já entende imagens, containers, redes e volumes. Tente pular Docker e a curva de Kubernetes vira um muro.

Docker substitui linguagens de programação?

Não. Docker não substitui nada. Ele é uma camada de empacotamento e execução. Você continua escrevendo código em Node, Python, Go, Java etc. — Docker apenas embala isso para rodar de forma portátil.

Conclusão

Docker é uma das tecnologias mais transformadoras dos últimos 10 anos. Quem está começando em DevOps não pode pular essa etapa: dominar Docker é pré-requisito para entender CI/CD moderno, Kubernetes, microsserviços e deploys em nuvem.

A boa notícia é que dá para começar pequeno: instale o Docker Desktop, rode docker run hello-world e parta para containerizar uma aplicação sua ainda esta semana. Os ganhos aparecem rápido — em produtividade, padronização e em quanto você consegue evoluir nos próximos passos da carreira.

Nos próximos posts, vamos aprofundar em Docker Compose para projetos reais, boas práticas de Dockerfile em produção e integração de Docker com pipelines de CI/CD.


Quer aprender Docker e DevOps na prática, com pipelines reais e exemplos de mercado? Acesse: DevOps Automação Sem Enrolação

Referências oficiais: