Docker Nedir? Uygulamaları Kapsayıcıda Çalıştırmak

Docker nedir, sanal makineden farkı ne ve işletmenize hangi somut faydaları sağlar? Kapsayıcı mantığını teknik olmayan bir dille, gerçek kullanım örnekleriyle anlattım.

İçindekiler
  1. Docker nedir? Kapsayıcı mantığını anlamak
  2. Docker ile sanal makine arasındaki fark
  3. Docker’ın işletmenize sağladığı faydalar
  4. Docker Compose: Birden fazla servisi birlikte yönetmek
  5. Gerçek bir projede Docker
  6. Docker kullanırken dikkat edilmesi gerekenler
  7. Bu işi nasıl birlikte yaparız?
  8. Sık sorulan sorular
  9. Sonuç

Geliştiriciniz “bende çalışıyordu” dediğinde ama aynı yazılım sunucuda hata verdiğinde, sorun çoğu zaman koddan değil ortam farkından kaynaklanır: farklı PHP sürümü, eksik bir kütüphane, başka bir veritabanı ayarı. Docker tam olarak bu sorunu çözmek için ortaya çıktı. Bu yazıda Docker nedir, nasıl çalışır ve bir işletme sahibi olarak size ne kazandırır, teknik ayrıntıya boğmadan anlatıyorum.

Docker nedir? Kapsayıcı mantığını anlamak

Docker, bir uygulamayı çalışması için gereken her şeyle birlikte (kod, çalışma ortamı, kütüphaneler, ayarlar) tek bir paket halinde çalıştırmayı sağlayan açık kaynak bir platformdur. Bu pakete “kapsayıcı” (container) denir.

Liman konteynerlerini düşünün. Konteynerin içinde ne olduğu fark etmeksizin gemi, tren ya da kamyon onu aynı şekilde taşır. Docker kapsayıcıları da böyledir: geliştiricinin bilgisayarında, test sunucusunda veya müşterinin mini bilgisayarında aynı şekilde çalışır. “Bende çalışıyordu” sorunu büyük ölçüde ortadan kalkar.

İmaj ve kapsayıcı arasındaki fark

Docker’da iki temel kavram vardır. İmaj, uygulamanın salt okunur kalıbıdır; bir tarif gibi düşünebilirsiniz. Kapsayıcı ise bu kalıptan çalıştırılan canlı örnektir. Aynı imajdan istediğiniz kadar kapsayıcı başlatabilirsiniz.

Docker ile sanal makine arasındaki fark

Kapsayıcılar sanal makinelere benzer ama daha hafiftir. Sanal makine, içinde tam bir işletim sistemi taşır; kapsayıcı ise ana makinenin çekirdeğini paylaşır ve yalnızca uygulamanın ihtiyacını içerir.

Özellik Sanal makine Docker kapsayıcısı
Boyut Genellikle gigabaytlarca Çoğunlukla megabaytlar düzeyinde
Başlama süresi Dakikalar sürebilir Genellikle saniyeler
İşletim sistemi Her biri kendi sistemini taşır Ana makinenin çekirdeğini paylaşır
Yalıtım Çok güçlü Güçlü, doğru ayarlandığında yeterli

Pratikte bu ikisi birbirinin rakibi değildir. Sık kullanılan bir yapı, bir VPS (sanal sunucu) kiralayıp üzerinde birden fazla Docker kapsayıcısı çalıştırmaktır.

Docker’ın işletmenize sağladığı faydalar

Docker geliştiricinin işini kolaylaştıran bir araç gibi görünse de sonuçları doğrudan işletmeye yansır:

  • Tutarlılık: Test edilen ortam ile canlı ortam aynı olduğu için canlıya çıkışta sürpriz hatalar azalır.
  • Kolay taşıma: Sunucu değiştirmeniz gerektiğinde uygulamayı yeniden kurmak yerine kapsayıcıları yeni makinede başlatmak yeterli olur.
  • Yalıtım: Aynı sunucudaki bir uygulamanın güncellemesi veya hatası diğerini etkilemez.
  • Hızlı geri dönüş: Yeni sürümde sorun çıkarsa önceki imaja dönmek dakikalar alır.
  • Ölçeklenme: Yük arttığında aynı servisten birkaç kopya çalıştırmak mümkündür.
  • Yerel kurulumlar: İnternetten bağımsız çalışması gereken yazılımlar işletmedeki küçük bir bilgisayara kolayca kurulabilir.

Örnek senaryo: internetsiz çalışan adisyon

Bir kafede adisyon yazılımının internet kesildiğinde de çalışması gerekir. Bu yüzden geliştirdiğim kafe ve restoran adisyon programı işletmedeki mini bilgisayarda Docker ile yerel sunucu olarak çalışıyor. Kurulum, güncelleme ve yedekleme her işletmede aynı adımlarla yapılabiliyor.

Docker Compose: Birden fazla servisi birlikte yönetmek

Gerçek bir uygulama genellikle tek parçadan oluşmaz: bir web uygulaması, bir veritabanı, belki bir önbellek servisi. Docker Compose, bu servisleri tek bir yapılandırma dosyasıyla tanımlayıp birlikte başlatmayı sağlar. Basit bir örnek şöyle görünür:

