Você já ouviu “funciona na minha máquina” e precisou resolver por horas um problema que não existia no seu ambiente local? O Docker foi criado exatamente para eliminar esse problema, e hoje você vai entender como.
Neste guia você vai aprender o que é Docker, instalar em qualquer sistema operacional, e rodar seu primeiro container com comandos reais, do zero.
O Que É Docker e Por Que Todo Dev Deveria Conhecer
Docker é uma plataforma de conteinerização. Em termos simples: ele permite empacotar uma aplicação com tudo que ela precisa para rodar (código, dependências, configurações) em um único pacote chamado container.
Pense assim: se você fosse mudar de cidade, não levaria só as chaves da sua casa nova. Você levaria tudo que precisa para funcionar — móveis, utensílios, roupas. O Docker faz exatamente isso com sua aplicação.
A diferença de uma máquina virtual (VM), que emula um sistema operacional inteiro, é que um container compartilha o kernel do sistema operacional do host. Isso torna containers muito mais leves e rápidos de inicializar.
Por que isso importa na prática:
- Seu código roda da mesma forma no seu notebook, no servidor de staging e em produção.
- Configurar o ambiente de um novo desenvolvedor no time leva minutos, não horas.
- Você pode rodar múltiplas versões da mesma tecnologia sem conflito (Node 16 e Node 20, por exemplo).
- Rollback de uma versão defeituosa leva segundos.
No ecossistema DevOps e SRE, Docker é uma habilidade base. Pipelines de CI/CD, Kubernetes, e serviços gerenciados como AWS ECS e EKS são todos construídos em cima desse conceito.
Os 4 Conceitos Fundamentais do Docker
Antes de instalar qualquer coisa, vale entender quatro termos que vão aparecer o tempo todo.
1. Image (Imagem)
Uma imagem é o “molde” do container. É um pacote imutável que contém o sistema de arquivos e as instruções de como o container deve funcionar. Você não edita uma imagem em execução: você cria uma nova versão.
2. Container
Um container é uma instância em execução de uma imagem. A relação é a mesma de uma classe e um objeto em orientação a objetos: a imagem é a classe, o container é o objeto instanciado.
3. Dockerfile
Um arquivo de texto com instruções para construir uma imagem. É a “receita” de como montar o ambiente da sua aplicação.
4. Registry
O repositório onde imagens ficam armazenadas. O registry público oficial é o Docker Hub, onde você encontra imagens prontas de Nginx, PostgreSQL, Redis, Node.js, e praticamente qualquer tecnologia.
Instalando o Docker na Sua Máquina
A instalação varia por sistema operacional. O processo mais simples em todos os casos é usar o Docker Desktop, o aplicativo oficial da Docker Inc.
Linux
No Ubuntu ou Debian, rode os seguintes comandos no terminal:
# Remover versões antigas (se existirem)
sudo apt remove docker docker-engine docker.io containerd runc
# Instalar dependências
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
# Adicionar a chave GPG oficial do Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Adicionar o repositório
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Instalar o Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Após instalar, adicione seu usuário ao grupo docker para não precisar usar sudo a cada comando:
sudo usermod -aG docker $USER
newgrp docker
macOS e Windows
Baixe e instale o Docker Desktop diretamente do site oficial: docker.com/products/docker-desktop.
O Docker Desktop inclui tudo: engine, CLI, e uma interface gráfica para gerenciar containers e imagens.
Verificando a Instalação
Após instalar, abra o terminal e rode:
docker --version
# Docker version 27.x.x, build xxxxxxx
docker run hello-world
Se o hello-world rodar com uma mensagem de confirmação, o Docker está funcionando corretamente.
Os Comandos Essenciais do Docker
Com o Docker instalado, você precisa de apenas um punhado de comandos para o dia a dia. Aqui estão os mais importantes.
Baixar uma imagem
docker pull nginx
Este comando baixa a imagem oficial do Nginx do Docker Hub para sua máquina.
Listar imagens disponíveis localmente
docker images
Rodar um container
docker run nginx
Este comando cria e inicia um container baseado na imagem nginx. Por padrão, o container roda em foreground e prende o terminal. Para rodar em background (detached mode), use a flag -d:
docker run -d nginx
Listar e gerenciar containers
# Containers em execução
docker ps
# Todos os containers (incluindo parados)
docker ps -a
# Parar e remover
docker stop <container_id>
docker rm <container_id>
O <container_id> aparece na coluna CONTAINER ID do docker ps. Você não precisa digitar o ID completo: os primeiros 3-4 caracteres já bastam.
Rodando Seu Primeiro Container Útil
Vamos além do hello-world. Aqui está como subir um servidor Nginx real e acessá-lo no browser em menos de 1 minuto.
docker run -d -p 8080:80 --name meu-nginx nginx
Quebrando o comando:
| Flag | Significado |
|---|---|
-d | Rodar em background |
-p 8080:80 | Mapear porta 8080 do host para porta 80 do container |
--name meu-nginx | Dar um nome ao container |
nginx | Nome da imagem a usar |
Abra o browser em http://localhost:8080. Você verá a página padrão do Nginx rodando dentro de um container Docker.
Acessar o terminal de um container
docker exec -it meu-nginx bash
A flag -it combina -i (interactive) com -t (TTY), criando uma sessão de terminal interativa dentro do container.
Criando Seu Próprio Dockerfile
Até aqui usamos imagens prontas do Docker Hub. Agora vamos criar uma imagem customizada. Crie um arquivo chamado Dockerfile (sem extensão) na raiz do seu projeto Node.js:
# Usar a imagem oficial do Node.js como base
FROM node:20-alpine
# Definir o diretório de trabalho dentro do container
WORKDIR /app
# Copiar os arquivos de dependências primeiro
COPY package*.json ./
# Instalar dependências
RUN npm install
# Copiar o restante do código
COPY . .
# Expor a porta que a aplicação usa
EXPOSE 3000
# Comando para iniciar a aplicação
CMD ["node", "index.js"]
Cada instrução tem uma função específica:
FROM: define a imagem base.node:20-alpineusa Node.js 20 em Alpine Linux, muito mais leve que a versão padrão.WORKDIR: define o diretório de trabalho dentro do container.COPY: copia arquivos do seu sistema para dentro da imagem.RUN: executa comandos durante o build da imagem.EXPOSE: documenta a porta que a aplicação usa.CMD: define o comando padrão ao iniciar o container.
Para construir e rodar:
# Construir a imagem
docker build -t minha-app:v1 .
# Rodar o container
docker run -d -p 3000:3000 minha-app:v1
Próximos Passos
Você saiu do zero e agora sabe o que é Docker, os conceitos fundamentais, como instalar, os comandos essenciais, e como criar sua própria imagem com um Dockerfile.
O próximo passo natural é aprender Docker Compose, que permite definir ambientes com múltiplos containers (sua app + banco de dados + Redis) em um único arquivo docker-compose.yml. É o que a maioria dos times usa no dia a dia.
Tem alguma dúvida sobre os comandos ou o Dockerfile? Deixa nos comentários abaixo que respondemos.