Docker

Docker, bir uygulamayı çalışması için gereken her şeyle birlikte paketlememizi sağlayan konteyner platformu. Böylece projeniz geliştiricilerimizin bilgisayarlarında, test ortamında ve canlı sunucuda aynı şekilde çalışıyor; teslim etmek ya da başka bir sunucuya taşımak da kolaylaşıyor.

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.

Web Tasarım ve Yazılım

Sıkça Sorulan Sorular

Yardım Merkezi
Sitemin Docker'a ihtiyacı var mı?

Her zaman değil. Sunucu tarafı olmayan basit bir site için gerekmeyebilir. Docker'ı çalıştırılacak bir uygulama, veritabanı ya da birden fazla servis olduğunda kullanıyor, ne zaman değer kattığını size açıkça söylüyoruz.

Docker'ın bir maliyeti var mı?

Konteynerleri sunucunuzda çalıştıran Docker Engine açık kaynak ve ücretsiz. Geliştiricilerin kendi bilgisayarlarında kullandığı Docker Desktop'ın büyük şirketler için ücretli planları var, ancak sunucuda buna gerek yok.

Projemi ileride başka bir sunucuya taşıyabilir miyim?

Evet, Docker'ı kullanmamızın başlıca nedenlerinden biri de bu. Ortam kodla birlikte taşınan dosyalarda tanımlı olduğu için proje yeni bir sunucuda az değişiklikle çalıştırılabilir; adımları da belgeliyoruz.

Docker siteyi yavaşlatır mı?

Linux sunucularda konteynerler, doğrudan kurulmuş yazılıma çok yakın hızda çalışır; çünkü ayrı bir işletim sistemi çalıştırmaz, sunucunun çekirdeğini paylaşır. Hızı asıl belirleyen kod, veritabanı ve önbellektir; bunları yayından önce ölçüyoruz.

Doğru Araç, Doğru Ekiple

Hangi araçların işinize yarayacağını birlikte belirleyelim; projenize uygun bir yol haritasıyla dönelim.