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
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:
- Kalıcı veriyi ayırın: Veritabanı ve yüklenen dosyalar mutlaka volume’lerde tutulmalı ve yedeklenmelidir.
- Resmi ve güncel imajlar kullanın: Kaynağı belirsiz imajlar güvenlik riski taşır.
- Gizli bilgileri koda gömmeyin: Şifreler ve API anahtarları ortam değişkenleri veya gizli dosyalarla yönetilmelidir.
- Port açıklığını sınırlayın: Veritabanı gibi iç servisler internete açık olmamalıdır.
- 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:
- 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.
- Plan ve teklif: Hangi servislerin ayrı kapsayıcı olacağını, verilerin nasıl saklanıp yedekleneceğini ve sunucu gereksinimini yazılı hale getiririm.
- Kurulum ve test: Kapsayıcıları önce test ortamında çalıştırır, veri taşıma ve geri yükleme senaryolarını denerim.
- 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.
