# Docker ile Full-Stack Development Workflow
Docker, modern development workflow'unda vazgeçilmez bir araç haline geldi. Bu yazıda, Docker ile full-stack projelerinizi nasıl daha verimli geliştirebileceğinizi öğreneceksiniz.
## Docker'ın Avantajları
### 1. Tutarlı Geliştirme Ortamı
- "Bende çalışıyor" problemini çözer
- Tüm geliştiriciler aynı ortamda çalışır
- Production ile development ortamı aynı
### 2. Hızlı Kurulum
- Yeni projeler dakikalar içinde hazır
- Bağımlılık yönetimi kolay
- Farklı versiyonlar arası geçiş
### 3. Ölçeklenebilirlik
- Mikroservis mimarisi
- Load balancing
- Auto-scaling
## Full-Stack Docker Setup
### 1. Docker Compose Yapılandırması
yaml
version: '3.8'
services:
# Frontend (React/Next.js)
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
ports:
- "3000:3000"
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- NODE_ENV=development
depends_on:
- backend
# Backend (Node.js/Express)
backend:
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- ./backend:/app
- /app/node_modules
environment:
- NODE_ENV=development
- DATABASE_URL=postgresql://user:password@db:5432/mydb
depends_on:
- db
# Database (PostgreSQL)
db:
image: postgres:15
ports:
- "5432:5432"
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
# Redis (Caching)
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
### 2. Frontend Dockerfile
dockerfile
# Frontend Dockerfile
FROM node:18-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy source code
COPY . .
# Expose port
EXPOSE 3000
# Start development server
CMD ["npm", "run", "dev"]
### 3. Backend Dockerfile
dockerfile
# Backend Dockerfile
FROM node:18-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci
# Copy source code
COPY . .
# Expose port
EXPOSE 5000
# Start development server
CMD ["npm", "run", "dev"]
## Gelişmiş Docker Teknikleri
### 1. Multi-Stage Builds
dockerfile
# Multi-stage build for production
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM node:18-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 5000
CMD ["npm", "start"]
### 2. Docker Networks
yaml
# Custom network configuration
networks:
app-network:
driver: bridge
services:
frontend:
networks:
- app-network
backend:
networks:
- app-network
db:
networks:
- app-network
### 3. Environment Variables
yaml
# Environment configuration
services:
backend:
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:password@db:5432/mydb
- REDIS_URL=redis://redis:6379
env_file:
- .env.production
## Development Workflow
### 1. Hot Reload Setup
yaml
# Development with hot reload
services:
frontend:
volumes:
- ./frontend:/app
- /app/node_modules
environment:
- CHOKIDAR_USEPOLLING=true
### 2. Database Migrations
bash
# Run migrations
docker-compose exec backend npm run migrate
# Seed database
docker-compose exec backend npm run seed
### 3. Testing
bash
# Run tests
docker-compose exec backend npm test
docker-compose exec frontend npm test
# Integration tests
docker-compose -f docker-compose.test.yml up --abort-on-container-exit
## Production Deployment
### 1. Production Docker Compose
yaml
version: '3.8'
services:
frontend:
build:
context: ./frontend
dockerfile: Dockerfile.prod
ports:
- "80:80"
environment:
- NODE_ENV=production
backend:
build:
context: ./backend
dockerfile: Dockerfile.prod
ports:
- "5000:5000"
environment:
- NODE_ENV=production
- DATABASE_URL=postgresql://user:password@db:5432/mydb
db:
image: postgres:15
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=mydb
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
postgres_data:
### 2. Docker Swarm
bash
# Initialize swarm
docker swarm init
# Deploy stack
docker stack deploy -c docker-compose.yml myapp
# Scale services
docker service scale myapp_backend=3
## Best Practices
### 1. Security
- Non-root user kullanın
- Secrets yönetimi
- Image scanning
- Network isolation
### 2. Performance
- Layer caching
- Multi-stage builds
- Resource limits
- Health checks
### 3. Monitoring
- Log aggregation
- Metrics collection
- Health monitoring
- Alerting
## Sonuç
Docker ile full-stack development workflow'u modern yazılım geliştirmenin vazgeçilmez parçası. Bu teknikleri kullanarak daha verimli, tutarlı ve ölçeklenebilir projeler geliştirebilirsiniz.