Co to jest Docker? Iskra rewolucji kontenerowej

Docker to platforma programowa do budowania aplikacji opartych na kontenerach - małych i lekkich środowiskach wykonawczych, które współużytkują jądro systemu operacyjnego, ale poza tym działają niezależnie od siebie. Chociaż koncepcja kontenerów istnieje już od jakiegoś czasu, Docker, projekt open source uruchomiony w 2013 r., Pomógł spopularyzować tę technologię i pomógł napędzać trend w kierunku konteneryzacji i mikrousług  w tworzeniu oprogramowania, który stał się znany jako natywny dla chmury rozwój.

Co to są kontenery?

Jednym z celów nowoczesnego tworzenia oprogramowania jest odizolowanie od siebie aplikacji znajdujących się na tym samym hoście lub klastrze, aby nie zakłócały wzajemnie działania lub konserwacji. Może to być trudne ze względu na pakiety, biblioteki i inne komponenty oprogramowania wymagane do ich działania. Jednym z rozwiązań tego problemu są maszyny wirtualne, które całkowicie oddzielają aplikacje na tym samym sprzęcie i ograniczają do minimum konflikty między komponentami oprogramowania i konkurencję o zasoby sprzętowe. Ale maszyny wirtualne są nieporęczne - każda wymaga własnego systemu operacyjnego, więc zazwyczaj ma rozmiar gigabajtów - i jest trudna w utrzymaniu i uaktualnieniu.

Kontenery natomiast izolują od siebie środowiska wykonawcze aplikacji, ale współużytkują podstawowe jądro systemu operacyjnego. Zwykle są mierzone w megabajtach, zużywają znacznie mniej zasobów niż maszyny wirtualne i uruchamiają się niemal natychmiast. Można je upakować o wiele gęsto na tym samym sprzęcie i masowo obracać w górę iw dół, przy znacznie mniejszym wysiłku i nakładzie pracy. Kontenery zapewniają wysoce wydajny i wysoce szczegółowy mechanizm łączenia składników oprogramowania w rodzaje aplikacji i stosów usług potrzebnych w nowoczesnym przedsiębiorstwie, a także do utrzymywania ich aktualizacji i konserwacji.

Doker

Co to jest Docker?

Docker to projekt typu open source, który ułatwia tworzenie kontenerów i aplikacji opartych na kontenerach. Pierwotnie stworzony dla Linuksa, Docker działa teraz również w Windows i MacOS. Aby zrozumieć, jak działa Docker, przyjrzyjmy się niektórym składnikom, których użyjesz do tworzenia aplikacji kontenerowych platformy Docker.

Dockerfile

Każdy kontener Docker zaczyna się od pliku Dockerfile . Dockerfile to plik tekstowy napisany w łatwej do zrozumienia składni, który zawiera instrukcje tworzenia obrazu Dockera (więcej o tym za chwilę). Plik Dockerfile określa system operacyjny, na którym będzie się opierał kontener, wraz z językami, zmiennymi środowiskowymi, lokalizacjami plików, portami sieciowymi i innymi potrzebnymi komponentami - i oczywiście, co faktycznie będzie robił kontener po uruchomieniu.

Paige Niedringhaus z ITNext ma dobre zestawienie składni pliku Dockerfile.

Obraz platformy Docker

Po zapisaniu pliku Dockerfile wywołujesz buildnarzędzie Docker , aby utworzyć obraz na podstawie tego pliku Dockerfile. Podczas gdy plik Dockerfile to zestaw instrukcji, które mówią, buildjak utworzyć obraz, obraz Dockera to przenośny plik zawierający specyfikacje, dla których składników oprogramowania kontener będzie działać i jak. Ponieważ plik Dockerfile prawdopodobnie będzie zawierał instrukcje dotyczące pobierania niektórych pakietów oprogramowania z repozytoriów online, należy zadbać o jawne określenie odpowiednich wersji, w przeciwnym razie plik Dockerfile może generować niespójne obrazy w zależności od tego, kiedy zostanie wywołany. Ale po utworzeniu obraz jest statyczny. Codefresh oferuje bardziej szczegółowe spojrzenie na tworzenie obrazu.

