Docker nedir?

Tamamlandı

Docker kapsayıcıları hızlı turumuza başlamadan önce ekibimizin uygulamaları nasıl geliştirip dağıttığına göz atalım. Ekiplerimizin karşılaştığı zorluklardan bazılarını da kısaca açıklayacağız.

Şirketinizdeki uygulama geliştirme ve yönetme süreci genellikle bir veya daha fazla ekibin katılımıyla sürdürülür. Yazılımı oluşturan bir geliştirme ekibi ve bu uygulamaları dağıtmakla sorumlu bir operasyon ekibi vardır. Operasyon ekibi, uygulama barındırma altyapısını yönetmekle de sorumludur.

Örneğin, şirketimizin çeşitli satış noktalarının kullanacağı bir sipariş izleme portalı geliştirdiğimizi varsayalım. Uygulamanın geliştirme ve yayımlama işlemi sırasında çeşitli ortamlar uygulamalarımızı barındırır. İlk olarak geliştirme ekibi bir geliştirme ortamında yazılım geliştirme ve test adımlarını tamamlar. Yazılım daha sonra kalite denetimi (QA) ortamına dağıtılır ve ondan sonra üretim öncesi ve son üretim ortamlarına aktarılır.

Önceki senaryoda göz önünde bulundurmamız gereken birkaç zorluk vardır:

  • Barındırma ortamlarını yönetme

    Farklı ortamların yazılım ve donanım yönetim süreçleri de farklı olacaktır. Her ortamda yüklenen yazılımların ve yapılandırılan donanımların aynı olduğundan emin olunması gerekir. Ayrıca ortamlara özgü ağ erişimi, veri depolama ve güvenlik adımlarının da tutarlı ve kolayca tekrarlanabilir bir şekilde yapılandırılması şarttır.

  • Yazılım tesliminde süreklilik

    Uygulamaları ortamlarımıza dağıtmanın tutarlı bir şekilde gerçekleşmesi gerekir. Her dağıtım paketi, tam işlevsel bir uygulama sağlayan tüm sistem paketlerini, ikili dosyaları, kitaplıkları, yapılandırma dosyalarını ve diğer öğeleri içermelidir. Ayrıca bu bağımlılıkların yazılım sürümleri ve mimari ile de eşleşmesi şarttır.

  • Verimli donanım kullanımı

    Dağıtılan her uygulamanın aynı donanım üzerinde çalışan diğer uygulamalardan yalıtılmış bir şekilde yürütülmesi gerekir. Kaynaklardan en iyi şekilde faydalanmak ve uygulamaların çakışmasını önlemek için her sunucuda birden fazla uygulama çalıştırılması hedeflenir.

  • Uygulama taşınabilirliği

    Uygulama taşınabilirliğinin önemli olmasının birden fazla nedeni vardır. Barındırma ortamı başarısız olabilir veya uygulamamızın ölçeğini genişletmemiz gerekebilir. Her iki durumda da olası sonuç yazılımımızı yeni bir ortama yeniden dağıtmaktır. Yazılımın farklı altyapıya sahip konaklar arasında sorunsuz bir şekilde taşınabilmesi gerekir. Bu sayede taşıma işlemi en kısa sürede tamamlanarak müşterilerin yaşayacağı kesinti süresi en aza indirilebilir.

Bu zorlukların üstesinden gelmemize yardımcı olacak Docker özelliklerini incelemeden önce Docker mimarisiyle ilgili birkaç kavrama göz atacak ve platformun genel özelliklerini inceleyeceğiz.

Kapsayıcı nedir?

Kapsayıcı, yazılım paketi derlememizi ve çalıştırmamızı sağlayan gevşek bir şekilde yalıtılmış bir ortamdır. Bu yazılım paketlerinde kodun yanı sıra uygulamaların tüm işlem ortamlarında hızlı ve güvenilir bir şekilde çalıştırılmasını sağlayan bağımlılıklar bulunur. Bu paketlere kapsayıcı görüntüsü adı verilir.

Kapsayıcı görüntüsü, uygulamalarımızı dağıtmak için kullandığımız birimdir.

Yazılım kapsayıcılama nedir?

