IHS Strategic
Tüm Blog Yazıları
HowTo18 Eylül 2026•4 dk okuma

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

Modern web uygulamalarını Docker ve container mimarisi kullanarak güvenli, ölçeklenebilir ve kesintisiz şekilde production ortamına dağıtma (deployment) adımlarını, en güncel trendleri ve kurumsal dijital strateji yaklaşımlarını bu rehberde keşfedin.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Yazılım geliştirme ve dağıtım süreçleri son yıllarda köklü bir değişimden geçti. Geleneksel sunucu kurulumları ve "benim bilgisayarımda çalışıyordu" krizleri, yerini standartlaştırılmış, hafif ve izole çalışma ortamları sunan konteyner teknolojilerine bıraktı. Günümüzde kurumsal bir dijital strateji inşa ederken operasyonel çeviklik (agility), güvenilirlik ve hızlı pazara çıkış süresi (time-to-market) en kritik hedefler arasında yer alır. Bu hedeflere ulaşmanın merkezinde ise Docker ve container mimarisi bulunur.

Bu kapsamlı rehber, modern web uygulamalarınızı Docker ile paketleyip sıfırdan production (canlı) ortamına başarıyla dağıtmanız için gereken tüm adımları, optimizasyon yöntemlerini ve güncel sektör trendler ışığında en iyi pratikleri sunmaktadır.

Container Mimarisi Nedir ve Neden Dijital Stratejinizin Merkezinde Olmalı?

Container (konteyner) mimarisi; bir uygulamanın kaynak kodunu, bağımlılıklarını, çalışma zamanı kütüphanelerini ve ortam değişkenlerini tek bir paket haline getirerek işletim sistemi düzeyinde sanallaştırma sağlayan bir yaklaşımdır. Sanal makinelerin (VM) aksine bağımsız bir işletim sistemi çekirdeği taşımayan container'lar, ana makinenin çekirdeğini paylaşır. Bu durum, saniyeler içinde ayağa kalkma, düşük kaynak tüketimi ve yüksek taşınabilirlik sağlar.

Stratejik Avantaj: Container mimarisi, şirketlerin bulut sağlayıcılarına (AWS, Google Cloud, Azure) olan bağımlılığını (vendor lock-in) azaltır ve hibrit ya da multi-cloud altyapılarını destekleyerek esnek bir dijital strateji yürütülmesini mümkün kılar.

Modern Deployment Trendleri ve DevOps Ekosistemi

Web dağıtım süreçlerindeki yeni trendler, konteynerleştirme süreçlerinin otomasyonla entegre edilmesini zorunlu kılmaktadır. Öne çıkan başlıca trendler şunlardır:

  • CI/CD Entegrasyonu: Kod commit edildiği anda Docker imajının otomatik test edilip derlenmesi ve registry'e gönderilmesi.
  • Multi-Stage Builds: Derleme ve çalışma aşamalarını ayırarak imaj boyutlarını megabayt seviyelerine indirme ve saldırı yüzeyini daraltma.
  • GitOps ve Bildirimsel (Declarative) Altyapı: Tüm dağıtım konfigürasyonlarının Git deposunda tutulması ve altyapı durumunun otomatik senkronize edilmesi.
  • Zero-Downtime Deployment: Blue-Green ve Canary dağıtım modelleri ile kullanıcılar kesinti hissetmeden yeni sürümlere geçiş yapılması.

Adım Adım Web Uygulaması Dağıtımı (Deployment) Rehberi

Aşağıdaki adımları takip ederek Node.js, Python, Go, PHP veya Java tabanlı modern bir web uygulamasını Dockerize edip canlı ortama taşıyabilirsiniz.

Adım 1: Multi-Stage Dockerfile ile İmaj Optimizasyonu

Production seviyesinde bir dağıtım için ilk adım, uygulamanın yalnızca gerekli bağımlılıkları içeren küçük ve güvenli bir imajını üretmektir. Multi-stage build tekniği bu noktada endüstri standardıdır.

# Aşama 1: Derleme (Build Stage)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Aşama 2: Üretim Çalışma Zamanı (Production Stage)
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
# Güvenlik için root olmayan kullanıcıya geçiş
USER node
COPY --chown=node:node package*.json ./
RUN npm ci --only=production
COPY --from=builder --chown=node:node /app/dist ./dist

