Udostępnij za pośrednictwem


Narzędzia platformy kontenerów w systemie Windows

Platforma kontenera systemu Windows rozszerza się! Platforma Docker była pierwszym elementem podróży kontenera, a teraz tworzymy inne narzędzia platformy kontenerów.

W tym artykule omówiono platformę kontenerów dla systemów Windows i Linux, a także każde narzędzie platformy kontenerów.

Platforma kontenerów systemu Windows i Linux

W środowiskach Linux narzędzia do zarządzania kontenerami, takie jak Docker, są oparte na bardziej szczegółowy zestawie narzędzi kontenerowych: runc i containerd.

architektura platformy Docker w systemie Linux

runc jest narzędziem wiersza polecenia systemu Linux do tworzenia i uruchamiania kontenerów zgodnie ze specyfikacją środowiska uruchomieniowego kontenera OCI.

containerd to demon, który zarządza cyklem życia kontenera — od pobierania i rozpakowywania obrazu kontenera po wykonywanie kontenera i nadzór nad nim.

W systemie Windows przyjęliśmy inne podejście. Po rozpoczęciu pracy z platformą Docker w celu obsługi kontenerów systemu Windows utworzyliśmy bezpośrednio usługę HCS (Host Compute Service). Ten wpis w blogu jest pełen informacji o tym, dlaczego utworzyliśmy rozwiązanie HCS i dlaczego początkowo podjęliśmy to podejście do kontenerów.

początkowa wersja architektury silnika Docker w systemie Windows

W tym momencie platforma Docker nadal wywołuje połączenie bezpośrednio z usługą HCS. Jednak w przyszłości narzędzia do zarządzania kontenerami, które się rozszerzają, aby włączyć kontenery Windows oraz hosta kontenerów Windows, mogą wywoływać containerd i runhcs tak jak w przypadku containerd i runc w systemie Linux.

runhcs

runhcs to rozwidlenie runc. Podobnie jak runc, runhcs jest klientem wiersza polecenia do uruchamiania aplikacji spakowanych zgodnie z formatem Open Container Initiative (OCI) i jest zgodną implementacją specyfikacji Open Container Initiative.

Różnice funkcjonalne między runc a runhcs obejmują:

  • runhcs działa w systemie Windows. Komunikuje się z HCS, aby tworzyć i zarządzać kontenerami.

  • runhcs może uruchamiać różne typy kontenerów.

    • System Windows i Linux Hyper-V izolacja
    • Kontenery procesów systemu Windows (obraz kontenera musi być zgodny z hostem kontenera)

Użycie :

runhcs run [ -b bundle ] <container-id>

<container-id> to nazwa wystąpienia kontenera, które uruchamiasz. Nazwa musi być unikatowa na hoście kontenera.

Katalog pakietu (przy użyciu -b bundle) jest opcjonalny. Podobnie jak w przypadku runc, kontenery są konfigurowane przy użyciu pakietów. Pakiet kontenera to katalog z plikiem specyfikacji OCI kontenera "config.json". Wartość domyślna "bundle" to bieżący katalog.

Plik specyfikacji OCI "config.json", musi mieć dwa pola do poprawnego uruchomienia:

  • Ścieżka do przestrzeni tymczasowej kontenera
  • Ścieżka do katalogu warstwy kontenera

Polecenia kontenera dostępne w elementach runhcs obejmują:

  • Narzędzia do tworzenia i uruchamiania kontenera

    • uruchom tworzy i uruchamia kontener
    • twórz twórz kontener
  • Narzędzia do zarządzania procesami uruchomionymi w kontenerze:

    • uruchamia proces zdefiniowany przez użytkownika w utworzonym kontenerze
    • exec uruchamia nowy proces wewnątrz kontenera
    • pauza pauza wstrzymuje wszystkie procesy wewnątrz kontenera
    • wznawia wznawia wszystkie procesy, które zostały wcześniej wstrzymane
    • ps ps wyświetla procesy uruchomione wewnątrz kontenera
  • Narzędzia do zarządzania stanem kontenera

    • stan wyprowadza stan kontenera
    • kill wysyła określony sygnał (ustawienie domyślne: SIGTERM) do procesu inicjowania kontenera
    • usunąć usuwa wszystkie zasoby przechowywane przez kontener, co jest często stosowane w przypadku odłączonego kontenera.

Jedynym poleceniem, które można uznać za wielokontenerowe, jest list. Wyświetla listę uruchomionych lub wstrzymanych kontenerów uruchomionych przez runhcs z podanym katalogiem głównym.

HCS

Mamy dwa wrapery dostępne na GitHub, aby połączyć się z HCS. Ponieważ HCS to C API, otoki (wrappers) ułatwiają wywoływanie HCS z języków wyższego poziomu.

  • hcsshim - HCSShim jest napisany w Języku Go i jest podstawą runhcs. Pobierz najnowszą wersję z aplikacji AppVeyor lub skompiluj ją samodzielnie.
  • dotnet-computevirtualization — dotnet-computevirtualization to opakowanie języka C# dla HCS.

Jeśli chcesz użyć rozwiązania HCS (bezpośrednio lub za pośrednictwem opakowania), lub chcesz utworzyć opakowanie dla języka Rust/Haskell/InsertYourLanguage wokół HCS, proszę pozostaw komentarz.

Aby uzyskać bardziej szczegółowe informacje na temat rozwiązania HCS, obejrzyj prezentację prezentacji DockerCon Johna Starka.

containerd/cri

Ważny

Obsługa cri jest dostępna tylko w systemie Windows Server 2019/Windows 10 1809 lub nowszym.

Chociaż specyfikacje OCI definiują pojedynczy kontener, CRI (interfejs środowiska uruchomieniowego kontenera) opisuje kontenery jako obciążenia w udostępnionym środowisku piaskownicy, zwanym pod. Zasobniki mogą zawierać co najmniej jedno obciążenie kontenera. Pody pozwalają orkiestratorom kontenerów, takim jak Kubernetes i Service Fabric Mesh, obsługiwać pogrupowane obciążenia, które powinny działać na tym samym hoście, z współdzielonymi zasobami, takimi jak pamięć i sieci wirtualne.

Podczas gdy aplikacje runHCS i containerd mogą zarządzać systemami Windows Server 2016 lub nowszymi, obsługa podów (grup kontenerów) wymagała wprowadzenia zmian powodujących niezgodność w narzędziach kontenerowych w systemie Windows. Obsługa CRI jest dostępna w systemie Windows Server 2019/Windows 10 1809 i późniejszych.