Docker ile Web Uygulaması Dağıtımı Rehberi: Modern Trendler ve Dijital Strateji
Docker ve container mimarisiyle web uygulaması dağıtımı adım adım rehber. Modern DevOps trendleri, imaj optimizasyonu ve üretim ortamı dijital strateji adımları içerir.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Docker ve Container Mimarisi: Modern Dijital Strateji
Geleneksel dağıtım modelleri sunucu bağımlılığı ve konfigürasyon uyuşmazlığı yaratır. Container mimarisi, uygulamayı bağımlılıklarıyla paketler. Çevre bağımsız, tekrarlanabilir dağıtım sağlar. Modern yazılım geliştirme trendleri içinde mikroservis ve bulut yerel (cloud-native) mimarilerin temelidir.
Adım 1: Uygulama İçin Optimize Dockerfile Yazımı
Dağıtımın temeli minimal ve güvenli imaj üretimidir. Multi-stage build kullanarak imaj boyutu düşürülür, saldırı yüzeyi daraltılır.
Örnek Multi-Stage Dockerfile (Node.js/Go Örneği)
# Derleme 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 --chown=node:node --from=builder /app/dist ./dist
COPY --chown=node:node --from=builder /app/node_modules ./node_modules
COPY --chown=node:node package.json ./
EXPOSE 3000
CMD ["node", "dist/main.js"]Önemli noktalar:
- Alpine/Distroless taban imaj: Gereksiz paketleri engeller.
- Non-root kullanıcı: Güvenlik standardı gereği
USER nodetanımlanır. - Katman önbellekleme (Layer Caching): Kaynak koddan önce
package.jsonkopyalanır.
Adım 2: Docker Compose ile Servis Orkestrasyonu
Web uygulamaları veritabanı, reverse proxy ve önbellek servislerine ihtiyaç duyar. Tek dosyada ortam tanımı yapılır.
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/app_db
depends_on:
- db
restart: always
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=app_db
volumes:
pgdata:Adım 3: Üretim Dağıtım Stratejileri ve Trendler
Container dağıtımında kesintisiz erişim (Zero-Downtime) esastır. Uygulanan modern dağıtım yöntemleri:
- Blue-Green Deployment: İki özdeş ortam. Biri canlı trafiği alırken diğeri güncellenir. Router/Load Balancer yönlendirilir. Risk sıfırlanır.
- Rolling Update: Container'lar aşamalı olarak yenilenir. Kaynak tüketimi düşüktür.
- Reverse Proxy (Nginx / Traefik): SSL sonlandırma, HTTP/2 yönlendirme ve rate limit işlemleri reverse proxy katmanında çözülür.
Güvenlik Uyarısı: Üretim ortamında container içine gizli anahtarları (API key, DB password) doğrudan yazmayın. Environment variables, Docker Secrets veya Vault çözümlerini tercih edin.
Adım 4: CI/CD Pipeline ile Otomatik Deployment
Manuel dağıtım hata üretir. GitHub Actions veya GitLab CI ile pipeline kurulur:
- Koda commit atılır.
- Testler koşar, Docker imajı derlenir.
- İmaj GitHub Container Registry (GHCR) veya Docker Hub'a push edilir.
- SSH veya Webhook tetikleyicisiyle sunucuda
docker compose pull && docker compose up -dçalıştırılır.
Pratik Kontrol Listesi (Checklist)
.dockerignoredosyası eklendi mi? (node_modules, .git, .env hariç tutulmalı).- İmaj etiketleri sürümlendi mi? (
:latestyerine:v1.2.0veya:git-sha). - Healthcheck komutları tanımlandı mı?
- Loglar container dışına (stdout/stderr) aktarılıyor mu?