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

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

Modern yazılım dünyasında web uygulamalarını Docker ve container mimarisiyle güvenli, ölçeklenebilir ve hızlı bir şekilde dağıtmayı (deployment) adım adım öğrenin.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Giriş: Modern Yazılım Dağıtımında Container Dönemi

Yazılım geliştirme süreçlerinde karşılaşılan en büyük problemlerden biri olan "Benim bilgisayarımda çalışıyordu ama sunucuda çalışmıyor" sendromu, container teknolojileri sayesinde tarihe karıştı. Günümüzün modern yazılım geliştirme ekosisteminde, çeviklik ve süreklilik en kritik unsurlar haline gelmiştir. Bu doğrultuda hazırladığımız bu kapsamlı rehber, Docker ve container mimarisini kullanarak bir web uygulamasının sıfırdan üretim (production) ortamına nasıl dağıtılacağını tüm detaylarıyla ele almaktadır.

Bulut bilişim ve mikroservis mimarilerinin yükselişiyle birlikte, kurumların benimsediği dijital strateji yaklaşımları artık tamamen konteynerleştirilmiş altyapılar üzerine kurulmaktadır. DevOps süreçlerindeki güncel trendler, yazılım yaşam döngüsünü otomatikleştirerek hata payını minimuma indirmeyi hedefler.

Temel Kavramlar: Docker Ekosistemini Anlamak

Dağıtım adımlarına geçmeden önce Docker mimarisinin temel yapı taşlarını kavramak kritik öneme sahiptir:

  • Docker Image (İmaj): Uygulamanızın kaynak kodunu, bağımlılıklarını, çalışma zamanını ve sistem kütüphanelerini içeren salt okunur (read-only) şablondur.
  • Docker Container: İmajın çalışan, izole edilmiş canlı örneğidir. Her container kendi dosya sistemi, ağı ve işlem alanına sahiptir.
  • Dockerfile: Bir Docker imajının nasıl oluşturulacağını adım adım belirten talimatlar dosyasıdır.
  • Docker Compose: Çoklu container içeren karmaşık uygulamaları (örneğin Web API + Veritabanı + Redis) tek bir yapılandırma dosyası üzerinden yönetmeyi sağlayan araçtır.
  • Container Registry: Docker imajlarının depolandığı ve paylaşıldığı merkezi depolardır (Docker Hub, GitHub Container Registry, AWS ECR vb.).

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

Adım 1: Optimize Edilmiş Bir Dockerfile Hazırlama

Başarılı bir dağıtımın ilk adımı, hafif ve güvenli bir Docker imajı üretmektir. Üretim ortamları için Multi-Stage Build (çok aşamalı derleme) yaklaşımını kullanmak imaj boyutunu ciddi oranda düşürür.

İpucu: Alpine veya Slim tabanlı resmi imajları tercih ederek hem güvenlik açıklarını azaltabilir hem de indirme/yükleme sürelerini kısaltabilirsiniz.

Örnek bir Node.js veya Go uygulaması için Multi-stage Dockerfile mantığı:

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

# Üretim Aşaması (Production Stage)
FROM node:18-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
USER node
CMD ["node", "dist/main.js"]

Adım 2: .dockerignore Dosyası Oluşturma

Gereksiz dosyaların imaj içerisine dahil edilmesi, derleme süresini uzatır ve güvenlik zaafiyetleri oluşturabilir. Proje ana dizininde bir .dockerignore dosyası oluşturarak aşağıdaki dizinleri hariç tutun:

  • node_modules veya vendor
  • .git ve .github
  • .env ve yerel kimlik doğrulama dosyaları
  • Log dosyaları ve geçici test dizinleri

Adım 3: Çoklu Servisler için Docker Compose Yapılandırması

Web uygulamanız genellikle bir veritabanı (PostgreSQL, MySQL vb.) veya önbellek mekanizması (Redis) ile birlikte çalışır. Bu servisleri koordine etmek için bir docker-compose.yml dosyası hazırlayın:

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

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

