Docker para Iniciantes: Tutorial Prático (Instalação + Primeiro Container) | Deltaops

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. Neste guia, portanto, você vai aprender o que é Docker, como instalar em qualquer sistema operacional e como 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 outras palavras, ele permite empacotar uma aplicação com tudo que ela precisa. 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 principal diferença em relação a uma máquina virtual (VM) é que a VM emula um sistema operacional inteiro, enquanto um container compartilha o kernel do host. Por isso, containers são muito mais leves e inicializam em segundos.

Por que isso importa na prática:

  • Seu código roda da mesma forma no notebook, no staging e em produção. Além disso, configurar o ambiente de um novo desenvolvedor leva minutos, não horas.
  • 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. Além disso, pipelines de CI/CD, Kubernetes e serviços como AWS ECS e EKS são todos construídos sobre esse conceito. Ou seja, aprender Docker é o primeiro passo para trabalhar com infraestrutura moderna.

Os 4 Conceitos Fundamentais do Docker

Antes de instalar qualquer coisa, vale entender quatro termos que vão aparecer o tempo todo. Em seguida, cada um deles ficará claro na prática.

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, é necessário adicionar seu usuário ao grupo docker. Dessa forma, você 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. A seguir, estão os mais importantes, organizados por função.

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. Caso prefira rodar em background (detached mode), basta usar 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. Vale lembrar que você não precisa digitar o ID completo — os primeiros 3-4 caracteres já bastam.


Rodando Seu Primeiro Container Útil

Agora que você conhece os comandos básicos, vamos além do hello-world. A seguir, veja 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 apenas imagens prontas do Docker Hub. Agora, porém, vamos criar uma imagem customizada para sua própria aplicação. Para isso, crie um arquivo chamado Dockerfile 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ê já domina os fundamentos. Por isso, o próximo passo natural é aprender Docker Compose, que permite definir ambientes com múltiplos containers — sua app, banco de dados e Redis, por exemplo — em um único arquivo docker-compose.yml. É o que a maioria dos times usa no dia a dia de desenvolvimento.

Agora que você criou seu primeiro Dockerfile, o próximo passo é escrever um bem otimizado. Para isso, confira nosso post com as principais boas práticas para criação de Dockerfiles.

Se você quiser ir além dos containers, vale conhecer o Kubernetes — a plataforma que orquestra múltiplos containers em produção. Confira nosso guia: Kubernetes: Criando seu cluster localmente com Kind

📚 Referências e links úteis:

❓ Dúvidas?

Tem alguma dúvida sobre os comandos ou o Dockerfile? Deixa nos comentários abaixo que respondemos.

Escrito por 🖋️ Diogo Lima
Sócio Fundador da Empresa Deltaops