Docker ile Web Uygulaması Dağıtım Rehberi: Modern Web Mimarisi ve Adım Adım Deployment
Modern web mimarisinde Docker container dağıtımı için kapsamlı rehber. Multi-stage build, Docker Compose ve production optimizasyon adımları.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Modern Web Dağıtımında Docker ve Container Mimarisi
Geleneksel sunucu dağıtımları ortam uyumsuzlukları ve kaynak israfı yaratır. Modern web trendleri uygulamaların izole, taşınabilir ve ölçeklenebilir container yapıları üzerinde çalışmasını gerektirir. Dijital ajans altyapılarında ve kurumsal sistemlerde Docker, geliştirme ve canlı ortam arasındaki farkları sıfırlar.
Adım 1: Multi-Stage Dockerfile ile İmaj Boyutu Optimizasyonu
Gereksiz build araçlarını production imajından çıkarmak güvenlik ve hız sağlar. Multi-stage build yaklaşımı kullanılır.
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]- Build Katmanı: Derleme araçları içerir, son imaja dahil edilmez.
- Production Katmanı: Yalnızca derlenmiş statik dosyaları ve Nginx binary dosyasını barındırır.
Adım 2: .dockerignore Dosyası ile Gereksiz Dosyaları Filtreleme
İmaj boyutunu şişiren ve build cache mekanizmasını bozan dosyalar hariç tutulmalıdır. Kök dizinde .dockerignore tanımlanır:
node_modules
.git
.env
*.md
distAdım 3: Docker Compose ile Servis Orkestrasyonu
Modern web uygulamaları bağımsız servislerden oluşur. Web sunucusu, API ve veritabanı tek konfigürasyonla ayağa kaldırılır.
version: '3.8'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "80:80"
restart: always
environment:
- NODE_ENV=production
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: app_db
POSTGRES_USER: user
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
secrets:
db_password:
file: ./secrets/db_password.txtAdım 4: Production Güvenliği ve Ortam Değişkenleri Yönetimi
Gizli anahtarlar asla imaj içine gömülmez. Production ortamında şu standartlar uygulanır:
- Rootless Container: Süreçler root yetkisi olmayan kullanıcı ile çalıştırılır (
USER node). - Docker Secrets / Environment: API anahtarları ve veritabanı şifreleri Docker Secret veya ortam değişkenleri üzerinden runtime anında enjekte edilir.
- Healthcheck: Konteyner sağlığı periyodik kontrol edilir:
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget --quiet --tries=1 --spider http://localhost/ || exit 1Adım 5: Canlıya Alma ve Deployment Otomasyonu
Sunucu üzerinde minimal komut setiyle deployment tamamlanır:
docker compose pull
docker compose up -d --remove-orphans
docker image prune -fBu rehber, dijital ajans ekiplerinin ve yazılım mimarlarının modern web projelerinde sıfır kesinti ve öngörülebilir dağıtım süreçleri kurması için standart referanstır.