IHS Strategic
Tüm Blog Yazıları
HowTo10 Eylül 2026•2 dk okuma

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

Modern web uygulamalarını Docker ve container mimarisiyle production ortamına dağıtma rehberi. Adım adım Dockerfile, Compose ve dağıtım stratejileri.

S

Sistem Yöneticisi

Kıdemli Yazılım Mimarı

Modern Web Geliştirmede Container Mimarisi ve Trendler

Modern web mimarisinde container teknolojisi standart haline geldi. Bir dijital ajans veya yazılım ekibi için 'benim makinemde çalışıyordu' sorununu çözer. Altyapı maliyetini düşürür, dağıtım hızını artırır. Bulut bilişim trendler arasında mikroservisler, multi-stage build ve hafif imajlar öne çıkar. Bu rehber, bir web uygulamasını container mimarisiyle sıfırdan canlıya alma adımlarını içerir.

Adım 1: Doğru Base Image Seçimi ve Dockerfile Oluşturma

Gereksiz katmanları ve bağımlılıkları dışarıda tutun. Alpine veya distroless gibi minimal imajlar güvenlik açıklarını azaltır, disk kullanımını minimuma indirir.

Örnek: Multi-Stage Node.js Dockerfile

# 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 AS runner
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/main.js"]

Adım 2: .dockerignore Dosyası ile Gereksiz Dosyaları Ayıklama

İmaj boyutunu şişirmemek ve gizli anahtarların imaja sızmasını önlemek için kök dizine .dockerignore dosyası ekleyin.

  • node_modules: Bağımlılıklar container içinde kurulmalı.
  • .env: Gizli anahtarlar imaj katmanlarına yazılmamalı.
  • .git: İmaj boyutunu artırır, üretimde gerek yoktur.

Adım 3: Docker Compose ile Servis Orchestration

Web sunucusu, veritabanı ve reverse proxy gibi servisleri tek dosyada tanımlayın. Modern web ortamında servislerin network izolasyonunu Compose sağlar.

version: '3.8'

services:
  web:
    build: .
    restart: always
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://user:pass@db:5432/app_db
    depends_on:
      - db

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

volumes:
  db_data:

Adım 4: Production Deployment ve Reverse Proxy Entegrasyonu

Uygulama container'ını doğrudan dış dünyaya açmayın. Önüne Nginx veya Traefik gibi bir reverse proxy koyun. SSL sonlandırma, rate limiting ve gzip sıkıştırmayı proxy üzerinde halledin.

Nginx Konfigürasyon Örneği

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://web:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

En İyi Pratikler ve Güvenlik Kontrolleri

Container güvenliğinde temel kural: Asla root kullanıcısı ile uygulama çalıştırmayın ve container içine kalıcı veri yazmayın (stateless mimari uygulayın).

  • Rootless Execution: Dockerfile içinde USER tanımlayın.
  • Restart Policy: Çöken servislerin otomatik ayağa kalkması için restart: unless-stopped veya restart: always kullanın.
  • Healthcheck: Docker'ın container sağlığını denetlemesi için HEALTHCHECK komutu ekleyin.
  • Log Yönetimi: Disk dolmasını engellemek için json-file log sürücüsüne max-size ve max-file sınırları getirin.