Ambiente de Desenvolvimento com Docker

Manter um ambiente de desenvolvimento local consistente pode ser um desafio. Com o Docker, você sobe bancos de dados, message brokers e caches em segundos, sem instalar nada diretamente na sua máquina. Neste post, reúno os comandos que uso no dia a dia para subir os principais serviços.

💡 Ferramentas GUI recomendadas:

  • 🐘 DBeaver — conector universal para PostgreSQL, MySQL, SQL Server e outros bancos relacionais
  • 🍃 MongoDB Compass — interface gráfica oficial para MongoDB
  • 🔴 RedisInsight — ferramenta visual oficial para Redis

Atenção ao Mapeamento de Portas

Ao usar a flag -p no docker run, você está mapeando a porta da sua máquina local para a porta dentro do container. O formato é sempre:

-p [PORTA_DA_SUA_MÁQUINA]:[PORTA_DO_CONTAINER]

A porta do container é fixa — ela é definida pelo serviço que roda dentro dele e não deve ser alterada. Já a porta da sua máquina é livre — você escolhe qual porta local vai receber o tráfego.

Exemplo com PostgreSQL:

-p 5432:5432
 ↑      ↑
 |      └── Porta do container (obrigatória, definida pelo Postgres)
 └───────── Porta da sua máquina local (você escolhe)

Se você já tiver o PostgreSQL instalado localmente e a porta 5432 ocupada, basta trocar a porta da máquina:

# Acessa via localhost:5433, mas o container continua usando 5432 internamente
-p 5433:5432

🔑 Regra de ouro: o lado esquerdo é a sua máquina, o lado direito é o container. Nunca altere o lado direito — altere apenas o esquerdo se precisar evitar conflito de portas.

PostgreSQL

Documentação da imagem: Docker Hub Postgres

docker run --name study-postgres \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=root \
  -p 5432:5432 \
  -d postgres
Parâmetro Valor
Host localhost
Porta 5432
Usuário postgres
Senha root

MySQL

Documentação da imagem: Docker Hub MySQL

docker run --name study-mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -d mysql:8.0.36

Após o container subir, conecte-se e crie um usuário e banco de dados de teste:

mysql -u root -p

CREATE USER 'myuser'@'localhost' IDENTIFIED BY '123456789';
CREATE DATABASE my_test_db;
GRANT ALL PRIVILEGES ON my_test_db.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
Parâmetro Valor
Host localhost
Porta 3306
Usuário root root
Senha root root

SQL Server

Documentação da imagem: Docker Hub MSSQL

docker run --name study-mssql2022 \
  -e ACCEPT_EULA=Y \
  -e MSSQL_SA_PASSWORD=SecureSqlRootPass2022! \
  -e MSSQL_PID=Developer \
  -p 1433:1433 \
  -d mcr.microsoft.com/mssql/server:2022-latest

⚠️ A senha do SA precisa atender aos requisitos de complexidade do SQL Server (mínimo 8 caracteres, letras maiúsculas, minúsculas, números e símbolos).

Parâmetro Valor
Host localhost
Porta 1433
Usuário sa
Senha SecureSqlRootPass2022!
Edição Developer (gratuita)

MongoDB

Documentação da imagem: Docker Hub Mongo

docker run --name study-mongo \
  -e MONGO_INITDB_ROOT_USERNAME=root \
  -e MONGO_INITDB_ROOT_PASSWORD=root \
  -p 27017:27017 \
  -d mongo
Parâmetro Valor
Host localhost
Porta 27017
Usuário root
Senha root
Connection String mongodb://root:root@localhost:27017

Redis

Documentação da imagem: Docker Hub Redis

docker run --name study-redis \
  -p 6379:6379 \
  -d redis:latest

Para subir com senha (recomendado mesmo em dev):

docker run --name study-redis \
  -p 6379:6379 \
  -d redis:latest \
  redis-server --requirepass root

Testando a conexão via CLI:

docker exec -it study-redis redis-cli -a root ping
# Resposta esperada: PONG
Parâmetro Valor
Host localhost
Porta 6379
Senha root (se configurada)
Connection String redis://:root@localhost:6379

RabbitMQ

Documentação da imagem: Docker Hub RabbitMQ

docker run -d --name study-rabbit \
  -e RABBITMQ_DEFAULT_USER=root \
  -e RABBITMQ_DEFAULT_PASS=root \
  -p 5672:5672 \
  -p 15672:15672 \
  rabbitmq:3-management

Após subir, acesse o painel de administração em: http://localhost:15672

Parâmetro Valor
Host localhost
Porta AMQP 5672
Porta Admin 15672
Usuário root
Senha root

Comandos Úteis

Verificar containers em execução:

docker ps

Parar um container:

docker stop study-postgres

Iniciar um container já criado:

docker start study-postgres

Remover um container:

docker rm study-postgres

Resumo das Portas

Serviço Porta da Máquina Porta do Container
PostgreSQL 5432 (alterável) 5432 (fixa)
MySQL 3306 (alterável) 3306 (fixa)
SQL Server 1433 (alterável) 1433 (fixa)
MongoDB 27017 (alterável) 27017 (fixa)
Redis 6379 (alterável) 6379 (fixa)
RabbitMQ (AMQP) 5672 (alterável) 5672 (fixa)
RabbitMQ (Admin) 15672 (alterável) 15672 (fixa)

Com esses containers, você tem um ambiente completo para desenvolver e testar aplicações que dependem de diferentes tecnologias de persistência e mensageria. Cada serviço roda de forma isolada e pode ser iniciado ou parado conforme a necessidade.

Se quiser evoluir a configuração, o próximo passo é usar um arquivo docker-compose.yml para orquestrar todos os serviços de uma vez só. 🚀