Skip to main content
Yazılım Geliştirme

Docker Nedir? Konteyner Teknolojisi Başlangıç Rehberi

Mart 06, 2026 7 dk okuma 18 views Raw
Ayrıca mevcut: en
Docker konteyner teknolojisi ve yazılım geliştirme
İçindekiler

Docker Nedir?

Docker, uygulamaları konteyner adı verilen izole ortamlarda paketlemeyi, dağıtmayı ve çalıştırmayı sağlayan açık kaynaklı bir platformdur. 2013 yılında Solomon Hykes tarafından geliştirilen Docker, yazılım dünyasında devrim niteliğinde bir değişim yaratmıştır. Geleneksel sanal makinelerin aksine, Docker konteynerleri işletim sistemi çekirdeğini paylaşarak çok daha hafif ve hızlı bir çözüm sunar.

Günümüzde büyük ölçekli uygulamalardan mikro servislere kadar her alanda Docker kullanılmaktadır. Netflix, Spotify, Google ve Amazon gibi teknoloji devleri altyapılarının önemli bir bölümünü Docker konteynerleri üzerinde çalıştırmaktadır. Peki Docker tam olarak ne yapar ve neden bu kadar popüler hale gelmiştir?

Konteyner Teknolojisinin Temelleri

Konteyner teknolojisini anlamak için öncelikle geleneksel yazılım dağıtım yöntemlerinin sorunlarına bakmak gerekir. "Benim bilgisayarımda çalışıyordu" cümlesi yazılım geliştirme dünyasının en bilinen sorunlarından birini özetler. Farklı ortamlarda farklı kütüphane sürümleri, işletim sistemi yapılandırmaları ve bağımlılıklar uygulamaların beklendiği gibi çalışmamasına neden olabilir.

Konteynerler bu sorunu köklü bir şekilde çözer. Her konteyner, uygulamanın çalışması için gereken tüm bağımlılıkları, kütüphaneleri ve yapılandırma dosyalarını içerir. Bu sayede bir konteyner hangi ortamda çalıştırılırsa çalıştırılsın, aynı şekilde davranır.

Sanal Makine ve Konteyner Farkı

Sanal makineler ve konteynerler arasındaki temel fark, sanallaştırma katmanında yatmaktadır. Sanal makineler hypervisor üzerinde tam bir işletim sistemi çalıştırırken, konteynerler ana işletim sisteminin çekirdeğini paylaşır. Bu durum konteynerlere önemli avantajlar sağlar:

  • Konteynerler saniyeler içinde başlatılabilirken, sanal makineler dakikalar alabilir
  • Konteynerler megabayt düzeyinde yer kaplarken, sanal makineler gigabayt düzeyinde disk alanı gerektirir
  • Aynı donanım üzerinde çok daha fazla konteyner çalıştırılabilir
  • Konteynerler daha az sistem kaynağı tüketir
  • Konteynerler taşınabilirlik açısından çok daha esnektir

Docker Mimarisi ve Temel Bileşenler

Docker, istemci-sunucu mimarisini kullanan bir platform olarak tasarlanmıştır. Bu mimarinin temel bileşenlerini anlamak, Docker ile etkili bir şekilde çalışabilmek için kritik öneme sahiptir.

Docker Engine

Docker Engine, Docker platformunun kalbidir. Üç ana bileşenden oluşur: Docker Daemon (dockerd), REST API ve Docker CLI. Docker Daemon arka planda çalışarak imajları, konteynerleri, ağları ve depolama birimlerini yönetir. REST API, daemon ile iletişim kurmak için bir arayüz sağlar. Docker CLI ise kullanıcıların komut satırından Docker ile etkileşim kurmasını sağlar.

Docker Image (İmaj)

Docker imajı, bir konteynerin çalışması için gereken tüm dosyaları, kütüphaneleri ve yapılandırmaları içeren salt okunur bir şablondur. İmajlar katmanlı bir dosya sistemi kullanır ve her katman bir öncekinin üzerine eklenir. Bu katmanlı yapı sayesinde imajlar verimli bir şekilde depolanır ve paylaşılır.

Docker Container (Konteyner)

Konteyner, bir Docker imajının çalışan bir örneğidir. Her konteyner kendi dosya sistemi, ağ yapılandırması ve süreç alanına sahiptir. Konteynerler başlatılabilir, durdurulabilir, taşınabilir ve silinebilir. Bir imajdan birden fazla konteyner oluşturulabilir ve her biri birbirinden bağımsız çalışır.

Docker Registry

