Konteynerizasyon Nedir?
Konteynerizasyon, uygulamaları ve bağımlılıklarını bir araya getirerek, taşınabilir ve izole bir birim olarak paketleyen bir teknoloji ve yaklaşımdır. Bu konteynerler, farklı bilgisayar ortamlarında tutarlı bir şekilde çalışabilir.
Konteynerler, uygulamaları çalıştırmak için gereken tüm bileşenleri (kod, çalışma zamanı, sistem araçları, sistem kütüphaneleri ve ayarlar) içerir. Bu, "bir kez oluştur, her yerde çalıştır" prensibini mümkün kılar ve geliştirme, test ve üretim ortamları arasındaki tutarsızlıkları ortadan kaldırır.
Konteynerizasyonun Temel Bileşenleri
- Konteyner İmajları
- Konteyner Çalışma Zamanı
- Konteyner Kayıt Defteri
- Konteyner Orkestrasyon
- Konteyner Ağı
Konteynerler vs. Sanal Makineler
Konteynerler
Konteynerler, işletim sistemi düzeyinde sanallaştırma sağlar ve aynı işletim sistemi çekirdeğini paylaşır.
- Boyut: Genellikle MB ölçeğinde, çok hafif
- Başlatma Süresi: Saniyeler içinde
- İzolasyon: Süreç düzeyinde izolasyon
- Kaynak Verimliliği: Çok yüksek, minimal ek yük
- Taşınabilirlik: Mükemmel, "her yerde çalışır"
Sanal Makineler
Sanal makineler, donanım düzeyinde sanallaştırma sağlar ve her biri kendi işletim sistemine sahiptir.
- Boyut: Genellikle GB ölçeğinde, ağır
- Başlatma Süresi: Dakikalar içinde
- İzolasyon: Tam izolasyon
- Kaynak Verimliliği: Daha düşük, önemli ek yük
- Taşınabilirlik: İyi, ancak daha karmaşık

Konteyner Mimarisi
Konteyner İmajları
Konteyner imajları, uygulamanın çalışması için gereken tüm bileşenleri içeren salt okunur şablonlardır. Bir imaj, bir Dockerfile veya benzeri bir yapılandırma dosyası kullanılarak oluşturulur ve katmanlı bir yapıya sahiptir.
Konteyner Çalışma Zamanı
Konteyner çalışma zamanı, konteyner imajlarını çalıştırmak için gereken yazılımdır. Docker, containerd, CRI-O gibi çalışma zamanları, imajları konteyner olarak başlatır ve yönetir.
Konteyner Kayıt Defteri
Konteyner kayıt defterleri, konteyner imajlarını depolamak ve dağıtmak için kullanılan merkezi depolar veya hizmetlerdir. Docker Hub, Google Container Registry, Amazon ECR gibi örnekler vardır.
Konteyner Ağı
Konteyner ağı, konteynerlerin birbirleriyle ve dış dünya ile iletişim kurmasını sağlayan mekanizmalardır. Bridge, host, overlay gibi farklı ağ modları vardır.
Konteynerizasyonun Faydaları
Hız ve Verimlilik
Konteynerler, sanal makinelere göre çok daha hızlı başlatılır ve daha az kaynak tüketir. Bu, daha hızlı dağıtım ve daha verimli kaynak kullanımı sağlar.
Tutarlılık ve Taşınabilirlik
Konteynerler, "bir kez oluştur, her yerde çalıştır" prensibini mümkün kılar. Bu, geliştirme, test ve üretim ortamları arasındaki tutarsızlıkları ortadan kaldırır.
Ölçeklenebilirlik
Konteynerler, hızlı bir şekilde ölçeklendirilebilir ve çoğaltılabilir. Bu, talep artışlarına veya azalmalarına hızlı bir şekilde yanıt vermeyi mümkün kılar.
İzolasyon ve Güvenlik
Konteynerler, uygulamaları birbirinden izole eder. Bu, bir uygulamadaki sorunun diğer uygulamaları etkilemesini önler ve güvenliği artırır.
Mikroservis Mimarisi
Konteynerler, mikroservis mimarisini destekler. Bu, uygulamaların daha modüler, bakımı daha kolay ve daha esnek olmasını sağlar.
Maliyet Tasarrufu
Konteynerler, daha verimli kaynak kullanımı sağlar. Bu, donanım maliyetlerini ve lisans maliyetlerini azaltır.
Popüler Konteynerizasyon Araçları

Docker
En popüler konteyner platformu. Konteyner oluşturma, çalıştırma ve yönetme için kullanılır.

Kubernetes
Konteynerleştirilmiş uygulamaları otomatikleştiren, ölçeklendiren ve yöneten açık kaynaklı bir orkestrasyon platformu.

containerd
Docker'ın temelini oluşturan, konteyner çalışma zamanı. CNCF projesi olarak bağımsız bir şekilde geliştirilmektedir.
Dockerfile Örneği
# Node.js uygulaması için Dockerfile örneği
# Temel imaj olarak Node.js'in resmi imajını kullanın
FROM node:14-alpine
# Çalışma dizinini belirleyin
WORKDIR /app
# package.json ve package-lock.json dosyalarını kopyalayın
COPY package*.json ./
# Bağımlılıkları yükleyin
RUN npm install
# Uygulama kodunu kopyalayın
COPY . .
# Uygulamayı derleyin (gerekiyorsa)
RUN npm run build
# Uygulama için kullanılacak portu belirtin
EXPOSE 3000
# Uygulamayı başlatın
CMD ["npm", "start"]