services:
  web:
    image: wordpress:latest
    ports:
      - "8080:80"
    depends_on:
      - db
  db:
    image: mariadb:latest
    volumes:
      - db_verisi:/var/lib/mysql
volumes:
  db_verisi:

Bu dosya, bir WordPress kapsayıcısı ile bir veritabanı kapsayıcısını birbirine bağlı olarak tanımlar. Gerçek bir kurulumda şifreler, ortam değişkenleri ve sabit sürüm numaraları da eklenir. Veritabanının kalıcı bir alana (volume) yazıldığına dikkat edin; kapsayıcı silinse bile veri kaybolmaz.

Gerçek bir projede Docker

Birden fazla bileşeni olan projelerde Docker’ın değeri daha net görülür. WM Health İstanbul tele-sağlık platformunda doktor seçimi, takvimden randevu, online ödeme ve tarayıcıda görüntülü görüşme gibi birbirinden farklı servisler bulunuyor. Bu servislerin her biri kendi kapsayıcısında çalıştığı için birini güncellemek diğerlerini etkilemiyor ve sunucu altyapısı düzenli kalıyor.

Kapsayıcılar dış dünyaya genellikle doğrudan açılmaz; önlerine bir yönlendirici konur. Bunun nasıl yapıldığını Nginx reverse proxy yazısında anlattım.

Docker kullanırken dikkat edilmesi gerekenler

Docker güçlü bir araçtır ama yanlış kullanıldığında yeni sorunlar da yaratabilir:

  1. Kalıcı veriyi ayırın: Veritabanı ve yüklenen dosyalar mutlaka volume’lerde tutulmalı ve yedeklenmelidir.
  2. Resmi ve güncel imajlar kullanın: Kaynağı belirsiz imajlar güvenlik riski taşır.
  3. Gizli bilgileri koda gömmeyin: Şifreler ve API anahtarları ortam değişkenleri veya gizli dosyalarla yönetilmelidir.
  4. Port açıklığını sınırlayın: Veritabanı gibi iç servisler internete açık olmamalıdır.
  5. Kaynak sınırları koyun: Bir kapsayıcının tüm belleği tüketip diğerlerini durdurmasını engelleyin.

Bir de şunu belirtmek gerekir: Docker her proje için şart değildir. Paylaşımlı hostingde çalışan küçük bir tanıtım sitesine kapsayıcı mimarisi eklemek, getirdiği faydadan çok karmaşıklık yaratır. Karar verirken uygulamanın kaç bileşenden oluştuğuna, ne sıklıkla güncellendiğine ve kimin bakım yapacağına bakmak en sağlıklı yoldur.

Bu işi nasıl birlikte yaparız?

Mevcut yazılımınızı Docker’a taşımak ya da yeni bir projeyi baştan kapsayıcı mimarisiyle kurmak istiyorsanız süreç şöyle ilerler:

  1. Yapıyı anlamak: Uygulamanızın hangi bileşenlerden oluştuğunu, nerede çalıştığını ve hangi verilerin kritik olduğunu birlikte çıkarırız.
  2. Plan ve teklif: Hangi servislerin ayrı kapsayıcı olacağını, verilerin nasıl saklanıp yedekleneceğini ve sunucu gereksinimini yazılı hale getiririm.
  3. Kurulum ve test: Kapsayıcıları önce test ortamında çalıştırır, veri taşıma ve geri yükleme senaryolarını denerim.
  4. Teslim ve belgeleme: Canlıya alır, güncelleme ve yedekleme adımlarını sizin ya da ekibinizin anlayacağı şekilde belgelerim.

Projenizi değerlendirmek için iletişim sayfasından kısa bir not bırakabilirsiniz.

Sık sorulan sorular

Docker nedir, ücretli bir yazılım mı?

Docker’ın çekirdek motoru açık kaynaktır ve sunucularda ücretsiz kullanılabilir. Masaüstü sürümü ve bazı kurumsal hizmetler için lisans koşulları bulunur; güncel şartları Docker’ın kendi sitesinden kontrol etmenizi öneririm.

WordPress sitesi için Docker gerekli mi?

Tek bir WordPress sitesi için zorunlu değildir. Ancak aynı sunucuda birden fazla site veya uygulama çalışacaksa, ya da test ve canlı ortamın birebir aynı olması isteniyorsa Docker ciddi kolaylık sağlar.

Docker kullanmak siteyi yavaşlatır mı?

Doğru yapılandırıldığında kapsayıcıların performans kaybı çok düşüktür, çünkü sanal makine gibi ayrı bir işletim sistemi çalıştırmazlar.

Kapsayıcı silinirse verilerim kaybolur mu?

Veriler volume adı verilen kalıcı alanlarda tutuluyorsa kaybolmaz. Bu yüzden kurulumda veritabanı ve dosya alanlarının doğru tanımlanması ve düzenli yedeklenmesi şarttır.

Sonuç

Docker nedir sorusunun özü şudur: uygulamanızı her yerde aynı şekilde çalışan, taşınabilir ve yalıtılmış paketler halinde yönetmek. Doğru kurulduğunda bakım kolaylaşır, canlıya çıkış güvenli hale gelir. Projenizde Docker’dan nasıl yararlanabileceğinizi konuşmak isterseniz bana yazabilirsiniz.