Docker ile Modern Web Uygulaması Dağıtım Rehberi: Container Mimarisi ve Trendler
Modern web uygulamaları için Docker ve container tabanlı dağıtım rehberi. Dijital ajans iş akışlarına uygun, adım adım deployment süreçleri ve sektör trendleri.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Giriş: Modern Web Dağıtımında Container Dönemi
Container mimarisi, yazılım dünyasında standart haline geldi. Bir dijital ajans veya yazılım ekibi için 'bende çalışıyordu, sunucuda çalışmıyor' devri kapandı. Bu rehber, modern web uygulamalarını Docker kullanarak izole, tekrarlanabilir ve hızlı şekilde production ortamına dağıtma adımlarını gösterir.
Adım 1: Uygulama İzolasyonu ve Dockerfile Hazırlığı
Uygulama kök dizininde minimal ve çok aşamalı (multi-stage) Dockerfile tanımlanmalıdır. Bu yöntem imaj boyutunu küçültür ve güvenlik açıklarını azaltır.
Örnek: Multi-Stage Dockerfile (Node.js/Go uyumlu)
# Build aşaması
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production 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
EXPOSE 3000
USER node
CMD ["node", "dist/main.js"]Adım 2: Çevre Değişkenleri ve .dockerignore
Gereksiz dosyaların container içine girmesini engellemek için .dockerignore dosyası oluşturulmalıdır:
node_modules.git.envDockerfileREADME.md
Güvenlik Uyarısı: API anahtarları, DB şifreleri imaja gömülmez. Ortam değişkenleri (Environment Variables) ya da Docker Secrets kullanılır.
Adım 3: Çoklu Servis Yapılandırması (Docker Compose)
Uygulama, veri tabanı ve ters vekil sunucu (Reverse Proxy) tek merkezden yönetilir.
version: '3.8'
services:
web:
build: .
restart: always
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/appdb
depends_on:
- db
db:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: appdb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:Adım 4: Sunucuya Dağıtım (Production Deployment)
- Sunucu Hazırlığı: Ubuntu tabanlı sunucuda Docker ve Docker Compose Engine kurulur.
- Kod Aktarımı: Git reposu çekilir veya CI/CD aracıyla imaj Container Registry'ye (GHCR/Docker Hub) yüklenir.
- Başlatma:
docker compose up -d --buildkomutu ile servisler arka planda çalıştırılır. - Sıfır Kesinti: Yeni sürüme geçerken
docker compose pull && docker compose up -d --no-deps --build webuygulanır.
Modern Web Trendleri: 2024 ve Sonrası
- Minimal Base Images: Alpine yerine Chainguard veya Distroless kullanımı.
- GitOps & CI/CD: GitHub Actions üzerinden doğrudan Kubernetes veya Docker Swarm entegrasyonu.
- Edge Deployment: Stateless container yapılarının CDN ve Edge nodelarına dağıtımı.