Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Sanal Sunucular

Container Nedir? Container Sanallaştırma Prensipleri Açıklandı

Container teknolojisi, geliştiricilerin uygulamaları nasıl oluşturduğunu, dağıttığını ve çalıştırdığını temelden değiştirmiştir. Bir WordPress sitesi, bir Node.js API’si veya tam yığın bir e-ticaret platformu dağıtıyor olsanız da, konteynerler geleneksel sanal makinelere kıyasla daha hızlı, daha güvenilir ve daha taşınabilir bir alternatif sunar. Bu kılavuz, konteynerların tam olarak ne olduğunu, arka planda nasıl çalıştığını ve 2025’te maksimum sonuçlar için yüksek performanslı altyapıda nasıl yararlanabileceğinizi açıklamaktadır.

Konteyner Nedir?

Bir konteyner, bir uygulamayı tüm bağımlılıklarıyla — kütüphaneler, yapılandırma dosyaları, çalışma zamanı ortamları ve ikili dosyalar — tek bir taşınabilir yapıya paketleyen standartlaştırılmış, kendi kendine yeterli bir yazılım birimidir. Uygulamanın ihtiyaç duyduğu her şey konteyner içinde paketlendiğinden, konteynerleştirmeyi destekleyen herhangi bir ortamda hızlı, öngörülebilir ve özdeş şekilde çalışır.

Uygulamaların temel alınan ana bilgisayar yapılandırmasına yoğun şekilde bağlı olduğu geleneksel dağıtım modellerinin aksine, konteynerler ortamsal tutarsızlıkları soyutlar. Sonuç olarak, gönderimi daha hızlı, ölçeklemesi daha kolay ve hata ayıklaması çok daha basit olan bir dağıtım modelidir.

> Temel tanım: Bir konteyner sanal makine değildir. Paylaşılan bir işletim sistemi çekirdeğinin üstünde kullanıcı alanında çalışan hafif, izole edilmiş bir işlemdir.

Konteynerler vs. Sanal Makineler

Konteynerler ve sanal makineler (VM) arasındaki farkı anlamak, konteynerizasyon ilkelerine daha derinlemesine dalmadan önce gereklidir.

ÖzellikKonteynerlerSanal Makineler
OS KernelAna bilgisayarla paylaşılanVM başına ayrı
Başlangıç SüresiMilisaniye ile saniyeDakika
Disk AlanıMegabaytGigabayt
İzolasyon SeviyesiProses seviyesiDonanım seviyesi
TaşınabilirlikÇok yüksekOrta
Kaynak YüküÇok düşükYüksek
Kullanım DurumuMikrohizmetler, CI/CD, ölçeklendirmeTam OS izolasyonu, eski uygulamalar

Sanal makineler tüm donanım yığınını sanallaştırır ve her örnek için tam bir konuk işletim sistemi gerektirir. Konteynerler ise ana bilgisayar OS kernel’ini paylaşır ve yalnızca uygulamanın kullanıcı alanını izole eder. Bu, konteynerları dramatik olarak daha hafif ve hızlı hale getirirken, iş yükleri arasında anlamlı izolasyon sağlar.

Bununla birlikte, VM’ler ve konteynerler birbirini dışlamaz. VPS Hosting ve Dedicated Servers dahil olmak üzere birçok üretim ortamı, donanım seviyesi izolasyonun güvenlik avantajlarını konteynerizasyonun çevikliğiyle birleştirmek için sanal makineler *içinde* konteynerler çalıştırır.

Konteynerların Temel Özellikleri

3.1 Hafif Mimari

Konteynerler yalnızca uygulama kodunu ve doğrudan bağımlılıklarını içerir. Tam bir işletim sistemi paketlemezler, bu da şu anlama gelir:

  • Başlangıç süreleri dakikalar değil, milisaniye ile saniye arasında ölçülür.
  • Görüntü boyutları tipik olarak 5 MB ile birkaç yüz MB arasında olup, VM görüntüleri için birkaç GB ile karşılaştırılır.
  • Kaynak tüketimi önemli ölçüde daha düşüktür ve yalnızca bir avuç VM’yi destekleyebilecek aynı donanımda düzinelerce veya yüzlerce konteyneri çalıştırmanıza olanak tanır.

