Docker Nedir?
Docker, yazılımları konteynerler içinde paketleyip çalıştırmaya yarayan bir platformdur ve Docker, Inc. tarafından geliştirilir. Konteyner, bir uygulamayı çalışması için gereken her şeyle birlikte taşıyan, kendi içinde eksiksiz bir pakettir: doğru dil sürümü, kütüphaneler ve ayarlar içindedir. Konteynerler sanal makineler gibi her biri ayrı bir işletim sistemi çalıştırmaz, sunucunun işletim sistemi çekirdeğini paylaşır. Bu yüzden saniyeler içinde açılır ve çok daha az kaynak kullanır.
Dockerfile adlı kısa bir metin dosyası ortamın nasıl kurulacağını tarif eder. Docker bu tariften bir imaj üretir: saklanıp paylaşılabilen, salt okunur bir şablon. İmajlar Docker Hub gibi kayıt servislerinde (registry) paylaşılır; Node.js, PHP, PostgreSQL ve MySQL'in resmî imajları da orada yayımlanır. Bir imajın çalışan her kopyası bir konteynerdir. Docker Compose ise uygulama ve veritabanı gibi birden fazla konteyneri tek bir dosyadan birlikte başlatır; kalıcı depolama alanları (volume) da konteyner yenilense bile verinin korunmasını sağlar.
Docker, 2013'te o dönemki adı dotCloud olan şirket tarafından açık kaynak olarak yayımlandı; şirket aynı yıl adını Docker, Inc. olarak değiştirdi. Konteynerleri sunucuda çalıştıran Docker Engine bugün de açık kaynak ve ücretsiz. Geliştiricilerin kendi bilgisayarlarında kullandığı Docker Desktop ise bireyler, eğitim ve küçük işletmeler için ücretsiz; büyük şirketlerin ücretli abonelik alması gerekiyor. Konteynerler zamanla web uygulamalarını kurmanın ve çalıştırmanın yaygın bir yolu hâline geldi.
Docker'ı Nerede Kullanıyoruz?
Docker'a özellikle sunucu tarafı (back-end), veritabanı ya da birlikte çalışan birden fazla servisi olan projelerde başvuruyoruz. En çok şu işlerde kullanıyoruz:
Her Makinede Aynı Kurulum
Projenin ortamı dosyalarda tanımlı olduğu için her geliştirici projeyi tek komutla başlatıyor ve aynı Node.js, PHP ya da veritabanı sürümüyle çalışıyor. “Benim bilgisayarımda çalışıyordu” sorunu ortadan kalkıyor.
Sunucu Tarafı ve Veritabanları
Laravel ya da Node.js ile kurduğumuz özel sistemlerde uygulamayı, PostgreSQL ya da MySQL veritabanını ve yardımcı servisleri Docker Compose ile yan yana, her birini kendi konteynerinde çalıştırıyoruz. Veriler kalıcı depolama alanlarında güvenle saklanıyor.
Yayından Önce Test
Test ortamı, canlıya çıkacak imajın aynısıyla kuruluyor; testte onayladığınız şey, ziyaretçilerinizin göreceğinin ta kendisi oluyor. Güncellemeleri önce orada deniyoruz, asla doğrudan canlı sitede değil.
Teslim ve Sunucu Taşıma
Ortamın tamamı kodla birlikte taşındığı için projeyi ekibinize teslim etmek ya da başka bir sunucuya veya barındırma firmasına taşımak çok daha az emek istiyor. Projeyi nasıl çalıştıracağınızı açık bir kılavuzla anlatıyoruz.
Neden Docker?
Öngörülebilir Sonuç
Aynı imaj geliştirmede, testte ve canlıda çalışır. Yayından sonra ortaya çıkan pek çok hatanın kaynağı olan makineler arası sürüm farkları baştan devre dışı kalır.
Birbirinden Ayrı Projeler
Her uygulama kendi sürümleriyle kendi konteynerinde çalışır; aynı sunucudaki bir projeyi güncellemek diğerini etkilemez. Bu ayrım, her servisin erişebileceği alanı da sınırlar.
Tek Bir Firmaya Bağlı Kalmazsınız
Docker Engine açık kaynaktır ve projeniz az değişiklikle başka bir sunucuya ya da barındırma firmasına taşınabilir. Ne tek bir sağlayıcıya ne de bize bağımlı olursunuz.
Projenizde Nasıl İlerliyoruz?
Projenin başında ortamı bir Dockerfile ve bir Compose dosyasında tanımlıyoruz: dil sürümleri, veritabanı ve gereken ek servisler. Bütün geliştiriciler ve test ortamı bu aynı dosyaları kullanıyor; dosyalardaki her değişiklik de kodla birlikte Git'te kayıt altına alınıyor.
Teslimden ya da yayından önce imajı sıfırdan yeniden oluşturup sorunsuz kurulduğunu doğruluyor, yazılım sürümlerini sabitliyor, şifreleri ve API anahtarlarını imajın dışında tutuyor ve veritabanı yedeklerini kuruyoruz. Projenin nasıl başlatılacağını, güncelleneceğini ve taşınacağını da yazıya döküyoruz; böylece ekibiniz ya da ileride çalışacağınız bir geliştirici işi kolayca devralabiliyor.





