Udostępnij za pośrednictwem


Magazyn trwały w kontenerach

Mogą istnieć przypadki, w których ważne jest, aby aplikacja mogła utrwalać dane w kontenerze lub wyświetlać pliki w kontenerze, który nie został uwzględniony w czasie kompilacji kontenera. Trwała pamięć masowa może być przydzielona kontenerom na kilka sposobów.

  • Punkty montowania
  • Nazwane woluminy

Platforma Docker zawiera doskonałe omówienie sposobu używania woluminów , więc najlepiej to najpierw przeczytać. Pozostała część tej strony koncentruje się na różnicach między systemami Linux i Windows i zawiera przykłady w systemie Windows.

Wiązania montażowe

Instalacje wiązania umożliwiają kontenerowi udostępnianie katalogu hostowi. Jest to przydatne, jeśli chcesz umieścić pliki na komputerze lokalnym, które są dostępne po ponownym uruchomieniu kontenera lub chcesz udostępnić go wielu kontenerom. Jeśli chcesz, aby kontener działał na wielu maszynach z dostępem do tych samych plików, należy zamiast tego użyć nazwanego woluminu lub instalacji SMB.

Uwaga / Notatka

Instalowanie wiązania bezpośrednio na udostępnionych woluminach klastra (CSV) nie jest obsługiwane. Maszyny wirtualne działające jako host kontenera mogą być uruchamiane na woluminie CSV.

Uprawnienia

Model uprawnień używany w przypadku montowania powiązań różni się w zależności od poziomu izolacji kontenera.

Kontenery korzystające z izolacjiHyper-V używają prostego modelu uprawnień tylko do odczytu lub odczytu i zapisu. Pliki są dostępne na hoście przy użyciu LocalSystem konta. Jeśli dostęp zostanie odrzucony w kontenerze, upewnij się, że LocalSystem masz dostęp do tego katalogu na hoście. Gdy jest używana flaga tylko do odczytu, zmiany wprowadzone w woluminie wewnątrz kontenera nie będą widoczne ani utrwalone w katalogu na hoście.

Kontenery systemu Windows korzystające z izolacji procesów są nieco inne, ponieważ używają tożsamości procesu w kontenerze do uzyskiwania dostępu do danych, co oznacza, że listy ACL plików są uznawane. Tożsamość procesu uruchomionego w kontenerze ("ContainerAdministrator" w systemie Windows Server Core i "ContainerUser" w kontenerach systemu Nano Server domyślnie) będzie używana do uzyskiwania dostępu do plików i katalogów w zainstalowanym woluminie zamiast LocalSystem, i będzie musiała otrzymać dostęp do korzystania z danych.

Ponieważ te tożsamości istnieją tylko w kontekście kontenera — nie na hoście, na którym są przechowywane pliki — należy użyć dobrze znanej grupy zabezpieczeń, takiej jak Authenticated Users podczas konfigurowania list ACL w celu udzielenia dostępu do kontenerów.

Ostrzeżenie

Nie należy montować poufnych katalogów, takich jak C:\, do niezaufanego kontenera. Pozwoliłoby to na zmianę plików na hoście, do których zwykle nie miałby dostępu i mógł spowodować naruszenie zabezpieczeń.

Przykładowe użycie:

  • docker run -v c:\ContainerData:c:\data:RO w przypadku dostępu tylko do odczytu
  • docker run -v c:\ContainerData:c:\data:RW w przypadku dostępu do odczytu i zapisu
  • docker run -v c:\ContainerData:c:\data w przypadku dostępu do odczytu i zapisu (ustawienie domyślne)

Dowiązania symboliczne są rozwiązane w kontenerze. Jeśli powiążesz ścieżkę hosta z kontenerem, który jest dowiązaniem symbolicznym lub zawiera dowiązania symboliczne, kontener nie będzie mógł uzyskać do nich dostępu.

Instalowanie protokołu SMB

W systemie Windows Server w wersji 1709 lub nowszej, funkcja o nazwie "Mapowanie globalne protokołu SMB" umożliwia zainstalowanie udziału SMB na hoście, a następnie przekazanie katalogów z tego udziału do kontenera. Kontener nie musi być skonfigurowany przy użyciu określonego serwera, udziału, nazwy użytkownika lub hasła — to wszystko odbywa się na hoście. Kontener będzie działał tak samo, jak w przypadku magazynu lokalnego.

