Docker ve Container Mimarisi ile Web Uygulaması Dağıtımı Rehberi: Adım Adım Deployment
Modern yazılım süreçlerinde web uygulamalarını Docker ve konteyner mimarisiyle güvenli, ölçeklenebilir ve taşınabilir şekilde canlıya alma adımlarını içeren kapsamlı bir rehber.
Sistem Yöneticisi
Kıdemli Yazılım Mimarı
Geleneksel yazılım dağıtım yöntemleri, "benim makinemde çalışıyordu ama sunucuda çalışmıyor" krizleriyle doludur. Günümüz yazılım geliştirme ve DevOps dünyasında bu sorunu tarihe gömen en kritik teknoloji Docker ve konteyner mimarisi olmuştur. Modern bir dijital strateji geliştiren ekipler için konteynerleştirme; hız, kaynak tasarrufu, tutarlılık ve ölçeklenebilirlik anlamına gelir. Bu rehber içeriğimizde, bir web uygulamasını Docker kullanarak sıfırdan canlı ortama (production) nasıl taşıyacağınızı adım adım inceleyeceğiz.
Konteyner Mimarisi Nedir ve Neden Standart Haline Geldi?
Geleneksel sanal makineler (VM), her bir uygulama için koca bir işletim sistemi (Guest OS) ve hipervizör katmanı gerektirirken; konteynerler ana işletim sisteminin çekirdeğini (kernel) paylaşır. Bu sayede saniyeler içinde başlar, megabayt seviyesinde kaynak tüketir ve mikroservis mimarilerine kusursuz uyum sağlar.
Konteyner mimarisi, yalnızca bir altyapı tercihi değil; sürekli entegrasyon ve sürekli dağıtım (CI/CD) döngüsünü hızlandıran kurumsal bir dijital strateji bileşenidir.
Adım Adım Web Uygulaması Dağıtımı (Deployment)
Adım 1: Uygulama Mimarisi İçin Dockerfile Hazırlama
Dockerfile, uygulamanızın hangi işletim sistemi katmanında, hangi bağımlılıklarla ve hangi komutlarla çalışacağını belirleyen reçetedir. Optimum bir Dockerfile için Multi-stage Build yaklaşımı en güncel trendler arasındadır.
Örnek bir Node.js veya Go/Python uygulaması için temel yapı:
- Base Image: Minimal boyutlu bir imaj seçin (örn.
node:18-alpineveyapython:3.11-slim). - Working Directory: Çalışma dizinini
WORKDIR /appolarak belirleyin. - Dependencies: Paket bağımlılık dosyalarını kopyalayıp yükleyin (Katman önbelleklemesinden yararlanmak için önce bağımlılıkları kopyalayın).
- Source Code: Kaynak kodları dahil edin.
- CMD/ENTRYPOINT: Uygulamanın ayağa kalkma komutunu tanımlayın.
Adım 2: .dockerignore ile İmaj Boyutunu ve Güvenliği Optimize Etme
Tıpkı .gitignore gibi, .dockerignore dosyası da gereksiz dosyaların (örn. node_modules, .git, .env, test logları) imaja dahil edilmesini engeller. Bu adım, hem imaj boyutunu küçültür hem de hassas ortam değişkenlerinin sızmasını önler.
Adım 3: Docker Compose ile Çok Katmanlı Servisleri Yapılandırma
Gerçek dünya web uygulamaları genellikle sadece bir API sunucusundan ibaret değildir; veritabanı (PostgreSQL, MySQL), önbellek (Redis) ve ters tersine vekil sunucu (Nginx) gibi katmanlar içerir. docker-compose.yml dosyası bu servislerin tek bir komutla orkestre edilmesini sağlar.
- Networks: Servislerin sadece kendi aralarında güvenli haberleşmesi için izole ağlar tanımlayın.
- Volumes: Veritabanı ve log verilerinin konteyner kapansa dahi kaybolmaması için kalıcı (persistent) volume'lar bağlayın.
- Environment: Gizli anahtarları
.envdosyaları veya gizlilik yönetim araçları üzerinden iletin.
Adım 4: Canlı Sunucuya Dağıtım ve CI/CD Pipeline Entegrasyonu
Docker ile deployment yaparken en yaygın yöntem, GitHub Actions veya GitLab CI gibi araçlarla otomatik imaj oluşturup bir Container Registry (Docker Hub, AWS ECR, GitHub Container Registry) üzerine yüklemektir.
- Koda commit atıldığında CI pipeline tetiklenir.
- Testler koşulur ve Docker imajı build edilir.
- İmaj registry'e push edilir.
- Production sunucusunda
docker compose pull && docker compose up -dkomutu ile sıfır kesintiye yakın bir güncelleme sağlanır.
Adım 5: Sağlık Kontrolleri (Healthcheck) ve İzleme (Monitoring)
Konteynerin çalışır görünmesi (running), web uygulamasının gerçekten HTTP isteklerine yanıt verdiği anlamına gelmeyebilir. Dockerfile içinde veya Compose dosyasında HEALTHCHECK direktifi tanımlayarak uygulamanın durumunu izleyebilirsiniz.
Konteyner Dağıtımlarında Modern Trendler
Bulut bilişim ekosistemindeki güncel trendler, konteyner yönetimini geleneksel sanal sunuculardan çıkarıp daha esnek çözümlere kaydırmaktadır:
- Kubernetes ve K3s: Büyük ölçekli ve otomatik ölçeklenen (auto-scaling) mikroservis dağıtımlarında endüstri standardı.
- Serverless Konteynerler: AWS Fargate, Google Cloud Run ve Azure Container Apps gibi sunucusuz mimariler sayesinde sunucu yönetimi yapmadan doğrudan imaj çalıştırma.
- Rootless Containers ve Güvenlik Taramaları: Trivy gibi araçlarla Docker imajlarındaki güvenlik açıklarını build aşamasında tespit etme.
Sonuç
Docker ile web uygulaması dağıtımı, yazılım yaşam döngüsünü standardize ederek ekiplerin geliştirme hızını ve sistem güvenilirliğini katlar. Bu rehber ile paylaştığımız adımları uygulayarak altyapınızı modernize edebilir, işletmenizin dijital strateji vizyonunu sağlam bir teknolojik temel üzerine inşa edebilirsiniz.