Docker ile Web Uygulaması Dağıtım Rehberi: Modern Web ve Konteyner Mimarisi
Modern web uygulamalarını Docker ve konteyner mimarisi ile prodüksiyon ortamına dağıtma rehberi. Dijital ajanslar ve geliştiriciler için adım adım optimizasyon ve deployment adımları.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Giriş: Modern Web ve Konteyner Mimarisi
Geleneksel sunucu dağıtımları 'benim makinemde çalışıyordu' sorununa yol açar. Konteyner mimarisi kod, bağımlılıklar ve çalışma zamanını izole paket yapar. Dijital ajans ekipleri ve modern web projeleri için dağıtım standardıdır. Sektör trendleri mikroservis, multi-stage build ve hafif imajlar yönündedir.
Adım 1: .dockerignore Dosyası Oluşturma
Gereksiz dosyalar imaj boyutunu şişirir, build süresini uzatır. Proje kök dizininde .dockerignore tanımlayın:
node_modules
.git
.env
*.log
distAdım 2: Multi-Stage Dockerfile Tanımlama
Prodüksiyon imajında derleme araçları yer almamalıdır. Multi-stage build kullanarak nihai boyutu minimize edin:
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
USER node
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/main.js"]Güvenlik Kuralı: Konteyneri aslarootkullanıcısı ile çalıştırmayın.USER nodeveya özel kullanıcı tanımlayın.
Adım 3: Docker Compose ile Servisleri Birleştirme
Web uygulaması ve ters vekil sunucu (Nginx) tek yapılandırma ile yönetilir. docker-compose.yml:
version: '3.8'
services:
web:
build: .
restart: always
environment:
- PORT=3000
networks:
- app-network
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- web
networks:
- app-network
networks:
app-network:
driver: bridgeAdım 4: Prodüksiyona Dağıtım (Deployment)
Sunucuya erişin ve servisleri başlatın:
- İmajı derleyin ve arka planda çalıştırın:
docker compose up -d --build - Çalışma durumunu doğrulayın:
docker compose ps - Canlı log takibi:
docker compose logs -f web
Optimizasyon ve Bakım İpuçları
- Minimal Temel İmaj:
alpineveyadistrolessimajları tercih edin. Güvenlik açığı riskini ve indirme süresini düşürür. - Healthcheck Ekleyin: Konteyner çökme durumunda otomatik yeniden başlatma için Dockerfile içine sağlık kontrolü ekleyin.
- Kullanılmayan Kaynakları Temizleyin: Düzenli aralıklarla sunucuda
docker system prune -af --volumesçalıştırarak disk alanı kazanın.