Uruchom Docker

runNarzędzie Dockera to polecenie, które faktycznie uruchamia kontener. Każdy kontener jest instancją obrazu. Kontenery są zaprojektowane jako przejściowe i tymczasowe, ale można je zatrzymać i ponownie uruchomić, co powoduje wprowadzenie kontenera do tego samego stanu, w jakim został zatrzymany. Co więcej, wiele instancji kontenerów tego samego obrazu może być uruchomionych jednocześnie (o ile każdy kontener ma unikalną nazwę). Przegląd kodu zawiera świetne zestawienie różnych opcji runpolecenia, aby dać ci poczucie, jak to działa.

Docker Hub

Chociaż tworzenie kontenerów jest łatwe, nie myśl, że będziesz musiał zbudować każdy obraz od zera. Docker Hub to repozytorium SaaS do udostępniania kontenerów i zarządzania nimi, w którym znajdziesz oficjalne obrazy Docker z projektów open source i dostawców oprogramowania oraz nieoficjalne obrazy od ogółu społeczeństwa. Możesz pobrać obrazy kontenerów zawierające przydatny kod lub przesłać własne, udostępnić je otwarcie lub ustawić jako prywatne. Jeśli wolisz, możesz również utworzyć lokalny rejestr platformy Docker. (Docker Hub miał w przeszłości problemy z obrazami, które były przesyłane z wbudowanymi backdoorami).

Silnik platformy Docker

Docker Engine jest rdzeniem Dockera, podstawowej technologii klient-serwer, która tworzy i uruchamia kontenery. Ogólnie rzecz biorąc, gdy ktoś mówi Döcker rodzajowo i nie mówi o firmie lub całego projektu, to znaczy, Docker Engine. W ofercie dostępne są dwie różne wersje Docker Engine: Docker Engine Enterprise i Docker Engine Community.

Docker Community Edition

Docker wydał wersję Enterprise Edition w 2017 roku, ale jego oryginalna oferta, przemianowana na Docker Community Edition, pozostaje otwarta i bezpłatna, i nie straciła żadnych funkcji w tym procesie. Zamiast tego wersja Enterprise Edition, która kosztuje 1500 USD na węzeł rocznie, zawierała zaawansowane funkcje zarządzania, w tym elementy sterujące do zarządzania klastrami i obrazami oraz monitorowanie luk w zabezpieczeniach. Na blogu BoxBoat znajduje się zestawienie różnic między wersjami.

Jak Docker podbił świat kontenerów

Pomysł, że dany proces można uruchomić z pewnym stopniem izolacji od reszty jego środowiska operacyjnego, był od dziesięcioleci wbudowany w systemy operacyjne Unix, takie jak BSD i Solaris. Oryginalna technologia kontenerów Linuksa, LXC, to metoda wirtualizacji na poziomie systemu operacyjnego do uruchamiania wielu izolowanych systemów Linux na jednym hoście. LXC było możliwe dzięki dwóm cechom Linuksa: przestrzeniom nazw, które opakowują zestaw zasobów systemowych i przedstawiają je procesowi, aby wyglądało na to, że są przeznaczone dla tego procesu; oraz grupy cgroup, które zarządzają izolacją i wykorzystaniem zasobów systemowych, takich jak procesor i pamięć, dla grupy procesów.

Kontenery oddzielają aplikacje od systemów operacyjnych, co oznacza, że ​​użytkownicy mogą mieć czysty i minimalny system operacyjny Linux i uruchamiać wszystko inne w jednym lub kilku izolowanych kontenerach. A ponieważ system operacyjny jest oddzielony od kontenerów, możesz przenieść kontener na dowolny serwer Linux, który obsługuje środowisko wykonawcze kontenera.

