IHS Strategic
Tüm Blog Yazıları
HowTo09 Eylül 2026•2 dk okuma

Docker ve Container Mimarisi ile Web Uygulaması Dağıtımı Rehberi

Modern web projelerinde Docker container mimarisi ile güvenli, ölçeklenebilir ve hızlı deployment adımları içeren kapsamlı rehber.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Modern Web ve Container Standardı

Container mimarisi, kod ile altyapıyı birleştirir. "Benim makinemde çalışıyordu" sorununu çözer. Dijital ajans ekipleri için çoklu müşteri projelerinde ortam izolasyonu sağlar. Modern web trendleri, hafif container imajları ve otomatik deployment süreçleri üzerine kuruludur.

Gereksinimler

  • Linux/macOS terminal erişimi
  • Docker Engine ve Docker Compose v2+
  • Örnek web uygulaması (Node.js, Go veya Python)
  • Temel Git bilgisi

Adım 1: Multi-Stage Dockerfile Hazırlığı

Multi-stage build, imaj boyutunu küçültür ve derleme araçlarını nihai imajdan temizler.

# Build aşaması
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Üretim aşaması
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
USER node
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/main.js"]

Kritik kural: Root kullanıcısı çalıştırma. USER node ile yetkileri kısıtla.

Adım 2: .dockerignore Dosyası ile Gereksiz Dosyaları Eleme

Build bağlamını hafif tutmak için .dockerignore dosyası oluştur:

node_modules
.git
.env
dist
*.log

Adım 3: Docker Compose ile Prodüksiyon Mimarisi

Web servisi ve ters proxy (Nginx) tek konfigürasyonda tanımlanır.

version: '3.8'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    environment:
      - PORT=3000
    networks:
      - app-net

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/ssl/certs:ro
    depends_on:
      - web
    networks:
      - app-net

networks:
  app-net:
    driver: bridge

Adım 4: Nginx Reverse Proxy Konfigürasyonu

Gelen HTTP isteklerini Node.js servisine yönlendir:

events { worker_connections 1024; }
http {
  server {
    listen 80;
    server_name example.com;
    location / {
      proxy_pass http://web:3000;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}

Adım 5: Sunucu Üzerinde Dağıtım (Deployment)

  1. Sunucuya bağlan: ssh user@server_ip
  2. Projeyi klonla: git clone repo_url /opt/app
  3. Çevresel değişkenleri ayarla: .env dosyasını oluştur.
  4. Servisleri başlat: docker compose up -d --build
  5. Logları izle: docker compose logs -f

Dijital Ajans İş Akışları İçin Trendler ve İpuçları

Minimal imaj, az saldırı yüzeyi demektir. Alpine veya Distroless tabanlı imajlar tercih et.
  • Healthcheck: Docker Compose içine healthcheck bloğu ekle, çöken servisin otomatik yeniden başlatılmasını sağla.
  • Secrets Yönetimi: API anahtarlarını imaja gömme. Runtime sırasında env dosyası veya Docker Secrets ile ilet.
  • Log Rotasyonu: Disk dolmasını önlemek için json-file log sürücüsüne limit koy (max-size: 10m, max-file: 3).