Bu hafif yapı, konteynerları mikro hizmetler mimarileri için ideal kılar; burada düzinelerce küçük, bağımsız hizmetin paylaşılan altyapıda bir arada bulunması gerekir.

3.2 Taşınabilirlik

Konteynerların en çekici özelliklerinden biri taşınabilirliğidir. Bir geliştirici bilgisayarında oluşturulan bir konteynır görüntüsü aynı şekilde çalışır:

  • Yerel test ortamında
  • Hazırlama sunucusunda
  • Üretim bulut örneğinde
  • Çıplak metal Dedicated Server‘da

Bu “bir kez oluştur, her yerde çalıştır” ilkesi, yazılım ekiplerini onlarca yıldır rahatsız eden klasik “benim makinemde çalışıyor” sorununu ortadan kaldırır. Konteynır görüntüleri değişmez yapıtlardır — ortamlar arasında değişmezler, bu da hata ayıklamayı, geri alma işlemlerini ve denetimi çarpıcı biçimde basitleştirir.

3.3 İzolasyon

Konteynerler işlem düzeyinde izolasyon sağlayarak, ayrı konteynerler içinde çalışan uygulamaların birbirini etkileyememesini sağlar. Her konteyner kendi:

  • Dosya sistemi görünümüne
  • Ağ arayüzlerine
  • İşlem ağacına
  • Ortam değişkenlerine ve yapılandırmaya

sahiptir. Bu izolasyon hem güvenliği hem de istikrarı artırır. Bir konteyner içindeki bir çökme veya bellek sızıntısı komşu konteynerler içine yayılmaz. Çok kiracılı ortamlar veya hassas veriler işleyen uygulamalar için bu sınır kritiktir.

Konteyner Sanallaştırması Nasıl Çalışır

Konteyner izolasyonu sihir değildir — yıllardır var olan belirli Linux çekirdeği özellikleri üzerine inşa edilmiştir. Bu mekanizmaları anlamak, konteynerların gerçekte ne olduğu ve davranışları hakkında nasıl düşüneceğiniz konusunda çok daha net bir resim verir.

4.1 Linux Namespaces

Namespaces, Linux çekirdeğinin konteynerler arasında izolasyon sağladığı birincil mekanizmadır. Bir namespace belirli bir global sistem kaynağını sarar ve her konteynere o kaynağın kendi izole edilmiş görünümünü sunar.

Konteynerizasyonda kullanılan temel namespaces şunları içerir:

  • PID Namespace — İşlem kimliklerini izole eder. Her konteynerin PID 1’den başlayan kendi işlem ağacı vardır. Konteynerin içindeki işlemler diğer konteynerler veya ana bilgisayarda çalışan işlemleri göremez veya sinyal gönderemez.
  • NET Namespace — Her konteynere sanal ağ arayüzleri, IP adresleri, yönlendirme tabloları ve güvenlik duvarı kuralları dahil olmak üzere kendi ağ yığınını verir. Bu, iki konteynerin her birinin port 80’e bağlanabilmesinin ve çakışmamasının nedenidir.
  • MNT Namespace — Bir konteynere görünür dosya sistemi bağlama noktalarını izole eder ve her birine dizin ağacının kendi görünümünü sağlar.
  • UTS Namespace — Her konteynerin ana bilgisayar sisteminden bağımsız olarak kendi ana bilgisayar adı ve etki alanı adına sahip olmasını sağlar.
  • IPC Namespace — İleti kuyrukları ve paylaşılan bellek segmentleri gibi işlemler arası iletişim kaynaklarını izole eder.
  • User Namespace — Konteynerin içindeki kullanıcı ve grup kimliklerini ana bilgisayardaki farklı kimliklerle eşleştirir, konteynerların içinde kök olarak çalışmasını sağlarken ana bilgisayarda ayrıcalıksız kalmasını sağlar.