Docker Registry, Docker imajlarının depolandığı ve paylaşıldığı bir hizmettir. Docker Hub, en popüler genel registry olup milyonlarca hazır imaj barındırır. Kuruluşlar kendi özel registry sunucularını da kurabilir. Azure Container Registry, Amazon ECR ve Google Container Registry gibi bulut sağlayıcıları da kendi registry hizmetlerini sunmaktadır.

Dockerfile ile İmaj Oluşturma

Dockerfile, bir Docker imajının nasıl oluşturulacağını tanımlayan bir metin dosyasıdır. Her satır bir talimat içerir ve bu talimatlar sırasıyla çalıştırılarak imaj katmanları oluşturulur. Dockerfile yazımı, Docker kullanımının en temel becerilerinden biridir.

Temel Dockerfile Talimatları

Bir Dockerfile oluştururken kullanılan başlıca talimatlar şunlardır:

  • FROM: Temel imajı belirler ve her Dockerfile bu talimat ile başlamalıdır
  • RUN: İmaj oluşturma sırasında komutları çalıştırır
  • COPY: Yerel dosyaları imaja kopyalar
  • WORKDIR: Çalışma dizinini belirler
  • EXPOSE: Konteynerin dinleyeceği port numarasını belirtir
  • ENV: Ortam değişkenlerini tanımlar
  • CMD: Konteyner başlatıldığında çalıştırılacak varsayılan komutu belirler
  • ENTRYPOINT: Konteynerin ana sürecini tanımlar

Çok Aşamalı Derleme

Çok aşamalı derleme (multi-stage build), son imaj boyutunu küçültmek için kullanılan güçlü bir tekniktir. Bu yöntemde derleme araçları ve bağımlılıkları sadece derleme aşamasında kullanılır ve son imaja dahil edilmez. Örneğin bir .NET uygulamasında SDK imajı derleme için kullanılırken, çalışma zamanı imajı çok daha küçük olan runtime imajı üzerine kurulur.

Docker Compose ile Çoklu Konteyner Yönetimi

Gerçek dünya uygulamaları genellikle birden fazla servisten oluşur. Bir web uygulaması, veritabanı sunucusu, önbellek servisi ve mesaj kuyruğu gibi bileşenlere ihtiyaç duyabilir. Docker Compose, bu tür çoklu konteyner uygulamalarını tanımlamak ve yönetmek için kullanılan bir araçtır.

Docker Compose, YAML formatında bir yapılandırma dosyası kullanır. Bu dosyada tüm servisler, ağlar ve depolama birimleri tanımlanır. Tek bir komutla tüm uygulama yığını başlatılabilir veya durdurulabilir.

Docker Compose Dosya Yapısı

Bir docker-compose.yml dosyası temel olarak şu bölümlerden oluşur:

  • services: Uygulamayı oluşturan her bir konteynerin tanımı
  • volumes: Kalıcı veri depolama alanlarının tanımı
  • networks: Konteynerler arası iletişim ağlarının tanımı
  • secrets: Hassas verilerin güvenli yönetimi

Temel Docker Compose Komutları

Docker Compose ile günlük çalışmada en sık kullanılan komutlar şunlardır:

  1. docker compose up: Tüm servisleri başlatır ve oluşturur
  2. docker compose down: Tüm servisleri durdurur ve kaldırır
  3. docker compose logs: Servislerin günlük kayıtlarını görüntüler
  4. docker compose ps: Çalışan servislerin durumunu listeler
  5. docker compose build: Servislerin imajlarını yeniden derler
  6. docker compose exec: Çalışan bir konteyner içinde komut çalıştırır

Docker Ağ Yapılandırması

Docker, konteynerler arasında ve dış dünya ile iletişimi yönetmek için güçlü bir ağ altyapısı sunar. Docker kurulduğunda varsayılan olarak üç ağ sürücüsü oluşturulur: bridge, host ve none.

Bridge ağı, aynı ana bilgisayar üzerindeki konteynerler arasında iletişim sağlar. Host ağı, konteynerin ana bilgisayarın ağ yığınını doğrudan kullanmasını sağlar. None ise konteyneri tüm ağ bağlantılarından izole eder. Bunlara ek olarak overlay ağı, farklı ana bilgisayarlardaki konteynerler arasında iletişim kurmak için kullanılır.

Docker ile Veri Yönetimi

Konteynerler doğası gereği geçici yapılardır ve bir konteyner silindiğinde içindeki veriler de kaybolur. Kalıcı veri depolama için Docker iki ana yöntem sunar: volumes ve bind mounts.

Docker Volumes

