Dlaczego warto używać Dockera i kontenerów

Książka opublikowana w 1981 roku, zatytułowana  Nailing Jelly to a Tree , opisuje oprogramowanie jako „mgliste i trudne do opanowania”. Było to prawdą w 1981 roku i nie mniej jest prawdą prawie cztery dekady temu. Oprogramowanie, niezależnie od tego, czy jest to zakupiona aplikacja, czy też zbudowana samodzielnie, pozostaje trudne do wdrożenia, zarządzania i uruchomienia.

Kontenery platformy Docker umożliwiają opanowanie oprogramowania. Możesz użyć Dockera, aby opakować aplikację w taki sposób, aby problemy z jej wdrażaniem i uruchomieniem - jak ujawnić ją w sieci, jak zarządzać wykorzystaniem pamięci masowej i pamięci oraz we / wy, jak kontrolować uprawnienia dostępu - są obsługiwane poza samą aplikacją i w sposób spójny we wszystkich aplikacjach „kontenerowych”. Kontener Docker można uruchomić na dowolnym hoście zgodnym z systemem operacyjnym (Linux lub Windows), na którym jest zainstalowane środowisko wykonawcze Docker.

Docker oferuje wiele innych korzyści oprócz tej poręcznej enkapsulacji, izolacji, przenośności i kontroli. Kontenery Dockera są małe (megabajty). Zaczynają się natychmiast. Mają własne wbudowane mechanizmy wersjonowania i ponownego wykorzystania komponentów. Można je łatwo udostępniać za pośrednictwem publicznego Docker Hub lub prywatnego repozytorium.

W tym artykule zbadam, w jaki sposób kontenery platformy Docker ułatwiają zarówno tworzenie, jak i wdrażanie oprogramowania - rozwiązania problemów, w jaki sposób je rozwiązują, kiedy są właściwą odpowiedzią na problem, a kiedy nie.

Przed kontenerami platformy Docker

Od wielu lat oprogramowanie dla przedsiębiorstw jest zwykle wdrażane na „czystym metalu” (tj. Instalowane w systemie operacyjnym, który ma pełną kontrolę nad podstawowym sprzętem) lub na maszynie wirtualnej (tj. Instalowane w systemie operacyjnym, który współdzieli podstawowy sprzęt) z innymi systemami operacyjnymi „gościa”). Naturalnie, instalacja na gołym metalu sprawiła, że ​​poruszanie się po oprogramowaniu i jego aktualizacja były bardzo trudne - dwa ograniczenia utrudniały działowi IT sprawne reagowanie na zmiany w potrzebach biznesowych.

Potem pojawiła się wirtualizacja. Platformy wirtualizacyjne (znane również jako „hiperwizory”) umożliwiły wielu maszynom wirtualnym współdzielenie pojedynczego systemu fizycznego, przy czym każda maszyna wirtualna emuluje zachowanie całego systemu wraz z własnym systemem operacyjnym, pamięcią masową i we / wy, w sposób izolowany . Dział IT mógł teraz skuteczniej reagować na zmiany wymagań biznesowych, ponieważ maszyny wirtualne można było klonować, kopiować, migrować i wyłączać lub wyłączać w celu zaspokojenia popytu lub oszczędzania zasobów.

Maszyny wirtualne pomogły również obniżyć koszty, ponieważ więcej maszyn wirtualnych można skonsolidować na mniejszej liczbie maszyn fizycznych. Starsze systemy, w których działają starsze aplikacje, można przekształcić w maszyny wirtualne i fizycznie wycofać, aby zaoszczędzić jeszcze więcej pieniędzy.

Ale maszyny wirtualne nadal mają swój udział w problemach. Maszyny wirtualne są duże (gigabajty), a każda z nich zawiera pełny system operacyjny. Tylko tyle zwirtualizowanych aplikacji można skonsolidować w jednym systemie. Udostępnianie maszyny wirtualnej nadal zajmuje sporo czasu. Wreszcie przenośność maszyn wirtualnych jest ograniczona. Po pewnym czasie maszyny wirtualne nie są w stanie zapewnić szybkości, sprawności i oszczędności, jakich wymagają szybko rozwijające się firmy.

Zalety kontenerów Docker

Kontenery działają trochę jak maszyny wirtualne, ale w znacznie bardziej szczegółowy i szczegółowy sposób. Izolują pojedynczą aplikację i jej zależności - wszystkie zewnętrzne biblioteki oprogramowania, których aplikacja wymaga do uruchomienia - zarówno od podstawowego systemu operacyjnego, jak i od innych kontenerów. Wszystkie aplikacje kontenerowe współdzielą jeden, wspólny system operacyjny (Linux lub Windows), ale są podzielone między siebie i od całego systemu.

Zalety kontenerów Docker pojawiają się w wielu miejscach. Oto niektóre z głównych zalet platformy Docker i kontenerów:

Docker umożliwia bardziej efektywne wykorzystanie zasobów systemowych

Instancje aplikacji kontenerowych zużywają znacznie mniej pamięci niż maszyny wirtualne, uruchamiają się i zatrzymują szybciej, a na sprzęcie hosta mogą być upakowane znacznie gęsto. Wszystko to przekłada się na mniejsze wydatki na IT.