volumes:
  db_data:

Adım 4: İmajı Derleme ve Yerel Ortamda Doğrulama

Uygulamanızı uzak sunucuya göndermeden önce mutlaka yerel makinenizde test edin:

  1. Terminalden docker compose build komutu ile imajları derleyin.
  2. docker compose up -d ile servisleri arka planda başlatın.
  3. docker compose ps ve docker compose logs -f komutları ile konteynerlerin sağlıklı çalıştığından emin olun.

Adım 5: Container Registry Entegrasyonu

Uygulama imajınızı dağıtılacağı sunucuya ulaştırmak için merkezi bir imaj deposuna yüklemeniz gerekir:

  1. Kayıt defterine giriş yapın: docker login
  2. İmajınızı etiketleyin (tag): docker tag my-web-app:latest username/my-web-app:v1.0.0
  3. İmajı uzak depoya gönderin: docker push username/my-web-app:v1.0.0

Adım 6: Üretim Sunucusuna Dağıtım ve Tersine Dizinleme (Reverse Proxy)

Uzak sunucunuza (AWS EC2, DigitalOcean Droplet, Hetzner vb.) bağlandıktan sonra:

  • Sunucuya Docker ve Docker Compose kurulumunu yapın.
  • Uygulamanızı çalıştırmak için Nginx veya Traefik gibi bir Tersine Proxy (Reverse Proxy) yapılandırın.
  • Let's Encrypt (Certbot) kullanarak ücretsiz SSL sertifikası tanımlayın ve HTTPS trafiğini güvene alın.
  • docker pull username/my-web-app:v1.0.0 komutu ile imajı çekip ayağa kaldırın.

Üretim Ortamında En İyi Uygulamalar (Best Practices)

Container dağıtımında kurumsal seviyede güvenilirlik sağlamak için şu prensipleri göz önünde bulundurun:

  • Root Yetkilerini Sınırlandırın: Container'ları asla varsayılan 'root' kullanıcısı ile çalıştırmayın. Dockerfile içerisinde USER tanımlayın.
  • Kaynak Limitleri Belirleyin: Bir container'ın sunucudaki tüm CPU ve RAM'i tüketmesini engellemek için Docker Compose üzerinde bellek ve işlemci sınırları tanımlayın.
  • Health Check Mekanizması: Container sağlığını izlemek için HEALTHCHECK direktiflerini aktif edin; böylece çöken servisler otomatik olarak yeniden başlatılabilir.
  • Gizli Bilgileri (Secrets) Güvende Tutun: API anahtarlarını ve veritabanı şifrelerini asla Dockerfile içine yazmayın; ortam değişkenleri (environment variables) veya Docker Secrets kullanın.

Geleceğin Trendleri: CI/CD ve Orkestrasyon

Sektördeki en güncel trendler, manuel dağıtımların yerini tamamen otomatik CI/CD (Sürekli Entegrasyon / Sürekli Dağıtım) boru hatlarına bıraktığını göstermektedir. GitHub Actions veya GitLab CI araçları ile kodunuz ana dala (main branch) gönderildiği anda otomatik olarak test edilebilir, Docker imajı derlenebilir ve sunucuya sıfır kesintiyle (zero-downtime) dağıtılabilir.

Eğer uygulamanız yüzlerce konteynere ölçeklenecek seviyeye geldiyse, uzun vadeli dijital strateji kapsamında Kubernetes veya Docker Swarm gibi orkestrasyon sistemlerine geçiş yapmak kaçınılmaz bir adım olacaktır.

Sonuç

Docker ve container mimarisi, web uygulaması dağıtımını standartlaştırarak geliştirme ile operasyon arasındaki sürtüşmeyi ortadan kaldırır. Bu rehber içerisindeki adımları ve en iyi uygulamaları takip ederek, projelerinizi modern, güvenli ve kolayca ölçeklenebilir bir mimari üzerinde canlıya alabilirsiniz.