Definiowanie kontenerów
Gdy firma Contoso migruje i zwirtualizuje różne obciążenia, może wystąpić opcja konteneryzowania niektórych obciążeń. Administrator systemu Windows Server oceni kontenery, zrozumie, jak działają i jakie mogą być korzyści wynikające z ich używania. Korzyści mogą obejmować mobilność, elastyczność, zwiększoną wydajność i gęstości serwerów. Wszystkie te korzyści przyczyniają się do bardziej zoptymalizowanych obciążeń serwera i spójności środowisk deweloperskich.
Co to są kontenery?
Kontener służy do tworzenia pakietów aplikacji wraz ze wszystkimi jego zależnościami i abstrakcją ją z systemu operacyjnego hosta, w którym zostanie uruchomiony. Kontenery zapewniają lekkie środowisko programistyczne i środowisko uruchomieniowe, w którym aplikacje mogą być uruchamiane i łatwo udostępniane podczas programowania. Nie tylko kontener jest odizolowany od systemu operacyjnego hosta, ale także odizolowany od innych kontenerów. Kontenery izolowane zapewniają środowisko uruchomieniowe wirtualne, które może również zwiększyć bezpieczeństwo i niezawodność aplikacji uruchamianych w nich.
Tradycyjnie aplikacja programowa jest opracowywana do uruchamiania na obsługiwanej platformie procesora, sprzętu i systemu operacyjnego. Aplikacje programowe zwykle wymagają dodatkowego kodowania w celu zapewnienia obsługi różnych platform środowiska uruchomieniowego. W przypadku tak wielu różnych systemów obliczeniowych potrzebna jest bardziej wydajna platforma tworzenia oprogramowania i zarządzania, aby zapewnić przenośność między wieloma środowiskami obliczeniowymi. Kontenery pomagają zapewnić taką przenośność.
Korzyści wynikające z używania kontenerów
Zalety korzystania z kontenerów obejmują następujące elementy:
Możliwość uruchamiania w dowolnym miejscu. Kontenery mogą działać na różnych platformach, takich jak Linux, Windows i Mac. Mogą być hostowane na lokalnej stacji roboczej, na serwerach w lokalnych centrach danych lub aprowizacji w chmurze.
Izolacja. W przypadku aplikacji kontener wydaje się być kompletnym systemem operacyjnym. Zasoby procesora CPU, pamięci, magazynu i sieci są zwirtualizowane w kontenerze i są odizolowane od platformy hosta i innych aplikacji.
Zwiększona wydajność. Kontenery można szybko wdrażać, aktualizować i skalować w celu zapewnienia bardziej elastycznego cyklu życia tworzenia, testowania i produkcji. Ponieważ są one wydajniejsze pod względem zasobów, które zużywają, ich ślad jest mniejszy, co pozwala na zwiększenie gęstości na serwerach.
Spójne środowisko programistyczne. Deweloperzy używają kontenerów jako spójnego i przewidywalnego środowiska programistycznego, które obsługuje różne języki programistyczne, takie jak Java, .NET, Python i Node.js. Deweloperzy wiedzą, że niezależnie od miejsca wdrożenia aplikacji kontener zapewni, że aplikacja działa zgodnie z oczekiwaniami.
Jak działają kontenery
Procesor w standardowym komputerze z systemem Windows ma dwa różne tryby: tryb jądra i tryb użytkownika. Podstawowe składniki systemu operacyjnego i większość sterowników urządzeń działa w trybie jądra, podczas gdy aplikacje działają w trybie użytkownika.
Podczas instalowania technologii kontenera na komputerze każdy kontener tworzy izolowany, lekki silos używany do uruchamiania aplikacji w systemie operacyjnym hosta. Kontener opiera się na systemie plików i udostępnia większość jądra systemu operacyjnego hosta, aby uzyskać dostęp do systemu plików i rejestru.
Każdy kontener ma własną kopię plików systemowych trybu użytkownika, które są odizolowane od innych kontenerów i z własnego środowiska trybu użytkownika hosta. Możliwość izolowania trybu użytkownika jest zapewniana przez obraz podstawowy kontenera, który składa się z plików systemowych trybu użytkownika potrzebnych do obsługi spakowanej aplikacji. Szablony obrazów podstawowych kontenerów zapewniają podstawową warstwę usług systemu operacyjnego używanych przez konteneryzowaną aplikację, która nie jest udostępniana (lub ograniczona) z warstwy trybu jądra hosta.
Warstwa, w której są wprowadzane zmiany aplikacji i kodu, znajduje się na tych wstępnie utworzonych warstwach obrazu podstawowego systemu operacyjnego kontenera. Te podstawowe warstwy systemu operacyjnego są opracowywane i aktualizowane oddzielnie od warstw kontenera, które są aktywnie używane na potrzeby zmian aplikacji lub kodu. Warstwy podstawowe są ściągane do lokalnego środowiska roboczego bez aktualizowania, a następnie pracy są uruchamiane w warstwach kontenera uruchamianych na warstwach podstawowych. Umożliwia to korzystanie ze środowisk deweloperskich, które są mniejsze, bardziej lekkie i bardziej przenośne.
Podczas kompilowania własnego obrazu kontenera do hostowania aplikacji należy zacząć od wykorzystania obrazu podstawowego systemu operacyjnego kontenera lub wstępnie utworzonego obrazu kontenera, który ma potrzebne zależności. Na podstawie tych warstw utworzysz własne warstwy przy użyciu aplikacji, którą chcesz uruchomić w kontenerze. Każda operacja tworzenia obrazu kontenera jest oparta na ostatnim. Spowoduje to dodanie rozmiaru obrazu, ale umożliwia wygodne segregowanie systemu operacyjnego, struktury, zależności i warstw aplikacji.
Kontenery i mikrousług
Aplikacje mikrousług są definiowane jako natywne podejście architektury chmury, w którym jedna aplikacja składa się z wielu luźno powiązanych i niezależnie wdrażalnych mniejszych składników lub usług. Każdy z tych mniejszych składników lub usług może być reprezentowany przez kontener. Jednak kontenery nie muszą implementować architektury mikrousług.
Kontener może hostować aplikację monolityczną, ale nie został zaprojektowany z myślą o tym zamiarze. Domyślnie platforma Docker (lub inne środowisko uruchomieniowe kontenera), a także orkiestrator kontenerów zakłada, że kontener może być zawsze bezpiecznie usuwany/usuwany, a inny kontener może po prostu odbywać się w razie potrzeby. Na maszynie wirtualnej, jeśli skonfigurujesz aplikację do zapisu na dysku maszyny wirtualnej, możesz bezpiecznie zatrzymać i uruchomić maszynę wirtualną, a dane będą utrwalane na dysku — tak jak maszyna wirtualna będzie bezpiecznie uruchamiać i kontynuować jego działanie. W przypadku kontenerów, jeśli usuniesz kontener i przełączysz go w jego miejsce, będą tam znajdować się tylko istniejące warstwy tego obrazu kontenera. W środowisku mikrousług nie powinno to być problemem, jeśli masz trwałość stanu i danych.
Mimo że można uruchomić kontener i zarządzać nim podobnie jak maszyna wirtualna, zaleca się wdrożenie praktyk rozdzielenia stanu i danych oraz upewnienie się, że kontener może zostać usunięty. Pozwoli to skorzystać z innych rozwiązań, takich jak DevOps.
W praktyce nie należy przechowywać żadnych danych ani stanu wewnątrz obrazu kontenera i jego warstw. Zamiast tego należy użyć zewnętrznego magazynu trwałego, który umożliwia dowolnemu wystąpieniu kontenera dostęp do niego.