Docker Nedir? Konteyner Teknolojisine Giriş

Docker Nedir? Konteyner Teknolojisine Giriş

Docker nedir sorusunun en kısa yanıtı şudur: Docker, uygulamaları tüm bağımlılıklarıyla birlikte konteyner adı verilen taşınabilir, izole paketler içinde çalıştırmanızı sağlayan açık kaynaklı bir platformdur. 2013 yılında yayımlandığından beri "benim makinemde çalışıyordu" sorununu büyük ölçüde tarihe gömdü: konteyner haline getirilen bir uygulama, geliştiricinin dizüstü bilgisayarında da üretim sunucusunda da aynı şekilde çalışır.

Docker Nedir ve Sanal Makineden Farkı Ne?

Konteynerler sıklıkla sanal makinelerle (VM) karıştırılır, ancak çalışma prensipleri farklıdır:

  • Sanal makine, hypervisor üzerinde tam bir işletim sistemi (çekirdek dahil) çalıştırır. Her VM gigabaytlarca yer kaplar ve dakikalar içinde açılır.
  • Konteyner, ana işletim sisteminin çekirdeğini paylaşır; yalnızca uygulamayı ve bağımlılıklarını izole eder. Megabaytlarla ölçülür ve saniyeler içinde başlar.
  • Benzetme: Sanal makine müstakil bir ev gibidir; her şeyi (tesisat, elektrik, temel) kendine aittir. Konteyner ise apartman dairesidir; binanın altyapısını paylaşır ama kapısı ve yaşam alanı ayrıdır.

    Bu fark sayesinde tek bir sunucuda onlarca konteyner sorunsuz çalışabilir. İzolasyon, Linux çekirdeğinin namespace ve cgroups özellikleriyle sağlanır. Tam donanım izolasyonu veya farklı bir işletim sistemi çekirdeği gerekiyorsa VM hâlâ doğru tercihtir; Windows ve macOS üzerinde Docker Desktop da aslında konteynerleri hafif bir Linux sanal makinesi içinde çalıştırır.

    İmaj ve Konteyner Kavramları

    Docker'ın iki temel yapı taşı vardır:

  • İmaj (image): Uygulamanın, çalışma zamanının ve bağımlılıkların salt okunur şablonu. Katmanlardan oluşur ve bir kez oluşturulduktan sonra değişmez.
  • Konteyner (container): Bir imajdan başlatılan çalışan örnek. Aynı imajdan istediğiniz kadar konteyner ayağa kaldırabilirsiniz.
  • Nesne yönelimli programlama biliyorsanız şu benzetme oturur: imaj sınıf, konteyner o sınıftan üretilmiş nesne gibidir. Hazır imajlar Docker Hub deposunda barınır; nginx, postgres, python, node gibi resmi imajlar buradan çekilir.

    Temel Komutlar: run, ps, stop

    Docker'ı kurduktan sonra (kurulum adımları için docs.docker.com adresine bakın) ilk konteynerinizi çalıştırın:

    docker run hello-world
    

    Bu komut imajı Docker Hub'dan indirir, konteyneri başlatır ve doğrulama mesajı yazdırır. Daha gerçekçi bir örnek olarak Nginx web sunucusunu çalıştıralım:

    docker run -d -p 8080:80 --name web nginx
    

    Parametrelerin anlamı:

  • -d: Konteyneri arka planda (detached) çalıştırır.
  • -p 8080:80: Bilgisayarınızın 8080 portunu konteynerin 80 portuna bağlar; tarayıcıda http://localhost:8080 adresini açtığınızda Nginx karşılar.
  • --name web: Konteynere okunabilir bir isim verir.
  • Günlük yönetim komutları:

    docker ps              # çalışan konteynerleri listele
    docker ps -a           # durmuş olanlar dahil hepsini listele
    docker logs web        # konteynerin loglarını göster
    docker exec -it web bash  # konteynerin içine terminal aç
    docker stop web        # konteyneri durdur
    docker rm web          # konteyneri sil
    docker images          # indirilen imajları listele
    

    Dockerfile ile Kendi İmajınızı Oluşturma

    Kendi uygulamanızı paketlemek için proje köküne Dockerfile adında bir dosya yazarsınız. Basit bir Python uygulaması için örnek:

    FROM python:3.12-slim
    
    WORKDIR /app
    
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    
    COPY . .
    
    EXPOSE 5000
    CMD ["python", "app.py"]
    

    Satır satır ne olduğuna bakalım:

  • FROM: Temel alınacak imajı belirler; burada hafif bir Python 3.12 imajı.
  • WORKDIR: Konteyner içindeki çalışma dizinini ayarlar.
  • COPY ve RUN: Önce bağımlılık listesi kopyalanıp kurulur, sonra kaynak kod kopyalanır. Bu sıralama, Docker'ın katman önbelleğini verimli kullanmasını sağlar: kod değiştiğinde bağımlılıklar yeniden kurulmaz.
  • EXPOSE: Uygulamanın dinlediği portu belgeler.
  • CMD: Konteyner başladığında çalışacak komutu tanımlar.
  • İmajı derleyip çalıştırmak için:

    docker build -t benim-uygulamam:1.0 .
    docker run -d -p 5000:5000 benim-uygulamam:1.0
    

    -t parametresi imaja isim ve etiket verir; sondaki nokta, derleme bağlamının bulunduğunuz dizin olduğunu söyler.

    Docker Compose ile Çoklu Konteyner

    Gerçek uygulamalar genellikle birden fazla servisten oluşur: web uygulaması, veritabanı, önbellek... Docker Compose, hepsini tek bir compose.yaml dosyasında tanımlamanızı sağlar:

    services:
      web:
        build: .
        ports:
          - "5000:5000"
        depends_on:
          - db
      db:
        image: postgres:16
        environment:
          POSTGRES_PASSWORD: gizli_parola
        volumes:
          - db-verisi:/var/lib/postgresql/data
    
    volumes:
      db-verisi:
    

    Tüm sistemi tek komutla ayağa kaldırırsınız:

    docker compose up -d    # servisleri başlat
    docker compose logs -f  # logları izle
    docker compose down     # hepsini durdur ve kaldır
    

    Buradaki volumes tanımı önemlidir: konteynerler silinince içlerindeki veri de gider; kalıcı olması gereken veritabanı dosyaları volume adı verilen yönetilen alanlarda saklanır.

    Temizlik ve Pratik İpuçları

    Docker kullandıkça diskte kullanılmayan imajlar, durmuş konteynerler ve sahipsiz volume'lar birikir. Düzenli temizlik için şu komutlar işinizi görür:

    docker system df       # Docker'ın ne kadar disk kullandığını göster
    docker container prune # durmuş konteynerleri sil
    docker image prune -a  # kullanılmayan tüm imajları sil
    docker system prune    # hepsini tek seferde temizle (onay ister)
    

    Birkaç pratik ipucu daha:

  • İmaj etiketlerinde latest yerine sürüm numarası kullanın (postgres:16 gibi); latest her zaman aynı imajı işaret etmez ve sürprizlere yol açar.
  • .dockerignore dosyası oluşturup node_modules, .git gibi klasörleri derleme bağlamından çıkarın; build süresi belirgin şekilde kısalır.
  • Mümkün olduğunca slim veya alpine tabanlı küçük imajları tercih edin.