Docker wprowadził kilka znaczących zmian w LXC, które sprawiają, że kontenery są bardziej przenośne i elastyczne w użyciu. Korzystając z kontenerów Docker, możesz wdrażać, replikować, przenosić i tworzyć kopie zapasowe obciążenia jeszcze szybciej i łatwiej niż przy użyciu maszyn wirtualnych. Docker zapewnia elastyczność podobną do chmury w każdej infrastrukturze obsługującej kontenery. Narzędzia obrazów kontenerów Dockera były również postępem w stosunku do LXC, umożliwiając programiście tworzenie bibliotek obrazów, komponowanie aplikacji z wielu obrazów oraz uruchamianie tych kontenerów i aplikacji w infrastrukturze lokalnej lub zdalnej.

Docker Compose, Docker Swarm i Kubernetes

Docker ułatwia również koordynowanie zachowań między kontenerami, a tym samym tworzenie stosów aplikacji przez łączenie kontenerów. Docker Compose został stworzony przez firmę Docker w celu uproszczenia procesu tworzenia i testowania aplikacji wielokontenerowych. Jest to narzędzie wiersza poleceń, przypominające klienta Docker, które pobiera specjalnie sformatowany plik deskryptora, aby składać aplikacje z wielu kontenerów i uruchamiać je wspólnie na jednym hoście. (Zobacz samouczek Docker Compose, aby dowiedzieć się więcej).

Bardziej zaawansowane wersje tych zachowań - tak zwane orkiestracja kontenerów - są oferowane przez inne produkty, takie jak Docker Swarm i Kubernetes. Ale Docker zapewnia podstawy. Mimo że Swarm wyrósł z projektu Docker, Kubernetes stał się de facto preferowaną platformą do orkiestracji Dockera .

Zalety platformy Docker

Kontenery Docker umożliwiają tworzenie aplikacji korporacyjnych i biznesowych, które są łatwiejsze w montażu, utrzymaniu i przenoszeniu niż ich konwencjonalne odpowiedniki. 

Kontenery platformy Docker umożliwiają izolację i ograniczanie przepustowości

Kontenery Docker utrzymują aplikacje odizolowane nie tylko od siebie, ale także od systemu bazowego. To nie tylko zapewnia czystszy stos oprogramowania, ale także ułatwia dyktowanie, w jaki sposób dana aplikacja kontenerowa wykorzystuje zasoby systemowe - procesor, procesor graficzny, pamięć, we / wy, sieć i tak dalej. Ułatwia również zapewnienie oddzielenia danych i kodu. (Zobacz „Kontenery platformy Docker są bezstanowe i niezmienne” poniżej).

Kontenery Docker umożliwiają przenoszenie

Kontener platformy Docker działa na dowolnej maszynie obsługującej środowisko wykonawcze kontenera. Aplikacje nie muszą być powiązane z systemem operacyjnym hosta, więc zarówno środowisko aplikacji, jak i podstawowe środowisko operacyjne mogą być czyste i minimalne.

Na przykład kontener MySQL dla systemu Linux będzie działał w większości systemów Linux obsługujących kontenery. Wszystkie zależności aplikacji są zwykle dostarczane w tym samym kontenerze.

Aplikacje oparte na kontenerach można łatwo przenosić z systemów lokalnych do środowisk chmurowych lub z laptopów programistów na serwery, o ile system docelowy obsługuje Docker i dowolne narzędzia innych firm, które mogą być z nim używane, takie jak Kubernetes (zobacz „Kontenery platformy Docker ułatwiają orkiestrację i skalowanie” poniżej).

Zwykle obrazy kontenerów platformy Docker muszą być tworzone dla określonej platformy. Na przykład kontener systemu Windows nie będzie działał w systemie Linux i odwrotnie. Wcześniej jednym ze sposobów obejścia tego ograniczenia było uruchomienie maszyny wirtualnej, która uruchomiła wystąpienie wymaganego systemu operacyjnego, i uruchomienie kontenera na maszynie wirtualnej.