Docker volumes, Docker tarafından yönetilen ve konteynerin yaşam döngüsünden bağımsız veri depolama alanlarıdır. Volumes kullanmanın başlıca avantajları şunlardır:

  • Konteynerler arasında veri paylaşımı kolaylaştırır
  • Yedekleme ve taşıma işlemleri basitleşir
  • Docker CLI ile kolayca yönetilebilir
  • Linux ve Windows konteynerlerinde aynı şekilde çalışır
  • Uzak depolama sürücüleri ile kullanılabilir

Docker Güvenlik En İyi Uygulamaları

Docker konteynerlerinin güvenliği, üretim ortamlarında kritik bir konudur. Güvenli bir Docker ortamı oluşturmak için dikkat edilmesi gereken temel prensipler vardır.

  • Konteynerleri root kullanıcısı yerine özel bir kullanıcı ile çalıştırın
  • Resmi ve güvenilir temel imajları tercih edin
  • İmajlarınızı düzenli olarak güvenlik taramalarından geçirin
  • Gereksiz paketleri ve araçları imajlarınıza dahil etmeyin
  • Hassas verileri ortam değişkenleri yerine Docker Secrets ile yönetin
  • İmajlarınızı imzalayarak bütünlüklerini doğrulayın
  • Konteyner kaynak kullanımını sınırlandırın

Docker Kullanım Senaryoları

Docker, yazılım geliştirme sürecinin birçok aşamasında değer katmaktadır. İşte en yaygın kullanım senaryoları:

Geliştirme Ortamı Standardizasyonu

Ekip üyelerinin farklı işletim sistemleri ve yapılandırmalar kullanması geliştirme sürecinde tutarsızlıklara yol açabilir. Docker ile tüm ekip aynı geliştirme ortamını paylaşabilir. Yeni bir ekip üyesi projeye katıldığında tek yapması gereken Docker Compose ile ortamı başlatmaktır.

CI/CD Pipeline Entegrasyonu

Docker, sürekli entegrasyon ve sürekli dağıtım süreçlerinin temel yapı taşlarından biridir. Her kod değişikliğinde otomatik olarak Docker imajı oluşturulabilir, testler konteyner ortamında çalıştırılabilir ve başarılı olan imajlar üretim ortamına dağıtılabilir.

Mikro Servis Mimarisi

Mikro servis mimarisi, uygulamaları küçük ve bağımsız servislere bölen bir yaklaşımdır. Docker, her mikro servisi kendi konteynerinde izole ederek bu mimariyi doğal olarak destekler. Her servis bağımsız olarak ölçeklenebilir, güncellenebilir ve dağıtılabilir.

Docker Ekosistemi ve Orkestrasyon

Tek bir sunucuda birkaç konteyner yönetmek Docker Compose ile kolayca yapılabilir. Ancak yüzlerce veya binlerce konteyneri birden fazla sunucu üzerinde yönetmek için orkestrasyon araçlarına ihtiyaç duyulur.

Kubernetes, en yaygın kullanılan konteyner orkestrasyon platformudur. Docker Swarm ise Docker'ın kendi yerleşik orkestrasyon çözümüdür. Bu araçlar otomatik ölçeklendirme, yük dengeleme, servis keşfi ve otomatik kurtarma gibi özellikler sunar.

Docker, yazılım geliştirme ve dağıtım süreçlerini kökten değiştiren bir teknolojidir. Konteyner teknolojisini öğrenmek, modern yazılım geliştirme pratiğinin vazgeçilmez bir parçası haline gelmiştir.

Sonuç ve Başlangıç Önerileri

Docker ve konteyner teknolojisi, modern yazılım geliştirmenin temel taşlarından biridir. Bu rehberde Docker'ın ne olduğunu, temel bileşenlerini, Dockerfile ve Docker Compose kullanımını, ağ yapılandırmasını, veri yönetimini ve güvenlik pratiklerini ele aldık.

Docker öğrenmeye başlamak için öncelikle Docker Desktop'ı bilgisayarınıza kurun ve basit uygulamalarla pratik yapın. Resmi Docker dokümantasyonu kapsamlı ve iyi organize edilmiş bir kaynaktır. Mevcut projelerinizi Docker ile konteynerleştirmeye çalışarak gerçek dünya deneyimi kazanabilirsiniz. Docker Hub üzerindeki hazır imajları inceleyerek farklı yaklaşımları keşfedebilirsiniz.

Konteyner teknolojisi sürekli gelişen bir alan olup, Docker bilgisi DevOps, bulut bilişim ve yazılım geliştirme kariyerinizde size önemli bir avantaj sağlayacaktır.

Bu yazıyı paylaş