Birlikte, bu namespaces her konteyner için tamamen ayrı bir işletim ortamının yanılsamasını yaratır, hepsi aynı temel çekirdeği paylaşırken.

4.2 Kontrol Grupları (cgroups)

Namespaces bir konteynerin *ne görebileceğini* ele alırken, kontrol grupları (cgroups) bir konteynerin *ne kullanabileceğini* ele alır. Cgroups, işletim sisteminin işlem grupları için kaynak kullanımını tahsis etmesine, sınırlandırmasına ve izlemesine olanak tanıyan bir Linux çekirdeği özelliğidir.

Cgroups ile, konteyner başına sınırlamalar uygulayabilirsiniz:

  • CPU — Bir konteynerin diğerlerini açlıktan kurtarmasını önlemek için CPU payları veya sabit sınırlar atayın.
  • Bellek — Maksimum RAM kullanımını ayarlayın; sınırını aşan konteynerler öldürülür veya kısıtlanır.
  • Disk I/O — Tek bir konteynerin depolamayı doymasını önlemek için okuma/yazma verimini kısıtlayın.
  • Ağ bant genişliği — Konteynere gelen ve giden trafiği hızlandırın.

Cgroups, tek bir sunucuda tahmin edilebilir, adil kaynak dağılımı ile düzinelerce konteyneri çalıştırmayı mümkün kılar. Onlar olmadan, tek bir kötü davranan konteyner tüm kullanılabilir CPU veya belleği tüketebilir ve tüm ana bilgisayarı çökertebilir.

4.3 Union Dosya Sistemleri (UnionFS)

Konteynerler, depolama katmanlarını verimli bir şekilde yönetmek için union dosya sistemleri — ayrıca overlay dosya sistemleri olarak da adlandırılır — kullanır. Bir union dosya sistemi, birden fazla dizin ağacının (*katmanlar* olarak adlandırılır) üst üste yığılmasına ve tek bir birleştirilmiş dosya sistemi olarak sunulmasına olanak tanır.

Docker ile pratikte nasıl çalıştığı aşağıda açıklanmıştır:

  1. Bir temel görüntü katmanı (örn. Ubuntu 22.04) salt okunur ve onu kullanan tüm konteynerler arasında paylaşılır.
  2. Ek görüntü katmanları üzerine yığılır — her biri bir paket yükleme veya uygulama kodu kopyalama gibi bir değişikliği temsil eder.
  3. Bir konteyner başladığında, üzerine ince bir yazılabilir katman eklenir. Konteynerin ömrü boyunca yapılan tüm değişiklikler yalnızca bu katmana yazılır.
  4. Konteyner silindiğinde, yazılabilir katman atılır. Temel salt okunur katmanlar bozulmadan kalır ve diğer konteynerler tarafından yeniden kullanılabilir.

Bu katmanlı yaklaşım birkaç avantaj sağlar:

  • Depolama verimliliği — Ortak katmanlar birçok konteyner arasında paylaşılır, disk kullanımını dramatik olarak azaltır.
  • Hızlı görüntü derlemeleri — Yalnızca değiştirilen katmanların yeniden oluşturulması veya indirilmesi gerekir.
  • Değişmezlik — Temel katmanlar hiçbir zaman değiştirilmez, görüntüleri yeniden üretilebilir ve denetlenebilir hale getirir.

Popüler union dosya sistemi uygulamaları OverlayFS (modern Docker’da varsayılan), AUFS ve Btrfs‘i içerir.

Popüler Konteyner Teknolojileri

Konteyner ekosistemi hızla olgunlaşmıştır. İşte karşılaşacağınız en yaygın olarak benimsenen teknolojiler:

Docker

