Aracılığıyla paylaş


Docker uygulamalarında durumu ve verileri yönetme

İ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.

Çoğu durumda kapsayıcıyı bir işlemin örneği olarak düşünebilirsiniz. İşlem kalıcı durumu korumaz. Bir kapsayıcı yerel depolama alanına yazarken, bir örneğin süresiz olarak dolacağını varsayarsak bellekteki tek bir konumun dayanıklı olacağını varsaymak gibi olur. İşlemler gibi kapsayıcı görüntülerinin birden çok örneğin olduğunu veya sonunda öldürüleceğini varsaymalısınız. Kapsayıcı düzenleyici ile yönetiliyorsa, bunların bir düğümden veya VM'den diğerine taşınabileceğini varsaymalısınız.

Docker uygulamalarında verileri yönetmek için aşağıdaki çözümler kullanılır:

Docker konağından Docker Birimleri olarak:

  • Birimler , Docker tarafından yönetilen konak dosya sisteminin bir alanında depolanır.

  • Bağlama bağlamaları konak dosya sistemindeki herhangi bir klasöre eşlenebilir, bu nedenle docker işleminden erişim denetlenemez ve kapsayıcı hassas işletim sistemi klasörlerine erişebileceğinden güvenlik riski oluşturabilir.

  • tmpfs bağlamaları , yalnızca konağın belleğinde bulunan ve hiçbir zaman dosya sistemine yazılmayan sanal klasörler gibidir.

Uzak depolamadan:

Docker kapsayıcısından:

  • Katman Dosya Sistemi. Bu Docker özelliği, güncelleştirilmiş bilgileri kapsayıcının kök dosya sistemine depolayan bir yazma üzerine kopyalama görevi uygular. Bu bilgiler, kapsayıcının temel aldığı özgün görüntünün "üstündedir". Kapsayıcı sistemden silinirse, bu değişiklikler kaybolur. Bu nedenle, kapsayıcının durumunu yerel depolama alanı içinde kaydetmek mümkün olsa da, bunun etrafında bir sistem tasarlamak varsayılan olarak durum bilgisi olmayan kapsayıcı tasarımının şirket içiyle çakışabilir.

Ancak Docker Birimleri'ni kullanmak artık Docker'da yerel verileri işlemek için tercih edilen yöntemdir. Kapsayıcılardaki depolama hakkında daha fazla bilgiye ihtiyacınız varsa Docker depolama sürücüleri ve Depolama sürücüleri hakkında konularına bakın.

Aşağıda bu seçenekler hakkında daha fazla ayrıntı sağlanır:

Birimler , konak işletim sisteminden kapsayıcılardaki dizinlere eşlenen dizinlerdir. Kapsayıcıdaki kodun dizine erişimi olduğunda, bu erişim aslında konak işletim sistemindeki bir dizine yapılır. Bu dizin kapsayıcının ömrüne bağlı değildir ve dizin Docker tarafından yönetilir ve konak makinenin temel işlevselliğinden yalıtılır. Bu nedenle, veri birimleri verileri kapsayıcının ömründen bağımsız olarak kalıcı hale getirmek için tasarlanmıştır. Docker konağından bir kapsayıcıyı veya görüntüyü silerseniz, veri biriminde kalıcı olan veriler silinmez.

Birimler adlandırılmış veya anonim (varsayılan) olabilir. Adlandırılmış birimler, Veri Birimi Kapsayıcılarının evrimidir ve kapsayıcılar arasında veri paylaşımını kolaylaştırır. Birimler, diğer seçeneklerin yanında uzak konaklarda veri depolamanıza olanak sağlayan birim sürücülerini de destekler.

Bağlama bağlamaları uzun zaman önce kullanılabilir ve herhangi bir klasörün bir kapsayıcıdaki bağlama noktasına eşlenebilmesine izin verir. Bağlama bağlamaları birimlere göre daha fazla sınırlamaya ve bazı önemli güvenlik sorunlarına sahiptir, bu nedenle birimler önerilen seçenektir.

