Mart 2013’te PyCon’da açık kaynaklı bir proje olarak tanıtıan Docker, kapsayıcılara odaklanmadan önce 2008 yılında DotCloud adlı bir Hizmet olarak Platform çözümü olarak başladı. Ancak birçok geliştirici, özellikle DotCloud’un altında yatan teknoloji olan yazılım kapsayıcılarına büyük ilgi gösterdi.
Docker şu anda birçok geliştirme ekibinin dikkatini çeken en popüler konteyner tabanlı platformlardan biridir. Güvenilirliği, performansı ve işlevselliği nedeniyle giderek daha fazla şirket Docker’ı tercih etmektedir.
İşte tam da bu noktada, bu açık kaynaklı konteynerleştirme yazılımını ve onu destekleyen temel bileşenleri anlamanız önemlidir.
Docker Nedir?
Docker, kapsayıcı (container) adı verilen hafif sanallaştırılmış ortamlarda uygulamalar geliştirmek, dağıtmak ve yönetmek için kullanılan açık kaynaklı bir kapsayıcı platformudur.
Esas olarak, farklı ortamlarda verimli bir şekilde çalışan dağıtılmış uygulamalar geliştirmek için bir yazılım geliştirme platformu olarak kullanılır. Yazılım sistemini bilinmezlikten kurtardığı için geliştiricilerin uyumluluk sorunları hakkında endişelenmesine gerek kalmaz. Uygulamaları yalıtılmış ortamlara (kapsayıcılara) paketlemek; uygulamaları geliştirmeyi, dağıtmayı, bakımını yapmayı ve kullanmayı da kolaylaştırır.
Docker, uygulamaları depolamak için kapsayıcı oluşturmak için sanallaştırmayı kullandığından, konsept sanal makinelere benzer görünebilir. Her ikisi de yazılım geliştirme için kullanılan yalıtılmış sanal ortamları temsil etse de kapsayıcılar ve VM’ler arasında önemli farklılıklar vardır. En önemli ayrım, Docker kapsayıcılarının sanal makinelerden daha hafif, daha hızlı ve kaynak açısından daha verimli olmasıdır.
DocKonteyner (Container) Teknolojisi Nedir?
Docker kapsayıcıları, çalışan uygulamalar için hafif sanallaştırılmış çalışma zamanı ortamlarıdır. Her kapsayıcı, belirli bir uygulamayı çalıştırmak için gereken kod, sistem araçları, çalışma zamanı, kitaplıklar, bağımlılıklar ve yapılandırma dosyalarını içeren bir yazılım paketini temsil eder. Ana bilgisayardan ve ana bilgisayar üzerinde çalışan diğer örneklerden bağımsız ve yalıtılmıştır.
Konteynerler Docker görüntülerine dayanır. Docker Engine’de bir görüntü çalıştırarak bir kapsayıcı oluşturabilirsiniz. Bunlar en yaygın Docker terimleri olduğundan, Docker görüntüleri ile Docker kapsayıcıları arasındaki farkı anladığınızdan emin olmanız gerekir.
Aynı donanım birden çok kapsayıcıyı barındırabilir. Sanal makinelerin aksine, kapsayıcılar uygulama düzeyinde sanallaştırılır. Bu nedenle, işletim sistemi çekirdeğini ana bilgisayarla paylaşırlar ve bunun üzerinde bir işletim sistemini sanallaştırır. Bu, daha az kaynak kullandığınız ve yapılandırması hızlı ve kolay olan hafif sanal ortamları sürdüreceğiniz anlamına gelir.
Sistemden bağımsız olmanın yanı sıra, kapsayıcıların başlatılması, yapılandırılması, eklenmesi, durdurulması ve kaldırılması hızlı ve kolaydır. Geliştiriciler, bunun performansını etkilemeyeceğini bilerek aynı uygulama üzerinde farklı ortamlarda çalışabilir. Ek olarak, veri hacimlerini kullanarak kapsayıcılar arasında veri paylaşabilir.
Bulutistan Docker hizmetinin detaylarına ulaşmak için tıklayınız.
Docker Ne İçin Kullanılır?
Docker aşağıdakiler için kullanılır:
- Daha az kaynakta birden çok iş yükü çalıştırma.
- Yalıtım ve ayırma uygulamaları.
- Geliştirme ve yayın döngüleri arasında tutarlılığı sağlamak için ortamları standart hale getirmek.
- Geliştirme yaşam döngüsünü kolaylaştırma ve CI/CD iş akışlarını destekleme.
- Çoklu bulut platformlarında çalışabilen son derece taşınabilir iş yükleri geliştirmek.
Ek olarak, aşağıdaki şekillerde kullanılır:
- Sanal makinelere uygun maliyetli bir alternatif.
- Bir uygulama için bir sürüm kontrol sistemi.
Docker Temel Bileşenleri
Docker, her biri platformda önemli bir rol oynayan birden fazla bileşenden oluşur.
1. Docker Engine
Docker Engine (DE), ana makineye kurulur ve Docker sisteminin çekirdeğini temsil eder. Bir çalışma zamanı sistemi, kapsayıcıları oluşturan ve yöneten temeldeki istemci-sunucu teknolojisidir.
Docker Engine üç bileşenden oluşur:
Sunucu: Kapsayıcıların oluşturulmasından ve yönetilmesinden sorumlu olan Docker arka plan programı (dockerd).
Rest API: Programlar ve Docker arasında iletişim kurar ve dockerd’a ne yapması gerektiğini söyler.
Komut Satırı Arabirimi (CLI): Docker komutlarını çalıştırmak için kullanılır.
2. Docker Görüntüleri (Docker Images)
Docker görüntüleri, kapsayıcı oluşturmak için kullanılan şablonlardır. Sanal makineler için anlık görüntüler gibi, Docker görüntüleri değişmez kaynak kodu, kitaplıkları, bağımlılıkları, araçları ve bir uygulamayı çalıştırmak için gerekli diğer dosyalardan oluşan salt okunur dosyalardır. Her görüntü, belirli bir Docker görüntüsü oluşturmak için özel yönergeler içeren bir Docker dosyasından oluşturulur.
Dockerfiles’den Docker görüntüleri oluşturma konusunda uzmanlaştıktan sonra, görüntüleri ve özel kapsayıcıları daha basit ve daha hızlı oluşturabilirsiniz.
Docker, derlemelerini hızlandırmanın yanı sıra, görüntüler yeniden kullanılabilirliği artırmak ve disk kullanımını azaltmak için de kullanışlıdır.
Kapsayıcılarınızı hafif ve hızlı tutmak istediğiniz için küçük görüntüleri korumak çok önemlidir. Daha hafif bir görüntü tabanı kullanmak, gereksiz katmanlardan kaçınmak ve .dockerignore dosyasını kullanmak, Docker görüntülerinizi küçük tutmanın sadece birkaç yoludur.
3. Dockerfile
Dockerfile, Docker görüntüsünün nasıl oluşturulacağına ilişkin bir dizi talimattan oluşan bir komut dosyasıdır. Bu yönergeler, işletim sistemini, dilleri, ortam değişkenlerini, dosya konumlarını, ağ bağlantı noktalarını ve görüntüyü çalıştırmak için gereken diğer bileşenleri belirtmeyi içerir. Dosyadaki tüm komutlar otomatik olarak gruplanır ve yürütülür.
Bir görüntünün birden çok katmanı vardır. Kapsayıcı oluşturmak için bir Docker görüntüsü çalıştırdığınızda, yeni bir okuma-yazma katmanı eklenir. Bu bazen konteyner katmanı olarak adlandırılır. Ek katman, gelecekte kullanmak üzere yeni bir Docker görüntüsü oluşturmayı taahhüt edebileceğiniz temel görüntüde değişiklik yapmanıza olanak tanır.
4. Docker Hub
Docker Hub, Docker tarafından sağlanan en büyük bulut tabanlı konteyner görüntüleri deposudur. Açık kaynaklı projeler, yazılım satıcıları ve Docker topluluğu tarafından oluşturulan 100.000’den fazla görüntüyü kullanıma sunar.
Platform, uygulamalarınızı herhangi bir yere hızlı bir şekilde göndermenize, ekip arkadaşlarınızla işbirliği yapmanıza ve bir geliştirme hattına daha hızlı entegrasyon için derlemeleri otomatikleştirmenize olanak tanır.
GitHub gibi, geliştiriciler konteyner görüntülerini Docker Hub’dan alır ve bunları herkese açık mı yoksa özel mi tutacaklarına karar verir.
5. Docker Volumes
Bu yardımcı araç, kullanıcıların verileri kaydetmesine, kapsayıcılar arasında paylaşmasına ve yenilerine bağlamasına olanak tanır. Docker volumes, ana bilgisayarda depolandıkları için kapsayıcı yaşam döngüsünden bağımsızdır.
Bir kapsayıcıyı başlatırken bir Docker volumes oluşturmanın ve bağlamanın farklı yolları vardır.
6. Docker Compose
Docker Compose, aynı anda birden fazla kapsayıcıyı çalıştırırken ve yönetirken süreci basitleştirmek için tasarlanmış kullanışlı bir araçtır. Birlikte çalışmak için gereken birden çok kapsayıcıyı dizer ve bunları tek bir koordineli komutla kontrol eder.
Docker Compose, bir komutla kapsayıcıları başlatmak, yürütmek, iletişim kurmak ve kapatmak için kullanılır. Bu, uygulamanın hizmetlerini yapılandıran bir YAML dosyası kullanılarak yapılır.
7. Docker Masaüstü (Docker Desktop)
Eskiden Windows için Docker ve Mac için Docker olarak bilinen Docker Desktop, birkaç dakika içinde Windows ve Mac’te kapsayıcıları oluşturmaya ve çalıştırmaya başlamanızı sağlayan bir uygulamadır. Tüm Docker geliştirme ortamını kurmanın basit bir yoludur. Docker Engine, Docker Compose, Docker CLI istemcisi, Docker Content Trust, Kubernetes ve Credential Helper’ı içerir.
Araç, herhangi bir bulut platformunda birden çok dilde ve framework’te kapsayıcılı uygulamalar ve mikro hizmetler oluşturmak ve paylaşmak için kullanılır.
Docker’ın Avantajları Nelerdir?
1. Tutarlılık
Docker, uygulamanızın birden çok ortamda aynı şekilde çalışmasını sağlar. Farklı makinelerde ve işletim sistemlerinde çalışan geliştiriciler, aynı uygulama üzerinde ortam sorunları olmadan birlikte çalışabilirler.
2. Otomasyon
Platform, manuel müdahale olmadan sıkıcı, tekrarlayan görevleri otomatikleştirmenize ve işleri zamanlamanıza olanak tanır.
3. Daha hızlı dağıtımlar
Kapsayıcılar işletim sistemini sanallaştırdığından, kapsayıcı örnekleri başlatılırken önyükleme süresi yoktur. Bu nedenle, dağıtımları birkaç saniye içinde yapabilirsiniz. Ayrıca, yeni uygulamalar oluşturmak için mevcut kapsayıcıları da paylaşabilirsiniz.
4. CI/CD desteği
Docker, dağıtımları hızlandırdığı, güncellemeleri basitleştirdiği ve ekip arkadaşlarının birlikte verimli çalışmasına izin verdiği için CI/CD uygulamalarıyla iyi çalışır.
5. Geri almalar ve görüntü sürüm kontrolü
Bir kapsayıcı, her biri tabandaki değişiklikleri ve güncellemeleri temsil eden birden çok katmana sahip olabilen bir Docker görüntüsüne dayanır. Bu özellik yalnızca derleme sürecini hızlandırmakla kalmaz, aynı zamanda kapsayıcı üzerinde sürüm kontrolü sağlar. Bu, ihtiyaç duyulduğunda geliştiricilerin önceki bir sürüme geri dönmelerini sağlar.
6. Modülerlik
Konteynerler bağımsız ve yalıtılmış sanal ortamlardır. Çok kapsayıcılı bir uygulamada, her kapsayıcının belirli bir işlevi vardır. Geliştiriciler, uygulamayı ayırarak, uygulamanın tamamını kaldırmadan belirli bir bölüm üzerinde kolayca çalışabilir.
7. Kaynak ve maliyet etkinliği
Container’lar konuk işletim sistemleri içermediğinden VM’lerden çok daha hafif ve küçüktür. Veri hacimleri ve görüntüler sayesinde daha az bellek kaplar ve bileşenleri yeniden kullanırlar. Ayrıca kapsayıcılar, tamamen bulut üzerinde çalışabildikleri için büyük fiziksel sunucular gerektirmez.
Kubernetes Nedir?
Kubernetes, mikro hizmeti veya tek uygulamayı destekleyen kapsayıcıları bir bölmede gruplayan güçlü bir kapsayıcı yönetim aracıdır. Genellikle, kapsayıcılı uygulamaları otomatikleştirmek ve yönetmek için oluşturulmuş, hataya dayanıklı, ölçeklenebilir bir platform oluşturmak için kullanılan açık kaynaklı bir araç takımıdır.
Kubernetes, kapsayıcılı uygulamaları tek bir sunucuda çalıştırmak yerine bunları bir grup makinede yayınlar. Kubernetes’te çalışan uygulamalar, basit bir şekilde eşleştirilmiş bir konteyner düzenlemesi içerebilse de, tek bir birim gibi davranır.
Bölmeler, kapsayıcılar ve hizmetler; sanal veya gerçek olan bir veya daha fazla bilgisayar kümesinde barındırılır. Kubernetes, birkaç bilgisayar veya düğüm üzerinde çalışır (Kubernetes dilinde bilindiği gibi).
Bu, Kubernetes kümesi olarak da bilinir. Bir Kubernetes kümesinin potansiyelini belirli bir gereksinimi karşılayacak şekilde genişletmek için belirli kaynaklar da oluşturabilirsiniz.
Kubernetes, aşağıdaki bilgi işlem özelliklerini kapsayıcılara ekleyebilir:
Otomatik ölçeklendirme: Kubernetes, yapılması gerektiğinde bölmeleri başlatarak ve durdurarak değişen görevlere otomatik olarak uyum sağlayabilir.
Kullanıma Sunma: Kubernetes, otomatik kullanıma alma ve geri alma işlemlerini destekler.
Bölmeler: Bölmeler, bellek, CPU, depolama ve ağ gibi kaynakları paylaşan mantıksal kapsayıcı gruplarıdır.
Yük Dengeleme: İstekler, mevcut olan bölmelere tahsis edilir.
Depolama Düzenlemesi: Bir kullanıcı, ağ depolama sistemini yerel bir dosya sistemi olarak bağlayabilir.
Configuration management and secrets: Bu özellik, şifreler ve anahtarlar gibi tüm sınıflandırılmış bilgilerin KSecrets in Kubernetes adlı bir modül altında tutulmasına izin verir. Secrets in Kubernetes, genellikle görüntüyü yeniden yapılandırmadan uygulamayı yapılandırırken kullanılır.
Kubernetes Neden Bu Kadar Popüler?
Kubernetes, uygulama kapsayıcıları için operasyonel ihtiyaçların çoğunu dikkate alır. Kubernetes’in bu kadar popüler olmasının başlıca nedenlerinden bazıları aşağıdaki şekildedir:
- Küresel olarak en büyük açık kaynak projesidir.
- Kapsayıcı sağlığını izlemek için uzman bir araçtır.
- Otomatik ölçeklendirme özelliği desteği sağlar.
- Büyük topluluk desteği sağlar.
- Harika konteyner dağıtımı sunar.
- Etkili kalıcı depolama sağlar.
- Çoklu bulut desteği (Hibrit Bulut) sunar.
- Hesaplama kaynak yönetimi sağlar.
Gerçek dünya kullanım durumları mevcuttur.
Kubernetes Dağıtımları
Kubernetes dağıtımları hataya dayanıklı, çok yönlü ve ölçeklenebilirdir. Hizmet kesintisi olmadan çalışma zamanında bölmeleri yükseltmeyi veya değiştirmeyi destekler. Geliştiriciler, talep arttığında çalışma zamanında Kubernetes’i daha fazla pod ekleyecek şekilde ayarlayabilir. Bu, Kubernetes altında çalışan uygulamaları oldukça ölçeklenebilir hale getirir.
Kubernetes, bir VM arızalanırsa kapsayıcıları ve bölmeleri otomatik olarak onarabilir. Bu, belirtilen Kubernetes makine kümesi içinde çalışan başka bir makinede yapılır. Bu, Kubernetes’in hataya ne kadar dayanıklı olduğunu gösterir.
Kubernetes, bölmeler ve hizmetlerin ötesinde, kaynaklar olarak da adlandırılan bileşenlerden oluşan karmaşık bir teknolojidir. Kubernetes, güvenliği, veri depolamayı ve ağ yönetimini kolaylaştıran varsayılan kaynaklarla birlikte gelir. Kubernetes, kapsayıcılı bir uygulamayı daha verimli bir şekilde yönetmenize yardımcı olabilir.
Kubernetes’in çeşitli işlevleri ve kodu vardır. Kubernetes’in ana sorumluluğu kapsayıcı düzenlemesidir. Kapsayıcı düzenleme, çeşitli iş yüklerini yürüten tüm kapsayıcıların fiziksel veya sanal makineleri çalıştıracak şekilde planlanmasını sağlamak anlamına gelir.
Kapsayıcılar, küme yapılandırmasının yanı sıra dağıtım ortamının kısıtlamalarına göre verimli bir şekilde paketlenmelidir. Ayrıca, Kubernetes her zaman çalışan tüm kapsayıcıları aramalı ve yanıt vermeyen, ölü veya diğer tüm sağlıksız kapsayıcıları değiştirmelidir.
Kubernetes, kapsayıcıları yönetmek ve görüntüleri çalıştırmak için Docker’ı kullanır. Ancak Kubernetes, diğer motorları, örneğin CoreOS’tan rkt’yi kullanabilir. Platform; sunucu kümesinde, yerel ağda, veri merkezinde, her tür bulutta; genel, özel ve hatta hibrit olmak üzere herhangi bir altyapı içinde dağıtılabilir.
Docker vs. Kubernetes İle Arasındaki Farklar?
Docker ve Kubernetes arasındaki farkların ne olduğunu veya hangisinin en iyi teknoloji olduğunu hiç merak ettiniz mi? Docker vs Kubernetes tartışması, yazılım kapsayıcılarıyla çalışan insanlar arasında oldukça popülerdir.
Ancak bulutta yerel geliştirmeden en iyi şekilde yararlanmak için yazılım geliştiricilerin ve veri bilimcilerin Kubernetes ve Docker’ın ne olduğu, farklılıkları ve bu iki teknolojinin birbirini gerçekten tamamlayıp tamamlayamayacağı konusunda daha net bir resim elde etmesi gerekir.
Kubernetes, kapsayıcıları tanımlamak ve çalıştırmak için bir web uygulaması teknolojisi içinde kapsayıcıları temsil eden ve yöneten bir kapsayıcı düzenleme teknolojisidir. Docker ise, konteynerlerin yapımından ve çalıştırılmasından sorumlu teknolojidir.
Kubernetes’in konteyner yapmadığını bilmeniz önemlidir. Bunun yerine, bunları oluşturmak için Docker gibi bir kapsayıcı düzenleme teknolojisine güvenir. Başka bir deyişle, Kubernetes ve Docker az çok birbirine ihtiyaç duyar.
Artık Docker ve Kubernetes’in ne olduğunu bildiğinize göre, bu iki farklı teknolojinin birlikte çalışmak için yaratıldığını söyleyebiliriz. Bu iki teknoloji birbiriyle rekabet etmez, her ikisinin de DevOps’ta kendi amaçları vardır ve genellikle birlikte kullanılır.
Bunu akılda tutarak, aşağıdaDocker ve Kubernetes arasındaki farklılıklara göz atalım:
- Docker, uygulamanızı kapsayıcılara ayırmak için kullanılır. Uygulamanızı paketlemek ve göndermek için kullanılır. Kubernetes ise, bir kapsayıcı zamanlayıcıdır. Amacı, uygulamaları dağıtmak ve ölçeklendirmektir.
- Kubernetes ve Docker arasındaki bir diğer önemli fark, Kubernetes’in bir kümede çalışacak şekilde oluşturulması, Docker’ın ise tek bir düğüm üzerinde çalışmasıdır.
- Kubernetes ve Docker arasındaki diğer fark, Docker’ın Kubernetes olmadan kendi başına kullanılabilmesidir, ancak orkestrasyon yapmak için Kubernetes’in aslında bir kapsayıcı çalışma zamanına ihtiyacı vardır.
Kubernetes kapsayıcı düzenleme, yönetim ve düzenleme için standart olarak kabul edilir. Kapsayıcıları ölçekte düzenlemek ve bunlarla geliştirici veya kullanıcı etkileşimini yönetmek için altyapı düzeyinde bir framework sunar. Aynı şekilde, Docker artık kapsayıcı geliştirme ve dağıtım için bir standarttır. Çok daha temel düzeyde kapsayıcıları oluşturmak, dağıtmak ve çalıştırmak için bir platform sağlar. Kubernetes framework’ünün üzerine inşa edildiği temeldir.