Docker, konteynerleri oluşturmak ve çalıştırmak için fiili standarttır. 2013’te tanıtılan Docker, konteyner modelini popüler hale getirmiş ve etrafında aşağıdakiler de dahil olmak üzere zengin bir ekosistem oluşturmuştur:

  • Docker Engine — Tek bir ana bilgisayarda konteynerleri oluşturan ve çalıştıran çalışma zamanı.
  • Docker Hub — Yüz binlerce önceden oluşturulmuş görüntü içeren genel bir kayıt defteri.
  • Docker Compose — Basit bir YAML dosyası kullanarak çok konteynerli uygulamaları tanımlamak ve çalıştırmak için bir araç.
  • Dockerfile — Bir konteyner görüntüsünün tam olarak nasıl oluşturulduğunu tanımlayan bildirimsel bir derleme betiği.

Docker, konteynerleştirmeye yeni başlayanlar için doğal başlangıç noktasıdır ve geliştirme iş akışları ile tek ana bilgisayar dağıtımları için baskın araç olmaya devam etmektedir.

Kubernetes

Kubernetes (K8s), Google tarafından orijinal olarak geliştirilen açık kaynaklı bir konteyner orkestrasyon platformudur. Docker konteynerleri tek bir ana bilgisayarda yönetirken, Kubernetes konteynerleri makinelerin *kümeleri* arasında yönetir.

Kubernetes’in temel yetenekleri şunlardır:

  • Otomatik dağıtım ve geri alma — Uygulamanızın yeni sürümlerini sıfır kapalı kalma süresiyle dağıtın.
  • Yatay ölçekleme — CPU kullanımı veya özel ölçümlere göre konteyner örneklerini otomatik olarak ekleyin veya kaldırın.
  • Kendi kendini iyileştirme — Başarısız konteynerleri otomatik olarak yeniden başlatın ve sağlıklı düğümlerde yeniden planlayın.
  • Hizmet bulma ve yük dengeleme — Manuel yapılandırma olmadan konteynerlere trafiği otomatik olarak yönlendirin.
  • Gizli dizi ve yapılandırma yönetimi — API anahtarları ve veritabanı parolaları gibi hassas verileri güvenli bir şekilde depolayın.

Kubernetes, üretim sınıfı konteyner orkestrasyonu için endüstri standardıdır ve çoğu modern bulut-yerel mimarinin omurgasıdır.

OpenShift

Red Hat OpenShift, saf Kubernetes’in üzerine görüşlü bir araç katmanı ekleyen kurumsal bir Kubernetes dağıtımıdır. Şunları içerir:

  • Yerleşik bir CI/CD ardışık düzeni (Tekton ve Jenkins entegrasyonu)
  • Geliştirilmiş rol tabanlı erişim kontrolü (RBAC)
  • Geliştirici dostu bir web konsolu
  • Yerleşik görüntü kayıt defteri ve derleme araçları
  • Varsayılan olarak daha katı güvenlik ilkeleri (kök konteyner yok)

OpenShift, uyum ve güvenliğin çok önemli olduğu finans ve sağlık hizmetleri gibi düzenlenmiş endüstrilerde popülerdir.

Podman ve containerd

Podman, Docker komutlarıyla tamamen uyumlu olan ancak kök düzeyinde bir arka plan hizmeti gerektirmeyen daemon-siz bir konteyner motorudur. Güvenlik bilincine sahip ortamlarda giderek daha popüler hale gelmektedir.

containerd, Docker’ın kendisinin kapı altında kullandığı düşük seviyeli konteyner çalışma zamanıdır. Aynı zamanda Kubernetes için varsayılan çalışma zamanıdır ve Cloud Native Computing Foundation (CNCF) tarafından yönetilir.

Kontainerleştirmenin Temel Avantajları

Daha Hızlı Dağıtım ve Ölçeklendirme