Kroki konfiguracji

  1. Na hoście kontenera globalnie zamapuj zdalny udział SMB:

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

    To polecenie użyje poświadczeń do uwierzytelniania za pomocą zdalnego serwera SMB. Następnie zamapuj zdalną ścieżkę udziału na literę dysku G: (może to być dowolna inna dostępna litera dysku). Kontenery utworzone na tym hoście kontenera mogą teraz mieć swoje woluminy danych mapowane na ścieżkę na dysku G:.

    Uwaga / Notatka

    W przypadku korzystania z mapowania globalnego protokołu SMB dla kontenerów wszyscy użytkownicy na hoście kontenera mogą uzyskiwać dostęp do udziału zdalnego. Każda aplikacja uruchomiona na hoście kontenera będzie mieć również dostęp do zamapowanego udziału zdalnego.

  2. Kreowanie kontenerów z woluminami danych zamapowanymi na globalnie zamontowany udział SMB przy użyciu polecenia docker uruchom -it --name demo -v g:\ContainerData:c:\AppData1 mcr.microsoft.com/windows/servercore:ltsc2019 cmd.exe

    Wewnątrz kontenera katalog udziału zdalnego "ContainerData" zostanie przypisany do c:\AppData1. Wszystkie dane przechowywane w globalnie mapowanym udziale zdalnym będą dostępne dla aplikacji wewnątrz kontenera. Wiele kontenerów może uzyskać dostęp do odczytu/zapisu do tych udostępnionych danych za pomocą tego samego polecenia.

Ta obsługa mapowania globalnego protokołu SMB to funkcja po stronie klienta SMB, która może działać na dowolnym zgodnym serwerze SMB, w tym:

  • Serwer plików Scale-Out z użyciem Storage Spaces Direct (S2D) lub tradycyjnej sieci SAN
  • Azure Files (udział SMB)
  • Tradycyjny serwer plików
  • Implementacja protokołu SMB innej firmy (np. urządzenia NAS)

Uwaga / Notatka

Mapowanie globalne protokołu SMB nie obsługuje folderów przestrzeni nazw systemu plików DFS (DFSN). Na przykład, jeśli zamapujesz główny udział DFSN z elementem New-SmbGlobalMapping -LocalPath Z: -RemotePath \\contoso.com\share1', odczytanie folderów docelowych głównego udziału zwróci błąd "Nie można uzyskać dostępu do lokalizacji sieciowej."

Nazwane wolumeny

Woluminy nazwane umożliwiają utworzenie woluminu według nazwy, przypisanie go do kontenera i ponowne użycie go później przy użyciu tej samej nazwy. Nie musisz śledzić rzeczywistej ścieżki jej utworzenia, wystarczy nazwa. Silnik Docker w systemie Windows ma wbudowaną wtyczkę nazwanych woluminów, która może tworzyć woluminy na komputerze lokalnym. Dodatkowa wtyczka jest wymagana, jeśli chcesz używać nazwanych woluminów na wielu maszynach.

Przykładowe kroki:

  1. docker volume create unwound - Utwórz wolumin o nazwie "unwound"
  2. docker run -v unwound:c:\data microsoft/windowsservercore — Uruchamianie kontenera z woluminem zamapowanym na c:\data
  3. Zapisz pliki w folderze c:\data w kontenerze, a następnie zatrzymaj kontener
  4. docker run -v unwound:c:\data microsoft/windowsservercore — Uruchamianie nowego kontenera
  5. Uruchom dir c:\data w nowym kontenerze — pliki są nadal tam

Uwaga / Notatka

System Windows Server przekonwertuje docelowe nazwy ścieżek (ścieżek wewnątrz kontenera) na małe litery; tj. -v unwound:c:\MyData, lub -v unwound:/app/MyData w kontenerach Linuksowych, czego skutkiem będzie to, że katalog wewnątrz kontenera c:\mydata, lub /app/mydata w kontenerach Linuksowych, zostanie zmapowany (i utworzony, jeśli nie istnieje).