Blog'a Dön
DevOps
20 Aralık 2024

Docker ile Full-Stack Development Workflow

Docker container teknolojisi ile full-stack projelerinizi nasıl daha verimli geliştirebileceğinizi öğrenin.

Erencan Acıoğlu
Full Stack Developer
14 min
1,100
15
#Docker#DevOps#Full-Stack#Containers#Development
0% okundu
# 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.

Bu yazıyı beğendiniz mi?

Daha fazla teknoloji ve geliştirme yazısı için blog'umu takip edin.