Docker para Iniciantes: Seu Primeiro Container em 10 Minutos

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:

FlagSignificado
-dRodar em background
-p 8080:80Mapear porta 8080 do host para porta 80 do container
--name meu-nginxDar um nome ao container
nginxNome 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-alpine usa 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.