HowTo09 Eylül 2026•2 dk okuma
Docker ve Container Mimarisi ile Web Uygulaması Dağıtımı Rehberi
Modern web uygulamalarını Docker ile dağıtma adımları. Dijital ajans projeleri ve ekipler için pratik container mimarisi rehberi.
S
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Modern Web ve Container Mimarisi
Klasik sunucu kurulumları ortam uyuşmazlığı yaratır. Docker izole ortam sağlar. Kod her yerde aynı çalışır. Dijital ajans ekipleri için dağıtım süresini kısaltır, sunucu maliyetini düşürür. Güncel trendler hafif ve çok aşamalı (multi-stage) container kullanımını öne çıkarır.
Adım 1: .dockerignore Dosyası Oluşturma
Gereksiz dosyalar imaj boyutunu şişirir. Proje kök dizininde .dockerignore aç:
node_modules
.git
.env
*.log
distAdım 2: Çok Aşamalı (Multi-stage) Dockerfile Yazımı
Derleme araçlarını son imaja dahil etme. Minimal taban imaj (Alpine) kullan:
# 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
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]Güvenlik Uyarısı: Container içinde root kullanma. USER node veya özel kullanıcı tanımla. İzin sınırla.Adım 3: Docker Compose ile Servis Yönetimi
Veritabanı ve web servisini birlikte ayağa kaldırmak için docker-compose.yml kullan:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/appdb
depends_on:
- db
restart: always
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: appdb
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
voldumes:
pgdata:Adım 4: Dağıtım ve Çalıştırma
Sunucuda projeyi başlatma adımları:
- Kodu sunucuya çek:
git pull origin main - Containerları arka planda derle ve çalıştır:
docker compose up -d --build - Logları kontrol et:
docker compose logs -f web - Eski imajları temizle:
docker image prune -f
Pratik İpuçları ve Trendler
- İmaj Boyutu: Minimal base imajlar (Alpine, Distroless) seç. Saldırı yüzeyi küçülür.
- Reverse Proxy: Container önüne Nginx veya Traefik koy. SSL/TLS yönetimini proxy katmanında çöz.
- CI/CD Entegrasyonu: GitHub Actions veya GitLab CI ile otomatik imaj build ve push pipeline kur.