Kontainerler milisaniye ile saniye içinde başlarken, sanal makinenin önyüklemesi dakika alır. Bu hız kontainerları şu durumlar için ideal kılar:

  • Yatay otomatik ölçeklendirme — Trafik artışını işlemek için uygulamanızın on yeni örneğini saniye içinde başlatın.
  • CI/CD boru hatları — Kod değişikliklerini saat yerine dakika içinde derleyin, test edin ve dağıtın.
  • Mavi-yeşil dağıtımlar — Uygulamanızın iki sürümünü aynı anda çalıştırın ve trafiği anında değiştirin.

Tutarlı, Yeniden Üretilebilir Ortamlar

Yapılandırma kayması — geliştirme, hazırlama ve üretim ortamları arasındaki kademeli farklılaşma — en yaygın üretim hatalarının kaynaklarından biridir. Kontainerler bu sorunu tamamen ortadan kaldırır. Kontainer görüntüsü değişmez olduğundan ve uygulamanın ihtiyaç duyduğu her şeyi içerdiğinden, ortam boru hattının her aşamasında aynıdır.

Üstün Kaynak Verimliliği

Kontainerler ana bilgisayar OS çekirdeğini paylaşır ve minimum yükü vardır. Aynı donanımda, eşdeğer VM tabanlı iş yükleriyle karşılaştırıldığında tipik olarak 5–10 kat daha fazla kontainerleştirilmiş iş yükü çalıştırabilirsiniz. Bu, doğrudan daha düşük altyapı maliyetlerine ve sunucu kaynaklarınızın daha iyi kullanılmasına dönüşür.

İyileştirilmiş Geliştirici Üretkenliği

Kontainerler şunları önemsiz hale getirir:

  • Yeni geliştiricileri işe almak (bir komut tüm yığını kurar)
  • Birden fazla bağımlılık sürümüne karşı aynı anda test etmek
  • Mikro hizmetleri izole etmek, böylece takımlar birbirlerine basmadan bağımsız olarak çalışabilir

İzolasyon Yoluyla Geliştirilmiş Güvenlik

Her kontainer kendi izole ad alanında çalışır. Bir kontainerdeki tehlikeye düşmüş bir uygulama, başka bir kontainerin dosya sistemine, işlemlerine veya ağına doğrudan erişemez. Uygun görüntü taraması, minimal temel görüntüler ve salt okunur dosya sistemleriyle birleştirildiğinde, kontainerler saldırı yüzeyinizi önemli ölçüde azaltabilir.

AlexHost Altyapısında Konteyner Çalıştırma

AlexHost, konteynerleştirilmiş iş yüklerini verimli ve güvenilir bir şekilde çalıştırmak için gereken altyapı temelini sağlar.

Konteynerler için VPS Barındırması

AlexHost’un VPS Barındırması planları Docker veya Kubernetes iş yüklerini çalıştırmak için mükemmel bir seçimdir. SSD destekli depolama, hızlı konteyner görüntüsü çekişi ve düşük gecikmeli I/O sağlarken, tam root erişimi konteyner çalışma zamanı yapılandırması üzerinde tam kontrol verir. Docker Engine’i dakikalar içinde kurabilir ve hemen konteynerleştirilmiş uygulamaları dağıtmaya başlayabilirsiniz.

Yönetilen kontrol paneli deneyimini tercih eden takımlar için, cPanel ile VPS ve diğer VPS Kontrol Panelleri sunucu yönetimini konteyner iş akışlarınızla birlikte basitleştirmek için mevcuttur.

Üretim İş Yükleri için Özel Sunucular

Yüksek trafikli üretim ortamları veya makine öğrenmesi çıkarımı, video işleme veya büyük ölçekli mikro hizmetler kümeleri gibi kaynak yoğun iş yükleri için, AlexHost’un Özel Sunucuları konteynerleştirilmiş uygulamaların talep ettiği ham işlem gücü ve I/O verimini sağlar. Özel bir sunucu ile tam donanım izolasyonu, öngörülebilir performans ve Kubernetes kümenizi tam olarak gerektiği şekilde yapılandırma özgürlüğüne sahip olursunuz.

AI ve ML Konteynerler için GPU Barındırması

