Kapsayıcılarda Kalıcı Depolama

Bir uygulamanın kapsayıcıdaki verileri kalıcı hale getirebilmesinin önemli olduğu veya dosyaları kapsayıcı derleme zamanında dahil edilmeyen bir kapsayıcıda göstermek istediğiniz durumlar olabilir. Kalıcı depolama kapsayıcılara birkaç yolla verilebilir:

  • Bağlama noktaları
  • Adlandırılmış birimler

Docker, birimleri nasıl kullanacağınızı ayrıntılı olarak ele alıyor, bu yüzden önce bunu okumanız en iyisidir. Bu sayfanın geri kalanı Linux ve Windows arasındaki farklara odaklanır ve Windows'da örnekler sağlar.

Bağlama Bağlantıları

Bağlama noktaları, kapsayıcının bir dizini konakla paylaşmasına olanak sağlar. Yerel makinede, bir kapsayıcıyı yeniden başlattığınızda kullanılabilir olan veya birden çok kapsayıcıyla paylaşmak istediğiniz dosyaları depolayacak bir yer arıyorsanız, bu kullanışlıdır. Kapsayıcının aynı dosyalara erişimi olan birden çok makinede çalışmasını istiyorsanız, bunun yerine adlandırılmış birim veya SMB bağlaması kullanılmalıdır.

Uyarı

Küme Paylaşılan Birimleri (CSV) üzerinde doğrudan bağlama desteklenmez, ancak kapsayıcı konağı olarak çalışan sanal makineler bir CSV biriminde çalıştırılabilir.

İzinler

Bağla montajları için kullanılan izin modeli, kapsayıcınızın yalıtım seviyesine göre değişir.

Hyper-V yalıtımı kullanan kapsayıcılar basit bir salt okunur veya okuma-yazma izin modeli kullanır. Dosyalara ana bilgisayarda LocalSystem hesabı kullanılarak erişilir. Kapsayıcıda erişim reddedildiyse, ana bilgisayarda bu dizine LocalSystem erişimi olduğundan emin olun. Salt okunur işareti kullanıldığında, kapsayıcı içindeki birimde yapılan değişiklikler, konak üzerindeki dizinde görünmez ve kalıcı hale gelmez.

İşlem yalıtımı kullanan Windows kapsayıcıları, verilere erişmek için kapsayıcı içindeki işlem kimliğini kullandıklarından biraz farklıdır ve bu da dosya ACL'lerinin kabul edilmiş olduğu anlamına gelir. Kapsayıcıda çalışan işlemin kimliği (varsayılan olarak Windows Server Core'da "ContainerAdministrator" ve Nano Server kapsayıcılarındaki "ContainerUser"), LocalSystem yerine, bağlı birimdeki dosyalara ve dizinlere erişim sağlamak için kullanılacak ve verileri kullanmak için bu kimliğe erişim izni verilmesi gerekecektir.

Bu kimlikler yalnızca kapsayıcı bağlamında mevcut olduğundan (dosyaların depolandığı konakta değil), kapsayıcılara erişim izni vermek için ACL'leri yapılandırırken Authenticated Users gibi iyi bilinen bir güvenlik grubu kullanmalısınız.

Uyarı

gibi C:\ hassas dizinleri güvenilmeyen bir kapsayıcıya bağlamayın. Bu, normalde erişimi olmayan ve güvenlik ihlali oluşturabilecek konak üzerindeki dosyaları değiştirmesine olanak sağlar.

Örnek kullanım:

  • docker run -v c:\ContainerData:c:\data:RO yalnızca okuma erişimi için
  • docker run -v c:\ContainerData:c:\data:RW okuma-yazma erişimi için
  • docker run -v c:\ContainerData:c:\data okuma-yazma erişimi için (varsayılan)

Symlink'ler kapsayıcıda çözümlenir. Ana makine yolunu bir sembolik bağlantı olan veya sembolik bağlantılar içeren bir kapsayıcıya bağlarsanız, kapsayıcı bunlara erişemez.

SMB Montajları

Windows Server sürüm 1709 ve sonraki sürümlerde , "SMB Genel Eşleme" adlı özellik, konağa bir SMB paylaşımı bağlamayı ve ardından bu paylaşımdaki dizinleri bir kapsayıcıya geçirmeyi mümkün kılar. Kapsayıcının belirli bir sunucu, paylaşım, kullanıcı adı veya parolayla yapılandırılması gerekmez; bunların hepsi ana bilgisayarda işlenir. Kapsayıcı, sanki yerel depolama alanı varmış gibi çalışır.