Nereden Devam Etmeli?

Docker'ı öğrenmenin en iyi yolu kendi projelerinizden birini konteyner haline getirmektir. Resmi dokümantasyondaki Get Started serisi, bu yazıda değindiğimiz kavramları uygulamalı atölyelerle pekiştirir. Konteyner sayınız arttığında Kubernetes gibi orkestrasyon araçları gündeme gelir; ancak oraya geçmeden önce imaj, konteyner, Dockerfile ve Compose dörtlüsüne hakim olmak sağlam bir temel oluşturur.

Sıkça Sorulan Sorular

Docker ücretsiz mi?
Docker Engine açık kaynaklıdır ve ücretsizdir. Docker Desktop ise bireysel kullanım, eğitim ve küçük işletmeler (250 çalışan ve 10 milyon dolar ciro altı) için ücretsiz, daha büyük şirketler için ücretli aboneliğe tabidir.
İmaj ile konteyner arasındaki fark nedir?
İmaj, uygulamanın ve bağımlılıklarının salt okunur şablonudur; konteyner ise bu şablondan başlatılan çalışan örnektir. Tek bir imajdan birbirinden bağımsız birçok konteyner çalıştırılabilir.
Docker sanal makinenin yerini tutar mı?
Her zaman değil. Konteynerler ana işletim sisteminin çekirdeğini paylaştığı için daha hafiftir; ancak farklı bir işletim sistemi çekirdeği çalıştırmanız veya tam donanım izolasyonu gerekiyorsa sanal makine gerekir.
WxDigitals
WxDigitals

WebTeknoloji.net editör ekibi; web geliştirme, SEO, hosting ve yapay zeka alanlarında üretilen içeriklerin araştırma, test ve yayın süreçlerini yürütür. Tüm incelemeler gerçek kullanım deneyimine, karşılaştırmalar ise resmi dokümantasyon ve güncel fiyatlandırma sayfalarına dayanır.

Bu içeriği faydalı bulduysanız…

Haftalık teknoloji & SEO rehberlerimize katılın, 38 maddelik Teknik SEO Kontrol Listesi PDF'ini hediye olarak hemen indirin.

Yorumlar (0)

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Yorum Yazın