Docker nedir?

İpucu

Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Kapsayıcılı .NET Uygulamaları için .NET Mikro Hizmet Mimarisi e-Kitabı'ndan bir alıntıdır.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Docker , uygulamaların bulutta veya şirket içinde çalışabilen taşınabilir, kendi kendine yeterli kapsayıcılar olarak dağıtımını otomatikleştirmeye yönelik açık kaynak bir projedir . Docker ayrıca bulut, Linux ve Microsoft dahil Windows satıcılarıyla işbirliği içinde çalışarak bu teknolojiyi geliştiren ve geliştiren bir şirkettir .

Diagram showing the places Docker containers can run.

Şekil 2-2. Docker, karma bulutun tüm katmanlarında kapsayıcılar dağıtır.

Docker kapsayıcıları müşteri veri merkezinde, dış hizmet sağlayıcısında veya bulutta, Azure'da şirket içinde her yerde çalışabilir. Docker görüntü kapsayıcıları Linux ve Windows üzerinde yerel olarak çalıştırılabilir. Ancak, Windows görüntüleri yalnızca Windows konaklarında çalışabilir ve Linux görüntüleri Linux konaklarında ve Windows konaklarında (şimdiye kadar Hyper-V Linux VM kullanılarak) çalıştırılabilir; burada konak bir sunucu veya VM anlamına gelir.

Geliştiriciler Windows, Linux veya macOS üzerinde geliştirme ortamlarını kullanabilir. Geliştirme bilgisayarında geliştirici, uygulama ve bağımlılıkları dahil olmak üzere Docker görüntülerinin dağıtıldığı bir Docker ana bilgisayarı çalıştırır. Linux veya macOS üzerinde çalışan geliştiriciler Linux tabanlı bir Docker konağı kullanır ve yalnızca Linux kapsayıcıları için görüntü oluşturabilir. (macOS üzerinde çalışan geliştiriciler kodu düzenleyebilir veya macOS'tan Docker CLI'yı çalıştırabilir, ancak bu yazı yazıldığında kapsayıcılar doğrudan macOS üzerinde çalışmaz.) Windows üzerinde çalışan geliştiriciler Linux veya Windows Kapsayıcıları için görüntü oluşturabilir.

Kapsayıcıları geliştirme ortamlarında barındırmak ve ek geliştirici araçları sağlamak için Docker, Windows veya macOS için Docker Desktop'ı iletir. Bu ürünler, kapsayıcıları barındırmak için gerekli VM'yi (Docker konağı) yükler.

Windows Kapsayıcıları'nı çalıştırmak için iki tür çalışma zamanı vardır:

  • Windows Server Kapsayıcıları, işlem ve ad alanı yalıtım teknolojisi aracılığıyla uygulama yalıtımı sağlar. Windows Server Kapsayıcısı, kapsayıcı konağıyla ve konakta çalışan tüm kapsayıcılarla bir çekirdeği paylaşır.

  • Hyper-V Kapsayıcıları, her kapsayıcıyı yüksek oranda iyileştirilmiş bir sanal makinede çalıştırarak Windows Server Kapsayıcıları tarafından sağlanan yalıtımı genişletir. Bu yapılandırmada kapsayıcı konağı çekirdeği Hyper-V Kapsayıcıları ile paylaşılmadığından daha iyi yalıtım sağlanır.

Bu kapsayıcıların görüntüleri aynı şekilde oluşturulur ve aynı şekilde çalışır. Aradaki fark, kapsayıcının Hyper-V Kapsayıcısı çalıştıran görüntüden nasıl oluşturulduğudur ve ek bir parametre gerektirir. Ayrıntılar için bkz . Hyper-V Kapsayıcıları.

Docker kapsayıcılarını sanal makinelerle karşılaştırma

Şekil 2-3'de VM'lerle Docker kapsayıcıları arasındaki karşılaştırma gösterilmektedir.

Sanal Makineler Docker Kapsayıcıları
Diagram showing the hardware/software stack of a traditional VM. Diagram showing the hardware/software stack for Docker containers.
Sanal makineler uygulamayı, gerekli kitaplıkları veya ikili dosyaları ve tam konuk işletim sistemini içerir. Tam sanallaştırma, kapsayıcıya alma işleminden daha fazla kaynak gerektirir. Kapsayıcılar uygulamayı ve tüm bağımlılıklarını içerir. Ancak, işletim sistemi çekirdeğini diğer kapsayıcılarla paylaşır ve konak işletim sistemindeki kullanıcı alanında yalıtılmış işlemler olarak çalışır. (Her kapsayıcının kapsayıcı başına özel bir sanal makine içinde çalıştığı Hyper-V kapsayıcıları dışında.)