Yapılandırma Adımları

  1. Kapsayıcı sunucusunda, uzak SMB paylaşımını küresel olarak eşleyin.

    $creds = Get-Credential
    New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:
    

    Bu komut, uzak SMB sunucusuyla kimlik doğrulaması yapmak için kimlik bilgilerini kullanır. Ardından, uzak paylaşım yolunu G: sürücü harfiyle eşleyin (başka herhangi bir kullanılabilir sürücü harfi olabilir). Bu kapsayıcı ana bilgisayarında oluşturulan kapsayıcılar artık veri birimlerinin G: sürücüsündeki bir yola eşlenmesine sahip olabilir.

    Uyarı

    Kapsayıcılar için SMB genel eşlemesi kullanılırken, kapsayıcı konağındaki tüm kullanıcılar uzak paylaşıma erişebilir. Kapsayıcı ana bilgisayarında çalışan tüm uygulamalar eşlenmiş uzak paylaşıma da erişebilir.

  2. Kapsayıcılar oluşturun ve veri birimlerini, genel olarak bağlanan SMB paylaşımlarına haritalayın docker run -it --name demo -v g:\ContainerData:c:\AppData1 mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe

    Kapsayıcının içinde c:\AppData1, uzak paylaşımın "ContainerData" dizinine eşlenir. Genel olarak eşlenmiş uzak paylaşımda depolanan tüm veriler kapsayıcı içindeki uygulamalar tarafından kullanılabilir. Birden çok kapsayıcı aynı komutla bu paylaşılan verilere okuma/yazma erişimi alabilir.

Bu SMB genel eşleme desteği, aşağıdakiler dahil tüm uyumlu SMB sunucularında çalışabilen SMB istemci tarafı özelliğidir:

  • Depolama Alanları Doğrudan (S2D) veya geleneksel SAN üzerinde Ölçeklenebilir Dosya Sunucusu
  • Azure Dosyalar (SMB paylaşımı)
  • Geleneksel Dosya Sunucusu
  • SMB protokolünün üçüncü taraf uygulaması (ör. NAS gereçleri)

Uyarı

SMB genel eşlemesi DFS Ad Alanları (DFSN) klasörlerini desteklemez. Örneğin, bir DFSN kök paylaşımını New-SmbGlobalMapping -LocalPath Z: -RemotePath \\contoso.com\share1' ile eşlerseniz, bu kökün klasör hedeflerini okumak "Ağ konumuna ulaşılamıyor" hatasını döndürür.

Adlandırılmış Birimler

Adlandırılmış birimler, bir birimi ada göre oluşturmanıza, bir kapsayıcıya atamanıza ve daha sonra aynı adla yeniden kullanmanıza olanak sağlar. Oluşturulduğu yerin gerçek yolunu takip etmeniz gerekmez, yalnızca ismi takip edebilirsiniz. Windows'daki Docker altyapısı, yerel makinede birimler oluşturabilen yerleşik bir adlandırılmış birim eklentisine sahiptir. Adlandırılmış birimleri birden çok makinede kullanmak istiyorsanız ek bir eklenti gerekir.

Örnek adımlar:

  1. docker volume create unwound - 'unwound' adlı bir birim oluştur
  2. docker run -v unwound:c:\data microsoft/windowsservercore - c:\data ile eşlenmiş birim kullanılarak bir kapsayıcı başlatın
  3. Kapsayıcıdaki c:\data dizinine bazı dosyalar yazın ve kapsayıcıyı durdurun
  4. docker run -v unwound:c:\data microsoft/windowsservercore - Yeni bir kapsayıcı başlat
  5. Yeni kapsayıcıda çalıştırma dir c:\data - dosyalar hala orada

Uyarı

Windows Server hedef yol adlarını (kapsayıcının içindeki yol) küçük harfe dönüştürür; -v unwound:c:\MyDataörneğin, veya -v unwound:/app/MyData Linux kapsayıcılarında, kapsayıcı içinde veya c:\mydata Linux kapsayıcılarında /app/mydatabir dizinin eşlenmesine (ve mevcut değilse oluşturulmasına) neden olur.