Co to jest Docker?

Napiwek

Ta zawartość jest fragmentem książki eBook, architektury mikrousług platformy .NET dla konteneryzowanych aplikacji platformy .NET dostępnych na platformie .NET Docs lub jako bezpłatnego pliku PDF, który można odczytać w trybie offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Docker to projekt typu open source służący do automatyzacji wdrażania aplikacji jako przenośnych, samodzielnie wystarczających kontenerów, które mogą działać w chmurze lub lokalnie. Platforma Docker to również firma , która promuje i rozwija tę technologię, pracując we współpracy z dostawcami usług w chmurze, Linux i Windows, w tym z firmą Microsoft.

Diagram showing the places Docker containers can run.

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 Linux funkcji Hyper-V), gdzie host oznacza serwer lub maszynę wirtualną.

Deweloperzy mogą używać środowisk programistycznych w systemach Windows, Linux lub macOS. Na komputerze deweloperzy uruchamia hosta platformy Docker, na którym są wdrażane obrazy platformy Docker, w tym aplikację 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 systemu Windows lub macOS. Te produkty instalują niezbędną maszynę wirtualną (hosta platformy Docker) do hostowania kontenerów.

Aby uruchomić kontenery systemu Windows, istnieją dwa typy środowisk uruchomieniowych:

  • 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.

  • Kontenery funkcji Hyper-V 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 funkcji 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 z uruchomioną kontenerem funkcji Hyper-V wymaga dodatkowego parametru. Aby uzyskać szczegółowe informacje, zobacz Kontenery funkcji Hyper-V.

Porównywanie kontenerów platformy Docker z maszynami wirtualnymi

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

Virtual Machines Kontenery platformy Docker
Diagram showing the hardware/software stack of a traditional VM. Diagram showing the hardware/software stack for Docker containers.
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 funkcji Hyper-V, gdzie każdy kontener działa wewnątrz specjalnej maszyny wirtualnej na kontener).

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

W przypadku maszyn wirtualnych istnieją trzy warstwy podstawowe na serwerze hosta, od dołu: infrastruktura, system operacyjny hosta i funkcja Hypervisor oraz wszystkie te, które każda maszyna wirtualna ma własny system operacyjny i wszystkie niezbędne biblioteki. W przypadku platformy Docker serwer hosta ma tylko infrastrukturę i system operacyjny, a następnie aparat kontenera, który przechowuje kontener izolowany, ale współużytkuje podstawowe usługi 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 to, że środowisko (zależności) jest takie samo w różnych 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 procesorów słów, a fotokopiarki były używane wszędzie (rodzaj).

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 pokładu przezroczystych arkuszy zawierających jeden akapit.

  2. Aby wydać zestaw liter, wybierasz arkusze z potrzebnymi akapitami, a następnie stosujesz je i wyrównujesz, aby wyglądały i czytały dobrze.

  3. Na koniec umieścisz zestaw w fotokopiarka i naciśnij przycisk zacznij produkować tyle liter, ile jest wymaganych.

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

Na platformie Docker każda warstwa to wynikowy zestaw zmian, które mają miejsce 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.