Docker ve Container Mimarisi ile Web Uygulaması Dağıtımı: Adım Adım Rehber
Container mimarisi kullanarak web uygulamalarını canlı ortama güvenli, hızlı ve optimize şekilde dağıtma rehberi. Modern DevOps trendleri ve dijital strateji adımları.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Container Mimarisi ve Dijital Strateji
Modern yazılım süreçlerinde monolitik yapıdan mikroservis ve container mimarisine geçiş kritik bir dijital strateji adımıdır. Docker; bağımlılıkları izole eder, ortamlar arası tutarsızlığı bitirir ve dağıtım (deployment) süreçlerini otomatikleştirir. Güncel DevOps trendleri, hafif imajlar (Alpine/Distroless) ve multi-stage build kullanımını standart kabul eder.
1. Adım: Dockerfile ile Uygulamayı Paketleme
Uygulama kök dizinine Dockerfile ekleyin. Multi-stage build kullanarak gereksiz derleme araçlarını nihai imajdan çıkarın.
# 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
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=builder /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/main.js"]2. Adım: .dockerignore Dosyası Oluşturma
Gereksiz dosya ve bağımlılıkların imaja girmesini engelleyin. Build süresini kısaltır, imaj boyutunu küçültür.
node_modules.git.envnpm-debug.log
3. Adım: Docker Compose ile Çoklu Servis Yönetimi
Web uygulaması ve veri tabanını izole bir ağda bağlamak için docker-compose.yml tanımlayın:
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
volumes:
pgdata:4. Adım: Dağıtım (Deployment) ve Canlıya Çıkış
- İmajı Derleyin:
docker build -t app:v1 . - İmajı Registry'ye Gönderin:
docker push registry.example.com/app:v1 - Sunucuda Çalıştırın:
docker compose up -d
Güvenlik uyarısı: Canlı ortamda konteynerleri asla root kullanıcısıyla çalıştırmayın. Gizli anahtarları ve şifreleri Dockerfile içine sabit kodlamayın; Docker Secrets veya ortam değişkenleri kullanın.
Üretim Ortamı İçin En İyi Pratikler
- Sağlık Kontrolleri (Healthcheck): Konteyner durumunu izlemek için
HEALTHCHECKkomutunu ekleyin. - Kayıt Yönetimi (Logging): Logları stdout/stderr üzerinden dışa aktarın, disk dolmasını önlemek için log rotation tanımlayın.
- Kaynak Sınırları: OOM (Out of Memory) çökmelerini engellemek için CPU ve bellek limitleri atayın.