Udostępnij za pośrednictwem


Co to jest platforma Docker?

Napiwek

Ta treść jest fragmentem eBooka "Architektura mikrousług .NET dla konteneryzowanych aplikacji .NET", dostępnego na .NET Docs lub jako bezpłatny plik PDF do pobrania i czytania w trybie offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail (Architektura mikrousług platformy .NET dla konteneryzowanych aplikacji platformy .NET).

Docker to projekt open-source do automatyzacji wdrażania aplikacji jako przenośnych, samodzielnych kontenerów, które mogą działać w chmurze lub lokalnie. Docker to także firma, która promuje i rozwija tę technologię, współpracując z dostawcami technologii w chmurze oraz systemów Linux i Windows, w tym z firmą Microsoft.

Diagram przedstawiający miejsca, w których można uruchamiać kontenery platformy Docker.

Rysunek 2–2. Platforma Docker wdraża kontenery we wszystkich warstwach chmury hybrydowej.

Kontenery platformy Docker mogą działać w dowolnym miejscu, lokalnie w centrum danych klienta, u zewnętrznego dostawcy usług lub w chmurze na platformie Azure. Kontenery obrazów platformy Docker mogą działać natywnie w systemach Linux i Windows. Jednak obrazy systemu Windows mogą być uruchamiane tylko na hostach z systemem Windows, a obrazy systemu Linux mogą być uruchamiane na hostach z systemem Linux i hostach z systemem Windows (do tej pory przy użyciu maszyny wirtualnej z systemem Hyper-V Linux), gdzie host oznacza serwer lub maszynę wirtualną.

Deweloperzy mogą używać środowisk programistycznych w systemach Windows, Linux lub macOS. Na komputerze deweloper uruchamia host Docker, na którym są wdrażane obrazy Docker, w tym aplikacja i jej zależności. Deweloperzy pracujący w systemie Linux lub macOS używają hosta platformy Docker opartego na systemie Linux i mogą tworzyć obrazy tylko dla kontenerów systemu Linux. (Deweloperzy pracujący nad systemem macOS mogą edytować kod lub uruchamiać interfejs wiersza polecenia platformy Docker z systemu macOS, ale od czasu pisania tego tekstu kontenery nie działają bezpośrednio w systemie macOS). Deweloperzy pracujący nad systemem Windows mogą tworzyć obrazy dla kontenerów systemu Linux lub Windows.

Aby hostować kontenery w środowiskach deweloperskich i udostępniać dodatkowe narzędzia deweloperskie, platforma Docker dostarcza program Docker Desktop dla windows lub macOS. Te produkty instalują niezbędną maszynę wirtualną (hosta platformy Docker) do hostowania kontenerów.

Aby uruchomić kontenery systemu Windows, są dwa rodzaje runtimes:

  • Kontenery systemu Windows Server zapewniają izolację aplikacji za pomocą technologii izolacji procesów i przestrzeni nazw. Kontener systemu Windows Server współużytkuje jądro z hostem kontenera i wszystkimi kontenerami uruchomionymi na hoście.

  • Hyper-V Kontenery rozszerzają izolację zapewnianą przez kontenery systemu Windows Server, uruchamiając każdy kontener na wysoce zoptymalizowanej maszynie wirtualnej. W tej konfiguracji jądro hosta kontenera nie jest współużytkowane z kontenerami Hyper-V, zapewniając lepszą izolację.

Obrazy dla tych kontenerów są tworzone w taki sam sposób i działają w taki sam sposób. Różnica polega na tym, jak kontener jest tworzony na podstawie obrazu. Uruchomienie kontenera Hyper-V wymaga dodatkowego parametru. Aby uzyskać szczegółowe informacje, zobacz Hyper-V Containers.

Porównywanie kontenerów platformy Docker z maszynami wirtualnymi

Rysunek 2–3 przedstawia porównanie maszyn wirtualnych i kontenerów platformy Docker.

Maszyny wirtualne Kontenery Docker
diagram przedstawiający stos sprzętu/oprogramowania tradycyjnej maszyny wirtualnej. Diagram przedstawiający stos sprzętu/oprogramowania dla kontenerów platformy Docker.
Maszyny wirtualne obejmują aplikację, wymagane biblioteki lub pliki binarne oraz pełny system operacyjny gościa. Pełna wirtualizacja wymaga więcej zasobów niż konteneryzacja. Kontenery obejmują aplikację i wszystkie jej zależności. Współużytkują jednak jądro systemu operacyjnego z innymi kontenerami, które działają jako izolowane procesy w przestrzeni użytkownika w systemie operacyjnym hosta. (Z wyjątkiem kontenerów Hyper-V, gdzie każdy kontener działa wewnątrz specjalnej maszyny wirtualnej na każdy kontener).

