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ó. 🚀