Tecnologia
Docker e Docker Compose: entenda como funcionam e aprenda a subir seus primeiros containers
Docker permite empacotar aplicações com tudo o que elas precisam para funcionar. Com Docker Compose, vários serviços podem ser executados juntos usando apenas alguns comandos.

Quem trabalha com desenvolvimento provavelmente já encontrou frases como:
docker build
docker run
docker compose up
Para quem está começando, esses comandos podem parecer apenas mais uma camada de complexidade.
Na prática, Docker resolve um dos problemas mais antigos do desenvolvimento de software: garantir que uma aplicação funcione de maneira semelhante em diferentes ambientes.
O que é Docker?
Docker é uma plataforma utilizada para executar aplicações dentro de containers.
Um container reúne a aplicação e suas dependências em um ambiente isolado.
Isso permite que o desenvolvedor defina exatamente quais versões de bibliotecas, linguagens e ferramentas serão utilizadas.
Imagine uma aplicação Django que precisa de:
Python 3.12
Django
PostgreSQL
Redis
Em vez de configurar tudo manualmente em cada servidor, o projeto pode definir essas dependências dentro da estrutura Docker.
O mesmo ambiente pode então ser executado no computador do desenvolvedor, em um servidor ou em uma infraestrutura de nuvem.
O que é uma imagem Docker?
Antes de criar um container, normalmente criamos uma imagem.
A imagem funciona como uma espécie de modelo da aplicação.
Ela contém instruções sobre como aquele ambiente deve ser construído.
Essas instruções ficam geralmente em um arquivo chamado:
Dockerfile
Um Dockerfile simples para uma aplicação Python poderia ser:
FROM python:3.12
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Cada linha descreve uma etapa necessária para preparar o ambiente.
Como criar uma imagem Docker?
Dentro da pasta onde está o Dockerfile, execute:
docker build -t minha-aplicacao .
O parâmetro:
-t minha-aplicacao
define o nome da imagem.
O ponto no final:
.
indica que o Docker deve utilizar o diretório atual como contexto para a construção.
Depois disso, você pode verificar as imagens disponíveis:
docker images
Como subir um container?
Com a imagem criada, execute:
docker run minha-aplicacao
Esse comando cria e inicia um container utilizando aquela imagem.
Para executar em segundo plano:
docker run -d minha-aplicacao
O -d significa detached mode.
Como liberar uma porta?
Imagine que sua aplicação funciona na porta 8000 dentro do container.
Você pode expor essa porta para o computador utilizando:
docker run -d -p 8000:8000 minha-aplicacao
A estrutura é:
porta_do_computador:porta_do_container
Nesse caso:
8000:8000
significa que acessar:
localhost:8000
direcionará a requisição para a porta 8000 do container.
Como ver os containers em execução?
Use:
docker ps
Para visualizar também containers que já foram encerrados:
docker ps -a
Como parar um container?
Primeiro encontre o ID ou nome:
docker ps
Depois execute:
docker stop nome-do-container
Também é possível utilizar o ID:
docker stop 7fd41abc1234
E onde entra o Docker Compose?
Projetos reais raramente possuem apenas um serviço.
Uma aplicação web pode precisar de:
Backend
Banco de dados
Redis
Nginx
Worker
Executar cada container manualmente seria trabalhoso.
Docker Compose permite definir todos esses serviços em um único arquivo:
docker-compose.yml
ou, em projetos mais recentes:
compose.yaml
Um exemplo simples:
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_DB: app
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
Aqui temos dois containers.
O serviço web executa a aplicação.
O serviço db executa PostgreSQL.
O Compose cuida da criação e comunicação entre os serviços.
Como subir tudo com Docker Compose?
Na pasta onde está o arquivo Compose, execute:
docker compose up
Para executar em segundo plano:
docker compose up -d
Esse é provavelmente um dos comandos mais utilizados no dia a dia com Docker.
Como reconstruir a aplicação?
Se houve alteração no Dockerfile ou nas dependências, pode ser necessário reconstruir a imagem.
Use:
docker compose up -d --build
O Docker recria as imagens necessárias e inicia novamente os serviços.
Como visualizar os containers do Compose?
Execute:
docker compose ps
Você verá os serviços definidos no projeto e o estado atual de cada container.
Como acompanhar os logs?
Para visualizar logs de todos os serviços:
docker compose logs
Para acompanhar em tempo real:
docker compose logs -f
Também é possível visualizar apenas um serviço:
docker compose logs -f web
Esse comando costuma ser essencial para encontrar erros durante deploys e desenvolvimento.
Como entrar dentro de um container?
Imagine que você precisa executar um comando diretamente no container da aplicação.
Use:
docker compose exec web bash
Se a imagem não possuir Bash:
docker compose exec web sh
Em uma aplicação Django, também poderíamos executar:
docker compose exec web python manage.py migrate
Ou:
docker compose exec web python manage.py createsuperuser
Como parar os serviços?
Para encerrar os containers:
docker compose down
Isso remove os containers criados pelo Compose, mas normalmente preserva imagens e volumes.
Se quiser apenas parar:
docker compose stop
E iniciar novamente:
docker compose start
Os comandos essenciais
Para começar, estes são os comandos que você provavelmente mais utilizará:
docker build -t minha-aplicacao .
docker images
docker ps
docker ps -a
docker run -d -p 8000:8000 minha-aplicacao
docker stop nome-do-container
docker compose up -d
docker compose up -d --build
docker compose ps
docker compose logs -f
docker compose exec web bash
docker compose down
Com esses comandos já é possível construir imagens, subir containers, acompanhar aplicações e gerenciar boa parte de um ambiente Docker básico.
Por que Docker se tornou tão comum?
Containers ajudam a padronizar ambientes de desenvolvimento e produção.
Uma equipe pode definir a infraestrutura necessária dentro do próprio projeto e compartilhar essa configuração entre desenvolvedores.
Também facilita deploys em serviços de nuvem, servidores Linux e plataformas de containers.
Para projetos que possuem backend, banco de dados, cache e outros serviços, Docker Compose torna essa estrutura ainda mais simples de reproduzir.
Com poucos comandos, uma infraestrutura inteira pode ser iniciada.
E esse é um dos principais motivos pelos quais Docker se tornou uma ferramenta tão presente no desenvolvimento moderno.