Rysunek 2–3. Porównanie tradycyjnych maszyn wirtualnych z kontenerami platformy Docker

W przypadku maszyn wirtualnych istnieją trzy podstawowe warstwy na serwerze hosta, od dołu do góry: infrastruktura, system operacyjny hosta i Hypervisor, a na górze każda maszyna wirtualna ma własny system operacyjny i wszystkie niezbędne biblioteki. W przypadku platformy Docker, serwer hosta posiada tylko infrastrukturę i system operacyjny, na którym działa silnik kontenera. Silnik ten utrzymuje kontenery w izolacji, jednocześnie umożliwiając współdzielenie podstawowych usług systemu operacyjnego.

Ponieważ kontenery wymagają znacznie mniejszej liczby zasobów (na przykład nie potrzebują pełnego systemu operacyjnego), można je łatwo wdrożyć i szybko rozpocząć. Dzięki temu można mieć większą gęstość, co oznacza, że umożliwia uruchamianie większej liczby usług w tej samej jednostce sprzętowej, co zmniejsza koszty.

Jako efekt uboczny działania na tym samym jądrze uzyskujesz mniej izolacji niż maszyny wirtualne.

Głównym celem obrazu jest zapewnienie, że środowisko (zależności) pozostaje takie samo we wszystkich wdrożeniach. Oznacza to, że możesz debugować go na maszynie, a następnie wdrożyć go na innej maszynie z gwarantowanym tym samym środowiskiem.

Obraz kontenera to sposób tworzenia pakietu aplikacji lub usługi i wdrażania go w niezawodny i powtarzalny sposób. Można powiedzieć, że platforma Docker nie jest tylko technologią, ale także filozofią i procesem.

W przypadku korzystania z platformy Docker nie usłyszysz, jak deweloperzy mówią: "To działa na mojej maszynie, dlaczego nie jest w środowisku produkcyjnym?" Mogą po prostu powiedzieć: "Działa na platformie Docker", ponieważ spakowana aplikacja platformy Docker może być wykonywana w dowolnym obsługiwanym środowisku platformy Docker i uruchamia sposób, w jaki był przeznaczony dla wszystkich celów wdrażania (takich jak Dev, QA, staging i production).

Prosta analogia

Być może prosta analogia może pomóc zrozumieć podstawową koncepcję platformy Docker.

Wróćmy na chwilę do lat 50. Nie było edytorów tekstu, a fotokopiarki były używane wszędzie (tak jakby).

Wyobraź sobie, że odpowiadasz za szybkie wydawanie partii listów zgodnie z potrzebami, aby wysyłać je do klientów przy użyciu prawdziwego papieru i kopert, aby były dostarczane fizycznie na adres każdego klienta (nie było wtedy żadnych wiadomości e-mail).

W pewnym momencie zdajesz sobie sprawę, że listy są tylko składem dużego zestawu akapitów, które są wybierane i uporządkowane zgodnie z potrzebami, zgodnie z celem listu, więc opracowujesz system wydawania listów szybko, spodziewając się ogromnej podwyżki.

System jest prosty:

  1. Zaczynasz od zestawu przezroczystych arkuszy zawierających jeden akapit na każdym.

  2. Aby wydać zestaw dokumentów, wybierasz arkusze z potrzebnymi akapitami, a następnie układasz i wyrównujesz je, aby dobrze wyglądały i były czytelne.

  3. Na koniec umieścisz zestaw w fotokopiarce i naciśniesz przycisk start, aby uzyskać tyle kopii, ile potrzeba.

Tak więc, upraszczając, jest to podstawowy pomysł platformy Docker.

Na platformie Docker każda warstwa to wynikowy zestaw zmian, które występują w systemie plików po wykonaniu polecenia, takiego jak instalowanie programu.

Dlatego gdy "spojrzysz" na system plików po skopiowaniu warstwy, zobaczysz wszystkie pliki uwzględnione w warstwie, gdy program został zainstalowany.

Obraz można traktować jako pomocniczy dysk twardy tylko do odczytu gotowy do zainstalowania w "komputerze", na którym jest już zainstalowany system operacyjny.

Podobnie można traktować kontener jako "komputer" z zainstalowanym obrazem twardym. Kontener, podobnie jak komputer, może być włączony lub wyłączony.