Şekil 2-3. Geleneksel sanal makinelerin Docker kapsayıcılarıyla karşılaştırması

VM'ler için, konak sunucusunda alttan yukarıya doğru üç temel katman vardır: altyapı, Konak İşletim Sistemi ve hiper yönetici ve her VM'nin kendi işletim sistemi ve tüm gerekli kitaplıkları vardır. Docker için konak sunucusu yalnızca altyapıya ve işletim sistemine sahiptir ve bunun üzerine kapsayıcıyı yalıtılmış ancak temel işletim sistemi hizmetlerini paylaşan kapsayıcı altyapısı vardır.

Kapsayıcılar çok daha az kaynak gerektirdiğinden (örneğin, tam işletim sistemine ihtiyaç duymazlar), kolayca dağıtılır ve hızlı başlarlar. Bu, daha yüksek yoğunluğa sahip olmanıza olanak tanır, yani aynı donanım ünitesinde daha fazla hizmet çalıştırmanıza olanak tanır ve böylece maliyetleri düşürür.

Aynı çekirdek üzerinde çalıştırmanın yan etkisi olarak, VM'lerden daha az yalıtım elde edersiniz.

Bir görüntünün temel amacı, ortamı (bağımlılıkları) farklı dağıtımlarda aynı hale getirdiğidir. Bu, makinenizde hata ayıklayabileceğiniz ve ardından aynı ortam garantili başka bir makineye dağıtabileceğiniz anlamına gelir.

Kapsayıcı görüntüsü, bir uygulamayı veya hizmeti paketlemenin ve güvenilir ve yeniden üretilebilir bir şekilde dağıtmanın bir yoludur. Docker'ın yalnızca bir teknoloji değil aynı zamanda bir felsefe ve süreç olduğunu da söyleyebilirsiniz.

Docker kullanırken geliştiricilerin "Makinemde çalışıyor, neden üretimde çalışmıyor?" sözlerini duymazsınız. Paketlenmiş Docker uygulaması desteklenen herhangi bir Docker ortamında yürütülebildiğinden ve tüm dağıtım hedeflerinde (Geliştirme, Soru-Cevap, hazırlama ve üretim gibi) hedeflendiği şekilde çalıştırılabildiği için basitçe "Docker üzerinde çalışır" diyebilirler.

Basit bir benzetme

Belki basit bir benzetme, Docker'ın temel kavramını kavramaya yardımcı olabilir.

Bir an için 1950'lere geri dönelim. Sözcük işlemcisi yoktu ve fotokopi makineleri her yerde (tür) kullanılıyordu.

Gerektiğinde, her müşterinin adresine fiziksel olarak teslim edilecek gerçek kağıt ve zarfları kullanarak müşterilere posta göndermek için toplu mektupların hızla verilmesinden sorumlu olduğunuzu düşünün (o zamanlar e-posta yoktu).

Bir noktada, harflerin, mektubun amacına göre, gerektiği gibi seçilen ve düzenlenen büyük bir paragraf kümesinin bileşimi olduğunu fark edersiniz, böylece hızlı bir şekilde mektup göndermek için bir sistem oluşturursunuz ve büyük bir zam almayı beklersiniz.

Sistem basittir:

  1. Her biri bir paragraf içeren saydam sayfa destesiyle başlarsınız.

  2. Bir harf kümesi vermek için, ihtiyacınız olan paragrafları içeren sayfaları seçersiniz, sonra da düzgün görünecekleri ve okunacak şekilde yığıp hizalarsınız.

  3. Son olarak, setin fotokopi makinesine yerleştirip start tuşuna basarak gerektiği kadar harf üretebilirsiniz.

Basitleştirmek gerekirse Docker'ın temel fikri de bu.

Docker'da her katman, program yükleme gibi bir komut yürütülürken dosya sisteminde gerçekleşen değişiklikler kümesidir.

Bu nedenle, katman kopyalandıktan sonra dosya sistemine "baktığınızda", program yüklendiğinde katmana dahil edilen tüm dosyaları görürsünüz.

Bir görüntüyü, işletim sisteminin zaten yüklü olduğu bir "bilgisayara" yüklenmeye hazır bir yardımcı salt okunur sabit disk olarak düşünebilirsiniz.

Benzer şekilde, bir kapsayıcıyı görüntü sabit diskinin yüklü olduğu "bilgisayar" olarak düşünebilirsiniz. Bir bilgisayar gibi kapsayıcı da açılıp kapatılabilir.