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

A'dan Z'ye Docker ile Web Uygulaması Dağıtımı Rehberi: Container Mimarisi ve Modern DevOps Stratejileri

Modern yazılım dağıtım süreçlerinde Docker ve container mimarisini kullanarak web uygulamalarınızı sıfırdan canlıya nasıl alacağınızı adım adım keşfedin.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Modern Yazılım Dünyasında Container Mimarisi ve Önemi

Geleneksel sunucu mimarilerinde karşılaşılan 'benim makinemde çalışıyordu, sunucuda neden çalışmıyor?' problemi, modern yazılım geliştirme süreçlerinin en büyük darboğazlarından biriydi. Günümüzde güçlü bir dijital strateji oluşturan kurumlar, bu operasyonel riskleri en aza indirmek ve dağıtım hızını artırmak için container mimarilerini tercih etmektedir. Docker, uygulamanızı tüm bağımlılıkları, kütüphaneleri ve yapılandırma dosyalarıyla birlikte izole bir paket haline getirerek her ortamda tutarlı çalışmasını garanti altına alır.

Bu kapsamlı rehber, bir web uygulamasının Docker mimarisi kullanılarak sıfırdan production (canlı) ortamına nasıl taşınacağını adım adım ele almaktadır.

Temel Kavramlar: Docker Ekosistemini Anlamak

Dağıtım sürecine geçmeden önce Docker mimarisinin yapı taşlarını netleştirmek gerekir:

  • Docker Image (İmaj): Uygulamanızın çalışması için gereken kod, runtime, sistem araçları ve kütüphaneleri içeren salt okunur (read-only) şablondur.
  • Docker Container: İmajın çalışan, yaşayan ve izole edilmiş örneğidir.
  • Dockerfile: Bir Docker imajının nasıl oluşturulacağını adım adım belirten yapılandırma dosyasıdır.
  • Docker Compose: Birden fazla container'dan oluşan (örneğin Web + Veritabanı + Redis) çoklu servisleri tek bir yapılandırmayla yönetmeyi sağlayan araçtır.
  • Docker Volume: Container'lar geçici (ephemeral) olduğu için verilerin kalıcı hale getirilmesini sağlayan depolama katmanıdır.

Adım Adım Docker ile Web Uygulaması Dağıtımı

Adım 1: Uygulama Mimarisi ve Dockerfile Hazırlığı

İlk adımda, web uygulamanızın kök dizininde bir Dockerfile oluşturmanız gerekir. Kaynak tüketimini düşürmek ve güvenlik açıklarını azaltmak amacıyla hafif (lightweight) base imajlar (örneğin Alpine veya Slim sürümleri) tercih edilmelidir.

Aşağıda tipik bir Node.js web uygulaması için optimize edilmiş Dockerfile örneği yer almaktadır:

# 1. Aşama: Build Ortamı
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 2. Aşama: Production Ortamı
FROM node:18-alpine AS runner
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"]

Önemli İpucu: Multi-stage build yaklaşımı sayesinde, geliştirme ve derleme araçları üretim imajına dahil edilmez. Bu sayede imaj boyutu yüzlerce megabayttan onlarca megabayta düşer.

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

Docker build sürecini hızlandırmak ve imaj boyutunu şişirmemek için projenizin kök dizinine bir .dockerignore dosyası ekleyin. Bu dosya, .git, node_modules, loglar ve yerel ortam değişkenleri (.env) gibi dosyaların imaja kopyalanmasını engeller.

Adım 3: Docker Compose ile Çok Katmanlı Servisleri Yapılandırma

Gerçek dünya senaryolarında web uygulamaları genellikle bir veritabanı (PostgreSQL, MySQL) ve bir önbellek mekanizması (Redis) ile birlikte çalışır. Bu servisleri koordine etmek için docker-compose.yml dosyası kullanılır:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/appdb
    depends_on:
      - db
    restart: always

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: appdb
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: always

volumes:
  pgdata:

Adım 4: İmajı Derleme ve Yerel Testleri Gerçekleştirme

Yapılandırma tamamlandıktan sonra servislerinizi yerel ortamda test etmek için terminalde şu komutu çalıştırın:

docker-compose up --build -d

Bu komut servisleri arka planda (detached mode) başlatır. docker ps komutu ile container durumlarını, docker-compose logs -f komutu ile uygulama loglarını canlı olarak izleyebilirsiniz.

Adım 5: Canlı Sunucuya Dağıtım (Production Deployment)

Uygulamanızı canlı sunucuya taşırken modern CI/CD (GitHub Actions, GitLab CI) süreçleri devreye girer:

  1. Container Registry'e Gönderim: Derlenen Docker imajı Docker Hub, AWS ECR veya GitHub Container Registry (GHCR) üzerine docker push ile gönderilir.
  2. Sunucu Yapılandırması: Canlı sunucuda (VPS, Bulut VM) Nginx veya Traefik gibi bir ters tersine proxy (Reverse Proxy) kurularak SSL/TLS sertifikaları yönetilir.
  3. Canlıya Alma (Zero-Downtime Deployment): Yeni imaj sunucuya çekilir (docker pull) ve kesintisiz şekilde eski container'lar yenileriyle değiştirilir.

Üretim Ortamında Güvenlik ve Performans İpuçları

  • Root Yetkisini Sınırlandırın: Container içinde uygulamayı asla varsayılan root kullanıcısıyla çalıştırmayın; daima özel bir servis kullanıcısı (örneğin USER node) tanımlayın.
  • Kaynak Sınırlandırması (Resource Limits): Bellek sızıntılarına karşı container'lara CPU ve RAM sınırları (mem_limit, cpus) tanımlayın.
  • Healthcheck Mekanizmaları: Docker'ın çöken ya da yanıt vermeyen servisleri otomatik olarak yeniden başlatabilmesi için HEALTHCHECK direktiflerini aktif kullanın.
  • Secret Yönetimi: API anahtarları ve veritabanı şifreleri gibi hassas verileri asla Dockerfile içerisine sabit (hard-coded) olarak yazmayın. Docker Secrets veya ortam değişkenlerini kullanın.

Container Ekosisteminde Öne Çıkan Trendler

Yazılım dünyasında hızla evrilen trendler, mikroservis ve container mimarilerini standart bir gereklilik haline getirmiştir. Günümüzde öne çıkan bazı başlıklar şunlardır:

  • Kubernetes ve Orchestration: Yüzlerce container'ın yönetildiği büyük ölçekli sistemlerde Kubernetes ve k3s kullanımı endüstri standardı haline gelmiştir.
  • Serverless Containers: AWS Fargate, Google Cloud Run ve Azure Container Apps gibi sunucusuz mimariler, sunucu yönetimi ihtiyacını ortadan kaldırarak maliyet ve operasyon optimizasyonu sunmaktadır.
  • DevSecOps Entegrasyonu: Dağıtım boru hattına (pipeline) entegre edilen Trivy veya Snyk gibi araçlarla imaj güvenlik taramaları derleme aşamasında otomatikleştirilmektedir.

Sonuç

Docker ve container mimarisi, yalnızca bir sanallaştırma aracı değil; yazılım geliştirme döngüsünü hızlandıran, dağıtım risklerini ortadan kaldıran ve ekipler arası entegrasyonu güçlendiren kritik bir altyapı çözümüdür. Bu rehberdeki adımları ve güvenlik ilkelerini uygulayarak web projelerinizi güvenli, ölçeklenebilir ve modern DevOps standartlarına tam uyumlu bir biçimde canlıya alabilirsiniz.