Konteynerleştirilmiş iş yükleriniz AI model eğitimi, çıkarım boru hatları veya GPU hızlandırmalı veri işleme içeriyorsa, AlexHost’un GPU Barındırması konteynerlerinizin ihtiyaç duyduğu özel donanımı sunar. NVIDIA GPU’lu sunucular Docker ve NVIDIA Container Toolkit ile birleştirilerek, minimal yapılandırma ile CUDA hızlandırmalı iş yüklerini çalıştırabilir.

Konteynerleştirilmiş Uygulamalarınızı Güvence Altına Almak

Konteynerları üretimde çalıştırmak, maruz bıraktıkları hizmetleri güvence altına almak anlamına gelir. AlexHost’un SSL Sertifikaları konteynerleştirilmiş web uygulamalarınız, API’leriniz ve mikro hizmetler uç noktalarınıza giden trafiği şifrelemenize olanak tanır. Docker konteynerlerinizin önünde bir Nginx ters proxy çalıştırıyor olsanız da ya da bir Kubernetes Ingress denetleyicisinde TLS sonlandırıyor olsanız da, geçerli bir SSL sertifikası herhangi bir üretim dağıtımı için vazgeçilmezdir.

Hızlı Başlangıç: AlexHost VPS’de Docker

AlexHost Ubuntu VPS’de Docker’ı çalıştırmaya başlamak için minimal bir iş akışı:

# Update system packages
sudo apt update && sudo apt upgrade -y

# Install Docker Engine
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] 
  https://download.docker.com/linux/ubuntu 
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | 
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Verify installation
docker --version
docker run hello-world

# Add your user to the docker group (avoid using sudo for every command)
sudo usermod -aG docker $USER
newgrp docker

Docker kurulduktan sonra, Docker Hub’dan herhangi bir görüntü çekebilir ve konteynerleştirilmiş bir uygulamayı saniyeler içinde çalıştırabilirsiniz:

# Run an Nginx web server container
docker run -d -p 80:80 --name my-nginx nginx:latest

# Run a Node.js application container
docker run -d -p 3000:3000 --name my-app node:20-alpine

# List running containers
docker ps

# View container logs
docker logs my-nginx

Çok konteynerli uygulamalar için (örn. web uygulaması + veritabanı + önbellek), Docker Compose kullanın:

# docker-compose.yml
version: '3.9'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    depends_on:
      - app

  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgres://user:password@db:5432/mydb
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data

  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:

Tüm yığını tek bir komutla başlatın:

docker compose up -d

Sonuç

Konteynerler, geçtiğimiz on yılda yazılım dağıtımında en önemli değişimlerden birini temsil etmektedir. Linux namespaces’i izolasyon için, cgroups’u kaynak yönetimi için ve union file systems’i verimli depolama için kullanarak, konteynerler hafif, taşınabilir, tutarlı ve yüksek oranda ölçeklenebilir bir dağıtım modeli sunmaktadır.

Kişisel bir proje için tek bir Docker konteynerini çalıştırıyor olsanız veya üretimde Kubernetes ile yüzlerce mikro hizmeti yönetiyor olsanız, temel ilkeler aynı kalır: konteynerler, çalıştırdığınız her uygulama için temiz, tekrarlanabilir ve izole edilmiş bir ortam sağlar.

AlexHost’un altyapısı — VPS Hosting ve Dedicated Servers‘dan GPU Hosting‘e kadar — herhangi bir ölçekte konteynerleştirilmiş iş yüklerini desteklemek için özel olarak tasarlanmıştır. Konteynerlerinizi güvenli HTTPS trafiği için SSL Certificates ile eşleştirin ve 2025 ve sonrasında hızlı, güvenli ve geleceğe uygun uygulamalar dağıtmak için ihtiyacınız olan her şeye sahip olun.

Konteynerleştirmeye başlamaya hazır mısınız? AlexHost’un hosting planlarını keşfedin ve ilk Docker konteynerinizi bugün dağıtın.