EXPOSE 3000
CMD ["node", "dist/main.js"]

Adım 2: .dockerignore Dosyasının Yapılandırılması

İmajın gereksiz yere büyümesini engellemek ve hassas dosyaların sızmasını önlemek adına proje kök dizininde bir .dockerignore dosyası oluşturulmalıdır:

  • node_modules / venv / vendor
  • .git ve .github dizinleri
  • .env ve yerel kimlik bilgileri içeren dosyalar
  • Derleme çıktıları, log kayıtları ve test raporları

Adım 3: Docker Compose ile Çok Katmanlı Servisleri Tanımlama

Bir web uygulaması nadiren tek başına çalışır; genellikle bir veritabanı (PostgreSQL, MySQL), önbellek (Redis) ve ters tersine vekil sunucu (Nginx/Traefik) ile birlikte çalışır. docker-compose.prod.yml dosyası ile bu yapıyı kolayca koordine edebilirsiniz:

version: '3.8'

services:
  web_app:
    image: registry.example.com/myapp:v1.2.0
    restart: always
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/appdb
      - REDIS_HOST=cache
    networks:
      - app_network
    depends_on:
      - db
      - cache

  cache:
    image: redis:7-alpine
    restart: always
    networks:
      - app_network

  db:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data
    networks:
      - app_network

volumes:
  db_data:

networks:
  app_network:
    driver: bridge

Adım 4: İmajın Bir Container Registry'e Yüklenmesi

Oluşturulan imajı production sunucusuna ulaştırmak için Docker Hub, AWS ECR, GitHub Packages veya GitLab Registry gibi güvenli bir havuz kullanılır:

  1. Giriş Yapın: docker login registry.example.com
  2. İmajı Etiketleyin: docker tag myapp:latest registry.example.com/myapp:v1.2.0
  3. İmajı Gönderin: docker push registry.example.com/myapp:v1.2.0

Adım 5: Canlı Sunucuda Dağıtım ve Nginx Ters Vekil (Reverse Proxy) ile SSL Yapılandırması

Production sunucusunda container'ların doğrudan 80 veya 443 portunu dış dünyaya açması yerine, önlerine Nginx veya Traefik gibi bir reverse proxy yerleştirilerek SSL sertifikaları (Let's Encrypt), yük dengeleme (load balancing) ve HTTP başlık güvenlikleri yönetilmelidir.

# Sunucuda son sürümü çekme ve ayağa kaldırma
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d --remove-orphans

Production Ortamı İçin En İyi Pratikler ve Güvenlik Tavsiyeleri

Konteynerleştirilmiş uygulamalarınızın kesintisiz ve güvenli çalışması için aşağıdaki standartları uygulayın:

  • Root Yetkilerini Sınırlandırın: Container içinde uygulamayı asla root kullanıcısı olarak çalıştırmayın.
  • Kaynak Sınırları Belirleyin: Bellek sızıntılarının (memory leak) ana sunucuyu çökertmemesi için Compose dosyasında CPU ve RAM limitleri (mem_limit, cpus) tanımlayın.
  • Healthcheck Ekleyin: Uygulamanın sadece çalışıp çalışmadığını değil, istekleri yanıtlayıp yanıtlamadığını doğrulayan HEALTHCHECK direktiflerini kullanın.
  • Log Yönetimi Yapılandırın: Container loglarının sunucu diskini doldurmaması için json-file log sürücüsüne max-size ve max-file sınırları getirin.

Sonuç: Container Mimarisi ile Geleceğe Hazır Altyapılar

Docker ve container mimarisi, yalnızca teknik bir dağıtım aracı değil; yazılım geliştirme döngüsünü hızlandıran, operasyonel riskleri minimize eden ve kurumsal dayanıklılığı artıran stratejik bir yatırımdır. Bu rehber içindeki adımları üretim süreçlerinize entegre ederek, değişen teknoloji trendler karşısında çevik kalabilir ve şirketinizin uzun vadeli dijital strateji hedeflerini sağlam temeller üzerine oturtabilirsiniz.