Jednak od tego czasu zespół Docker opracował bardziej eleganckie rozwiązanie, zwane  manifestami , które umożliwia umieszczanie obrazów dla wielu systemów operacyjnych obok siebie w tym samym obrazie. Manifesty są nadal uważane za eksperymentalne, ale sugerują, w jaki sposób kontenery mogą stać się wieloplatformowym rozwiązaniem aplikacji, a także rozwiązaniem międzyśrodowiskowym. 

Kontenery Docker umożliwiają tworzenie kompozycji

Większość aplikacji biznesowych składa się z kilku oddzielnych komponentów zorganizowanych w stos - serwera WWW, bazy danych, pamięci podręcznej. Pojemniki umożliwiają zestawienie tych elementów w funkcjonalną całość z łatwo wymienialnymi częściami. Każdy element jest dostarczany z innego pojemnika i może być konserwowany, aktualizowany, wymieniany i modyfikowany niezależnie od innych.

Jest to zasadniczo model mikrousług projektowania aplikacji. Dzieląc funkcjonalność aplikacji na osobne, niezależne usługi, model mikrousług stanowi antidotum na spowolnienie tradycyjnych procesów programistycznych i nieelastycznych aplikacji monolitycznych. Lekkie i przenośne kontenery ułatwiają tworzenie i utrzymywanie aplikacji opartych na mikrousługach.

Kontenery platformy Docker ułatwiają aranżację i skalowanie

Ponieważ kontenery są lekkie i wymagają niewielkich nakładów, możliwe jest uruchomienie ich o wiele więcej w danym systemie. Ale kontenery mogą być również używane do skalowania aplikacji w klastrach systemów oraz do zwiększania lub zmniejszania usług, aby sprostać skokom popytu lub oszczędzić zasoby.

Najbardziej korporacyjne wersje narzędzi do wdrażania, zarządzania i skalowania kontenerów są dostarczane za pośrednictwem projektów innych firm. Najważniejszym z nich jest Kubernetes firmy Google, system automatyzujący wdrażanie i skalowanie kontenerów, ale także sposób ich łączenia, równoważenia obciążenia i zarządzania nimi. Kubernetes zapewnia również sposoby tworzenia i ponownego używania definicji aplikacji z wieloma kontenerami lub „wykresów Helm”, dzięki czemu można tworzyć złożone stosy aplikacji i zarządzać nimi na żądanie.

Docker zawiera również własny wbudowany system orkiestracji, tryb Swarm, który jest nadal używany w przypadkach mniej wymagających. To powiedziawszy, Kubernetes stał się czymś z domyślnego wyboru; w rzeczywistości Kubernetes jest dołączony do Docker Enterprise Edition.

Zastrzeżenia dotyczące platformy Docker

Pojemniki rozwiązują wiele problemów, ale nie są lekarstwem na wszystkie. Niektóre z ich wad wynikają z projektu, podczas gdy inne są produktami ubocznymi ich konstrukcji.

Kontenery platformy Docker nie są maszynami wirtualnymi

Najczęstszym błędem koncepcyjnym, jaki ludzie popełniają w przypadku kontenerów, jest utożsamianie ich z maszynami wirtualnymi. Jednak ponieważ kontenery i maszyny wirtualne używają różnych mechanizmów izolacji, mają one wyraźnie różne zalety i wady.

Maszyny wirtualne zapewniają wysoki stopień izolacji procesów, ponieważ działają we własnej instancji systemu operacyjnego. Ten system operacyjny też nie musi być taki sam, jak ten, który działa na hoście. Maszyna wirtualna z systemem Windows może działać na hiperwizorze systemu Linux i odwrotnie.

Kontenery natomiast używają kontrolowanych części zasobów systemu operacyjnego hosta; wiele aplikacji korzysta z tego samego jądra systemu operacyjnego w wysoce zarządzany sposób. W rezultacie aplikacje kontenerowe nie są tak dokładnie izolowane jak maszyny wirtualne, ale zapewniają wystarczającą izolację dla większości obciążeń.

Kontenery platformy Docker nie zapewniają prędkości bez oprogramowania