Yazılım kapsayıcılaştırma, kapsayıcıları sanal makine (VM) kullanmadan dağıtmak ve çalıştırmak için kullanılan bir işletim sistemi sanallaştırma yöntemidir. Kapsayıcılar fiziksel donanımda, bulutta, VM'lerde ve birden çok işletim sisteminde çalıştırılabilir.

Docker nedir?

Docker, kapsayıcı geliştirmek, teslim etmek ve çalıştırmak için kullanılan bir kapsayıcılama platformudur. Docker'da bir hiper yönetici kullanılmaz, uygulama geliştirme ve test süreçlerini yürütüyorsanız Docker'ı masaüstü veya dizüstü bilgisayarınızda çalıştırabilirsiniz. Docker'ın masaüstü sürümü Linux, Windows ve macOS desteğine sahiptir. Üretim sistemleri için Docker, birçok farklı Linux dağıtımı ve Microsoft Windows Server 2016 ve üzeri dahil olmak üzere sunucu ortamlarında kullanılabilir durumdadır. Azure dahil olmak üzere birçok bulut Docker'ı destekler.

Docker mimarisi

Docker platformu, kapsayıcılı uygulama derlemek, çalıştırmak ve yönetmek için kullanılan birçok bileşenden oluşur.

Docker altyapısı

Docker altyapısı, istemci ve sunucunun aynı konakta aynı anda çalıştırıldığı bir istemci-sunucu uygulaması olarak yapılandırılmış birkaç bileşenden oluşur. İstemci, istemcinin uzak bir sunucu örneğiyle de iletişim kurmasını sağlayan bir REST API kullanarak sunucuyla iletişim kurar.

Diagram showing a high-level overview of the Docker architecture.

Kapsayıcıları çalıştıran Docker Sunucusu ve depolanan kapsayıcı görüntüleri arasındaki iletişim birkaç ok ile gösterilir. Bu oklar, Docker sunucusunun depolanan kapsayıcı görüntülerini nasıl yüklediğini ve çalışan kapsayıcıların nasıl yönetileceğini gösterir.

Docker istemcisi

Docker istemcisi için iki alternatif vardır: Adlı docker bir komut satırı uygulaması veya Docker Desktop adlı Grafik Kullanıcı Arabirimi (GUI) tabanlı bir uygulama. Hem CLI hem de Docker Desktop bir Docker sunucusuyla etkileşim kurar. docker CLI veya Docker Desktop'tan gelen komutlar Docker REST API'sini kullanarak yerel veya uzak bir sunucuya yönergeler gönderir ve kapsayıcılarımızı yönetmek için kullandığımız birincil arabirim işlevi görür.

Docker sunucusu

Docker sunucusu, dockerd adlı bir daemon'dur. dockerd adlı daemon, istemciden gelen istekleri Docker REST API aracılığıyla yanıtlar ve diğer daemon'larla etkileşim kurabilir. Docker sunucusu ayrıca kapsayıcıların yaşam döngüsünü izlemekten de sorumludur.

Docker nesneleri

Kapsayıcı dağıtımlarınızı desteklemek için oluşturmanız ve yapılandırmanız gereken birçok nesne vardır. Bunlar ağlar, depolama birimleri, eklentiler ve diğer hizmet nesneleridir. Burada bu nesnelerin tümüne yer vermeyeceğiz ancak bu nesnelerin gerektiğinde oluşturulup dağıtabileceğini bilmeniz yeterlidir.

Docker Hub

Docker Hub, Hizmet Olarak Yazılım (SaaS) Docker kapsayıcı kayıt defteridir. Docker kayıt defterleri, oluşturulan kapsayıcı görüntülerini depolamak ve dağıtmak için kullanılan depolardır. Docker Hub, Docker'ın görüntü yönetimi için varsayılan olarak kullandığı genel kayıt defteridir.

İsterseniz özel bir Docker kayıt defteri oluşturup kullanabilir veya farklı bulut sağlayıcısı seçenekleri arasından seçim yapabilirsiniz. Örneğin, azure kapsayıcısı etkinleştirilmiş çeşitli hizmetlerde kullanılacak kapsayıcı görüntülerini depolamak için Azure Container Registry'yi kullanabilirsiniz.