Oszczędności kosztów będą się różnić w zależności od tego, jakie aplikacje są w grze i jak mogą wymagać dużej ilości zasobów, ale kontenery niezmiennie okazują się bardziej wydajne niż maszyny wirtualne. Można również zaoszczędzić na kosztach licencji oprogramowania, ponieważ do obsługi tych samych obciążeń potrzeba znacznie mniej instancji systemu operacyjnego.

Docker umożliwia szybsze cykle dostarczania oprogramowania

Oprogramowanie dla przedsiębiorstw musi szybko reagować na zmieniające się warunki. Oznacza to zarówno łatwe skalowanie w celu zaspokojenia popytu, jak i łatwą aktualizację w celu dodania nowych funkcji zgodnie z wymaganiami firmy. 

Kontenery Docker ułatwiają szybkie wprowadzanie nowych wersji oprogramowania z nowymi funkcjami biznesowymi do środowiska produkcyjnego oraz szybkie przywracanie poprzedniej wersji, jeśli zajdzie taka potrzeba. Ułatwiają również wdrażanie strategii, takich jak wdrożenia niebieskie / zielone.

Docker umożliwia przenoszenie aplikacji

Tam, gdzie uruchamiasz aplikację korporacyjną, ma znaczenie - za zaporą, ze względu na bliskość i bezpieczeństwo; lub w chmurze publicznej, dla łatwego publicznego dostępu i dużej elastyczności zasobów. Ponieważ kontenery Docker zawierają wszystko, czego aplikacja potrzebuje do uruchomienia (i tylko te elementy), umożliwiają łatwe przenoszenie aplikacji między środowiskami. Każdy host z zainstalowanym środowiskiem wykonawczym Docker - czy to laptop programisty, czy instancja chmury publicznej - może uruchomić kontener Docker.

Docker wyróżnia się architekturą mikrousług

Lekkie, przenośne i samowystarczalne kontenery Docker ułatwiają tworzenie oprogramowania zgodnie z myśleniem przyszłościowym, aby nie próbować rozwiązywać jutrzejszych problemów za pomocą wczorajszych metod programowania.

Jednym z kontenerów wzorców oprogramowania, które ułatwiają, są mikrousługi, w których aplikacje składają się z wielu luźno powiązanych komponentów. Rozkładając tradycyjne, „monolityczne” aplikacje na osobne usługi, mikrousługi umożliwiają skalowanie, modyfikowanie i serwisowanie różnych części aplikacji biznesowej osobno - przez oddzielne zespoły i na osobnych ramach czasowych, jeśli odpowiada to potrzebom biznes. 

Kontenery nie są wymagane do implementacji mikrousług, ale są doskonale dostosowane do podejścia mikrousług i ogólnie do zwinnych procesów programistycznych.

Problemy, których kontenery Docker nie rozwiązują

Pierwszą rzeczą, o której należy pamiętać w przypadku kontenerów, jest ta sama rada, która dotyczy każdej technologii oprogramowania: to nie jest srebrna kula. Same kontenery Docker nie są w stanie rozwiązać każdego problemu. W szczególności:

Docker nie rozwiąże problemów z bezpieczeństwem

Oprogramowanie w kontenerze może być domyślnie bezpieczniejsze niż oprogramowanie działające na gołym metalu, ale to tak, jakby powiedzieć, że dom z zamkniętymi drzwiami jest bezpieczniejszy niż dom z otwartymi drzwiami. Nie mówi nic o stanie sąsiedztwa, widocznej obecności kosztowności kuszących złodzieja, zwyczajach ludzi tam mieszkających i tak dalej. Kontenery mogą dodawać warstwę zabezpieczeń do aplikacji, ale tylko w ramach ogólnego programu zabezpieczania aplikacji w kontekście.

Docker nie zmienia aplikacji w magiczny sposób w mikrousługi

Jeśli umieścisz w kontenerach istniejącą aplikację, może to zmniejszyć zużycie zasobów i ułatwić jej wdrażanie. Ale nie zmienia to automatycznie projektu aplikacji ani sposobu jej interakcji z innymi aplikacjami. Korzyści te wynikają tylko z czasu i wysiłku programisty, a nie tylko z mandatu do przeniesienia wszystkiego do kontenerów.

Umieść starą szkołę aplikacji monolitycznej lub w stylu SOA w kontenerze, a otrzymasz, no cóż, starą aplikację w kontenerze. To nie czyni go bardziej użytecznym w twojej pracy; jeśli już, może to uczynić go mniej użytecznym. 

Docker nie zastępuje maszyn wirtualnych

Jednym z utrwalonych mitów na temat kontenerów jest to, że powodują one dezaktualizację maszyn wirtualnych. Wiele aplikacji, które działały na maszynie wirtualnej, można przenieść do kontenera, ale to nie znaczy, że wszystkie mogą lub powinny. Jeśli działasz na przykład w branży z surowymi wymogami prawnymi, możesz nie być w stanie zamienić kontenerów na maszyny wirtualne, ponieważ maszyny wirtualne zapewniają większą izolację niż kontenery.

Obudowa do kontenerów Docker

Praca nad rozwojem przedsiębiorstwa jest znana z tego, że jest skrępowana i wolno reaguje na zmiany. Deweloperzy korporacyjni cały czas borykają się z takimi ograniczeniami - ograniczeniami narzuconymi im przez IT, wymaganiami stawianymi im przez cały biznes. Docker i kontenery dają programistom więcej swobody, której pragną, a jednocześnie zapewniają sposoby tworzenia aplikacji biznesowych, które szybko reagują na zmieniające się warunki biznesowe.