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 uygulamalarını Docker ile dağıtma adımları. Dijital ajans iş akışları, trendler, multi-stage build ve docker-compose yapılandırması.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Container Mimarisi ve Modern Web Trendleri

Eski yöntem: sunucuya doğrudan kod atma. Sorun: ortam farkı, sürüm çakışması. Modern web standardı: container mimarisi. Kod, kütüphane, runtime tek paket. Dijital ajans ekipleri için fayda: yerelde çalışan kod sunucuda da çalışır. Deployment süresi düşer, izolasyon artar.

Adım 1: Minimal Dockerfile Hazırlama

Amaç: küçük imaj boyutu, hızlı derleme. Multi-stage build kullan. Gereksiz bağımlılıkları üretim imajına alma.

# 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
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
İpucu: USER node ile root yetkisini bırak. Güvenlik açığı riskini azalt.

Adım 2: .dockerignore Dosyası Ekleme

Gereksiz dosyalar imaja girmemeli. İmaj boyutu şişer, build uzar. Kök dizine .dockerignore aç:

  • node_modules
  • .git
  • .env
  • dist
  • npm-debug.log

Adım 3: Docker Compose ile Servisleri Tanımlama

Web servisi ve ters vekil sunucu (Reverse Proxy) tek dosyada topla. docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    restart: always
    environment:
      - PORT=3000
    networks:
      - app-network

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

networks:
  app-network:
    driver: bridge

Adım 4: Sunucuda Dağıtım (Deployment)

Üretim sunucusunda çalıştırma sırası:

  1. Kodu sunucuya çek: git pull origin main
  2. İmajı inşa et ve arka planda başlat: docker compose up -d --build
  3. Log kontrolü yap: docker compose logs -f web
  4. Kullanılmayan eski imajları temizle: docker image prune -f

Optimizasyon ve Hata Önleme İpuçları

  • Layer Caching: package.json dosyasını kaynak koddan önce kopyala. Bağımlılık değişmediyse cache kullanılır, build saniyeler sürer.
  • Restart Policy: Çöken konteyner için restart: always veya unless-stopped tanımla.
  • Statik Dosyalar: Node.js yerine Nginx üzerinden sun. CPU yükü düşer.