tmpfs bağlamaları temelde yalnızca konağın belleğinde yaşayan ve hiçbir zaman dosya sistemine yazılmayan sanal klasörlerdir. Bunlar hızlı ve güvenlidir, ancak bellek kullanır ve yalnızca geçici, kalıcı olmayan veriler içindir.

Şekil 4-5'te gösterildiği gibi, normal Docker birimleri kapsayıcıların dışında ancak konak sunucusunun veya VM'nin fiziksel sınırları içinde depolanabilir. Ancak Docker kapsayıcıları bir konak sunucusundan veya VM'den diğerine bir birime erişemez. Başka bir deyişle, bu birimlerle, farklı Docker konaklarında çalışan kapsayıcılar arasında paylaşılan verileri yönetmek mümkün değildir, ancak uzak konakları destekleyen bir birim sürücüsüyle elde edilebilir.

Diagram showing volumes and external data sources for container-based apps.

Şekil 4-5. Kapsayıcı tabanlı uygulamalar için birimler ve dış veri kaynakları

Uzak konakları destekleyen bir uzak sürücü kullanmadığınız sürece, birimler kapsayıcılar arasında paylaşılabilir, ancak yalnızca aynı konakta paylaşılabilir. Ayrıca Docker kapsayıcıları bir düzenleyici tarafından yönetildiğinde, kapsayıcılar küme tarafından gerçekleştirilen iyileştirmelere bağlı olarak konaklar arasında "hareket edebilir". Bu nedenle, iş verileri için veri hacimlerini kullanmanız önerilmez. Ancak bunlar, iş verileri tutarlılığını etkilemeyecek izleme dosyaları, zamana bağlı dosyalar veya benzerleriyle çalışmak için iyi bir mekanizmadır.

Azure SQL Veritabanı, Azure Cosmos DB gibi uzak veri kaynakları ve önbellek araçları veya Redis gibi bir uzak önbellek kapsayıcılı uygulamalarda kapsayıcısız geliştirme sırasında kullanıldıkları gibi kullanılabilir. Bu, iş uygulaması verilerini depolamanın kanıtlanmış bir yoludur.

Azure Depolama. İş verilerinin genellikle Azure Depolama gibi dış kaynaklara veya veritabanlarına yerleştirilmesi gerekir. Azure Depolama, somut olarak bulutta aşağıdaki hizmetleri sağlar:

  • Blob depolama yapılandırılmamış nesne verilerini depolar. Blob, belge veya medya dosyaları (görüntüler, ses ve video dosyaları) gibi herhangi bir metin veya ikili veri türü olabilir. Blob Storage ayrıca Nesne depolama olarak adlandırılır.

  • Dosya depolama, standart SMB protokollerini kullanarak eski uygulamalar için paylaşılan depolama alanı sunar. Azure sanal makineleri ve bulut hizmetleri, bağlı paylaşımlar aracılığıyla uygulama bileşenleri arasında dosya verilerini paylaşabilir. Şirket içi uygulamalar, Dosya hizmeti REST API'sini kullanarak bir paylaşımdaki dosya verilerine erişebilir.

  • Tablo depolama, yapılandırılmış veri kümelerini depolar. Tablo depolama, büyük miktarlardaki verilere hızlı geliştirme ve hızlı erişim sağlayan bir NoSQL anahtar özniteliği veri deposudur.

İlişkisel veritabanları ve NoSQL veritabanları. SQL Server, PostgreSQL, Oracle gibi ilişkisel veritabanlarından veya Azure Cosmos DB, MongoDB gibi NoSQL veritabanlarından dış veritabanları için birçok seçenek vardır. Bu veritabanları tamamen farklı bir konuda olduğundan bu kılavuzun bir parçası olarak açıklanmayacak.