Infraestrutura Docker - Módulo 2
A containerização é uma tecnologia essencial para o desenvolvimento moderno de software, permitindo criar ambientes isolados, consistentes e facilmente replicáveis. Este documento apresenta a implementação completa da infraestrutura Docker para o projeto District ZER0, incluindo a configuração de serviços, automação com Makefile e scripts auxiliares.
🐳 Arquivos de Infraestrutura
docker-compose.yml - Orquestração de Serviços
Arquivo principal de configuração que define e coordena os serviços necessários para o funcionamento do sistema.
Serviços Implementados
MySQL Database
mysql:
image: mysql:8.0
container_name: district_zero_mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: district_zero
MYSQL_USER: district_zero_user
MYSQL_PASSWORD: district_zero_pass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./Dev:/docker-entrypoint-initdb.d
Características: - Versão estável: MySQL 8.0 LTS - Inicialização automática: Scripts SQL executados na primeira inicialização - Persistência: Volume nomeado para dados duráveis - Configurações personalizadas: Variáveis de ambiente específicas do projeto
Adminer - Interface Web
adminer:
image: adminer:latest
container_name: district_zero_adminer
ports:
- "8080:8080"
depends_on:
- mysql
Funcionalidades: - Interface visual: Gerenciamento de banco via navegador - Dependência: Aguarda MySQL estar disponível - Acesso simplificado: http://localhost:8080
Configurações Avançadas
Volumes
Networks
Makefile - Automação de Comandos
Sistema de automação que simplifica operações complexas em comandos simples e memorizáveis.
Comandos Principais
Setup de Ambiente
setup:
@echo "🔍 Verificando dependências..."
@command -v docker >/dev/null 2>&1 || (echo "❌ Docker não encontrado" && exit 1)
@command -v docker-compose >/dev/null 2>&1 || (echo "❌ Docker Compose não encontrado" && exit 1)
@echo "✅ Dependências OK"
Gestão de Serviços
start:
@echo "🚀 Iniciando serviços..."
docker-compose up -d
@echo "⏳ Aguardando inicialização do MySQL..."
@sleep 30
@echo "✅ Serviços iniciados"
stop:
@echo "🛑 Parando serviços..."
docker-compose down
@echo "✅ Serviços parados"
restart:
@echo "🔄 Reiniciando serviços..."
$(MAKE) stop
$(MAKE) start
Testes e Validação
test:
@echo "🧪 Executando queries de teste..."
docker exec -i district_zero_mysql mysql -u district_zero_user -p district_zero_pass district_zero < Dev/DQL_mysql.sql
@echo "✅ Testes executados"
health:
@echo "🏥 Verificando saúde dos serviços..."
@./scripts/health-check.sh
Backup e Restore
backup:
@echo "💾 Criando backup..."
docker exec district_zero_mysql mysqldump -u district_zero_user -p district_zero_pass district_zero > district_zero_$(shell date +%Y%m%d_%H%M%S).sql
@echo "✅ Backup criado"
restore:
@echo "🔄 Restaurando backup..."
docker exec -i district_zero_mysql mysql -u district_zero_user -p district_zero_pass district_zero < $(BACKUP_FILE)
@echo "✅ Backup restaurado"
.env.example - Configuração de Ambiente
Template de configuração que permite personalização sem modificar arquivos principais.
# Configurações do MySQL
MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=district_zero
MYSQL_USER=district_zero_user
MYSQL_PASSWORD=district_zero_pass
MYSQL_PORT=3306
# Configurações do Adminer
ADMINER_PORT=8080
# Configurações de Desenvolvimento
COMPOSE_PROJECT_NAME=district_zero
Vantagens: - Flexibilidade: Personalização sem modificar arquivos versionados - Segurança: Senhas personalizadas - Portabilidade: Configurações específicas por ambiente
🔧 Scripts Auxiliares
scripts/health-check.sh - Verificação de Saúde
Script automatizado para verificar o status dos serviços.
#!/bin/bash
echo "🔍 Verificando status dos containers..."
docker-compose ps
echo "🔍 Testando conexão com MySQL..."
docker exec district_zero_mysql mysql -u district_zero_user -p district_zero_pass -e "SELECT 'MySQL OK' as status;"
echo "🔍 Verificando Adminer..."
curl -f http://localhost:8080 > /dev/null 2>&1 && echo "✅ Adminer OK" || echo "❌ Adminer indisponível"
echo "🔍 Verificando estrutura do banco..."
docker exec district_zero_mysql mysql -u district_zero_user -p district_zero_pass district_zero -e "SHOW TABLES;"
Funcionalidades: - Status de containers: Verificação de estado - Conectividade: Teste de conexão com banco - Integridade: Validação de estrutura
🌐 Arquitetura de Rede
Comunicação entre Serviços
graph TB
A[Host Machine] --> B[Docker Network]
B --> C[MySQL Container :3306]
B --> D[Adminer Container :8080]
C --> E[Volume: mysql_data]
C --> F[Init Scripts: /Dev]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e8f5e8
style D fill:#fff3e0
style E fill:#fce4ec
style F fill:#f1f8e9
Mapeamento de Portas
- MySQL: Host:3306 → Container:3306
- Adminer: Host:8080 → Container:8080
Volumes e Persistência
- mysql_data: Dados do banco persistem entre restarts
- Init scripts: Arquivos SQL montados para inicialização
🔄 Fluxo de Inicialização
Sequência de Startup
- Docker Compose: Inicia orquestração
- MySQL Container: Criação e configuração
- Init Scripts: Execução automática dos SQLs
- Adminer Container: Interface web disponível
- Health Check: Validação de serviços
Scripts de Inicialização
Os arquivos na pasta Dev/
são executados automaticamente na primeira inicialização do MySQL:
- 00_init.sql: Configurações iniciais
- DDL_mysql.sql: Estrutura das tabelas
- DML_mysql.sql: Dados iniciais
📊 Monitoramento e Logs
Comandos de Diagnóstico
logs:
@echo "📋 Exibindo logs dos serviços..."
docker-compose logs -f
logs-mysql:
@echo "📋 Logs do MySQL..."
docker logs district_zero_mysql -f
logs-adminer:
@echo "📋 Logs do Adminer..."
docker logs district_zero_adminer -f
Métricas de Sistema
stats:
@echo "📊 Estatísticas dos containers..."
docker stats district_zero_mysql district_zero_adminer
🛠️ Comandos de Desenvolvimento
Acesso Direto ao Banco
connect-db:
@echo "🔌 Conectando ao MySQL..."
docker exec -it district_zero_mysql mysql -u district_zero_user -p district_zero_pass district_zero
mysql-cli:
@echo "🔌 Conectando como root..."
docker exec -it district_zero_mysql mysql -u root -p
Limpeza de Ambiente
clean:
@echo "🧹 Limpando ambiente..."
@echo "⚠️ ATENÇÃO: Isso apagará todos os dados!"
@read -p "Confirma? (y/N): " confirm && [ "$$confirm" = "y" ]
docker-compose down -v
docker system prune -f
@echo "✅ Ambiente limpo"
🎯 Demonstração Automatizada
Comando de Entrega
entrega: setup start test health
@echo "🎉 Ambiente pronto para demonstração!"
@echo ""
@echo "📋 Acesse:"
@echo " 🌐 Adminer: http://localhost:8080"
@echo " 🔑 Usuário: district_zero_user"
@echo " 🗝️ Senha: district_zero_pass"
@echo " 🗄️ Database: district_zero"
@echo ""
@echo "🧪 Execute 'make test' para ver queries de exemplo"
🔒 Configurações de Segurança
Isolamento de Rede
- Containers em rede isolada
- Portas expostas apenas conforme necessário
- Comunicação interna segura
Gerenciamento de Credenciais
- Senhas através de variáveis de ambiente
- Arquivo
.env
não versionado - Template
.env.example
para referência
Volumes Seguros
- Dados persistentes em volumes nomeados
- Separação entre dados e código
- Backup facilitado
📈 Vantagens da Implementação
Para Desenvolvimento
- Ambiente consistente: Mesma configuração em qualquer máquina
- Setup rápido: Um comando inicia todo o ambiente
- Isolamento: Não interfere com outras instalações
Para Demonstração
- Facilidade: Professor pode executar facilmente
- Confiabilidade: Ambiente controlado e testado
- Documentação: Comandos claros e bem documentados
Para Manutenção
- Logs centralizados: Facilita debugging
- Backup automatizado: Proteção de dados
- Monitoramento: Visibilidade do sistema
Histórico de Versão
Versão | Data | Descrição | Autor(es) |
---|---|---|---|
1.0 |
12/06/2025 | Criação da documentação de infraestrutura Docker | Vinicius Vieira |