Chcesz dowiedzieć się więcej o architekturze Dockera i jej działaniu?
Znaczenie Dockera w DevOps jest niezaprzeczalne! I faktem jest, że ta fantastyczna technologia składa się z wysokiej klasy architektury, która definiuje jej funkcjonalność. Docker projektuje aspekty wydajności zasobów, co czyni go lepszym niż wirtualizacja kompletnego serwera sprzętowego. Kontener zawiera wszystkie niezbędne elementy do uruchomienia aplikacji. Dzięki temu Docker jest przenośną alternatywą do tworzenia aplikacji. Co więcej, programiści mogą łatwo przenosić aplikację między różnymi fazami rozwoju takimi jak: testowanie czy wersja produkcyjna.
Docker ma jednolitą architekturę, która obsługuje nowoczesną koncepcję DevOps do dostarczania oprogramowania. Istnieją składniki, które wspólnie współpracują w ramach platformy Docker, aby ta architektura bezproblemowo działała. Zanim zaimplementujesz perspektywy rozwoju aplikacji w Dockerze, ważne jest, aby zrozumieć jego architekturę. Dlatego też poniżej przedstawiam najważniejsze jej aspekty.
Docker Engine i jego komponenty
Pierwszym elementem do zrozumienia architektury platformy docker jest uzyskanie wglądu w koncepcję silnika platformy Docker (Docker Engine). Posiada komponenty, które są odpowiedzialne za działanie całego systemu. Docker Engine stoi za usługowymi aspektami tworzenia, montażu, dostarczania i uruchamiania aplikacji.
Komponenty używane w Docker Engine to:
Docker Daemon
Proces w tle, który ma na celu zarządzanie kontenerami platformy Docker, obrazami, pamięcią masową, woluminami i sieciami. Śledzeniem żądań API jest głównym zadaniem Docker daemona.
Docker Engine REST API
Jak sama nazwa wskazuje, jest to konkretny interfejs API, którego aplikacje używają do interakcji l z demonem Dockera. Klient HTTP ma dostęp do REST API. Dokładniej, ten interfejs API podaje instrukcje demonowi Docker dotyczące tego, co powinien zrobić w silniku i architekturze.
Docker CLI
Interfejs wiersza poleceń jest klientem, który współdziała z demonem Dockera. Jest to całkiem przydatne przy wprowadzaniu lub uzyskiwaniu dostępu do poleceń dockera. Docker CLI upraszcza sposób zarządzania wystąpieniami kontenera. Bezproblemowe zarządzanie instancjami kontenera ułatwia programistom przeprowadzenie procesu tworzenia nowych aplikacji.
Podział architektury Docker
Docker działa w architekturze klient-serwer. Cała architektura platformy Dockera składa się z czterech głównych komponentów, którymi są: klient platformy Docker (Docker Client), rejestr platformy Docker (Docker Registry), host platformy Docker (Docker Host) i obiekty platformy Docker (Docker Objects). Wszystkie te komponenty realizują swoje określone role w ramach platformy, aby pomóc programistom w realizacji ich projektów rozwojowych ze wszystkimi niezbędnymi elementami.
Klient Dockera
Komponent Docker Client to element, który umożliwia programistom lub użytkownikom interakcję z platformą Docker. Klient platformy Docker może być obecny na tym samym hoście, co demon platformy Docker. Jeśli nie, klient może również połączyć się z demonem, który jest dostępny na zdalnym hoście. Klient platformy Docker zamierza komunikować się z co najmniej jednym demonem.
Co więcej, klient Docker dostarcza również CLI (Command Line Interface), który pozwala programistom rozpocząć budowanie, uruchamianie lub zatrzymywanie poleceń dockera dla aplikacji do demona. Innym ważnym celem klienta Docker jest oferowanie możliwości pobierania obrazów z odpowiednich rejestrów i uruchamiania ich na hoście Docker.
Typowe polecenia platformy Docker, które są używane w celu spełnienia implementacji architektury klienta platformy Docker, to kompilacja platformy docker, ściąganie platformy docker i uruchamianie platformy docker. Za każdym razem, gdy wykonywane jest dowolne polecenie docker, klient zamierza wysłać je do demona docker. A potem demon wykonuje polecenie. Polecenia Dockera wykorzystują API Dockera.
Rejestr Dockera
Rejestry platformy Docker bardziej przypominają lokalizację, w której przechowywane są wszystkie obrazy platformy Docker. Nie ma problemu, aby rejestry były albo publicznymi, albo prywatnymi rejestrami Dockera. Deweloperzy mogą tworzyć własne prywatne rejestry wedle własne uznania oraz potrzeby. Ale Docker Hub to jeden domyślny rejestr platformy, który ma zapas obrazów dockera. Jest publiczny i dostępny dla wszystkich.
W momencie wykonywania poleceń docker run i pull wymagany obraz zostanie odszukany i przygotowany do pobrania i ostatecznie pobrany. W momencie użycia polecenia docker push obraz dockera (często zmodyfikowany) zostanie przesłany do wskazanego rejestru.
Rejestr platformy Docker to wysoce skalowalna i bezstanowa aplikacja po stronie serwera, która może przechowywać i dystrybuować obrazy platformy Docker. Rejestr jest przydatny, jeśli zamierzasz zaimplementować ścisłą kontrolę nad atrybutami przechowywania obrazu.
Rejestry Dockera umożliwiają również integrację aspektów przechowywania i dystrybucji obrazów z wewnętrznym przepływem pracy. Docker Hub jest głównym miejscem z którego można pobrać obrazy do budowy kontenerów. Dzięki wstępnie skonfigurowanemu rejestrowi otrzymujesz automatyczne konta, konta organizacji i inne podobne funkcje.
Docker Host
Oferuje środowisko gotowe do uruchamiania i wykonywania aplikacji. Docker Host obejmuje obrazy dockera, demona, sieci, pamięć masową i kontenery. Sieć hosta ma inny zestaw zalet dla hosta platformy Docker i platformy jako całości. Gdy używasz trybu sieci hosta dla dowolnego kontenera, stos sieciowy kontenera nie zostanie odizolowany od głównego hosta platformy Docker.
Co więcej, kontener nie otrzymuje żadnego konkretnego przydziału adresów IP. Jeśli używasz kontenera, który łączy się z portem 80 i jest zaimplementowany w sieci hosta, aplikacja pod kontenerem będzie dostępna na porcie 80, przez adres IP hosta. Sterownik sieci hosta działa tylko na hostach z systemem Linux i nie jest zgodny z platformą Docker Desktop dla komputerów Mac i Windows. Co więcej, nie jest kompatybilny nawet z Docker EE dla Windows Server.
Obiekty Dockera
Obiekty platformy Docker przypominają elementy, które są używane we wszystkich aspektach składania aplikacji. Oto krótkie wyjaśnienie różnych obiektów Dockera i ich ogólnych funkcji:
Obrazy
Obraz Dockera nie wymaga żadnego elementu, aby kontynuować budowanie kontenera lub dodawanie niektórych elementów w celu dostosowania i rozszerzenia konfiguracji. Co więcej, obrazy kontenerów można również udostępniać zespołowi, przechowując je w prywatnym rejestrze kontenerów. Możesz także liczyć na udostępnianie obrazów innym, przechowując je w publicznym rejestrze, takim jak Docker Hub.
Obrazy platformy Docker można wywoływać lub pobierać z rejestru publicznego lub prywatnego i używać bez żadnych modyfikacji. Możesz wprowadzać wszelkie zmiany w obrazie, które dostosują go do naszych potrzeb
Docker umożliwa również tworzenie własnych obrazów od zera, dzięki temu można utworzyć dedykowany obraz pod indywidualne potrzeby. Na podstawie takiego obrazu, możliwe będzie uruchomienie kontenera lub kontenerów z instancją aplikacji. Nic nie stoi na przeszkodzie, aby takie obraz później był również modyfikowany zgodnie z potrzebami.
Podstawowa warstwa obrazu jest tylko do odczytu, podczas gdy najwyższa warstwa przyjmuje edycje przez Ciebie przygotowane. Pamiętaj, że za każdym razem, gdy obraz Dockera, koniecznie odbuduj go i zmodyfikuj. Tylko zmodyfikowana część zostanie odbudowana na górnej warstwie obrazu.
Kontenery
Kontenery są tworami podobnymi do maszyn wirtualnych, jednak znacznie się od nich różnią. Główną różnicą jest to, że kontener zbudowany z obrazu nie znacznie lżejszy niż nawet podstawowa maszyna wirtualna. Co nie przeszkadza, aby dostarczyć w pełni skalowane i funkcjonalne środowisko dla aplikacji. Kontenery tworzą istotne środowisko, w którym aplikacje mogą rozpocząć proces przesyłania i wykonywania danych. Kontener jest dobrze zdefiniowany przez obraz platformy dokującej i wstępne konfiguracja dla niego przygotowane.
Kontener nie jest w żaden sposób ograniczony do opcji przechowywania ani połączeń sieciowych. Mają dostęp tylko do zasobów znajdujących się w obrazie. Twórca może to jednak zmienić w czasie tworzenia obrazu.
Jako, że kontenery są lekkie, możliwe jest ich posiadanie w znacznie większej liczbie niż zwykłych maszyn wirtualnych. Takie podejście zapewnia wyższą wydajność oraz zapewnia odporność na awarie.
Możesz użyć interfejsu CLI lub interfejsu Docker API do wywoływania poleceń start, stop, delete w celu uzyskania dostępu do kontenera. Kontenery są określane jako standardowe jednostki oprogramowania, które są odpowiedzialne za pakowanie kodu i jego zależności w celu niezawodnego i szybkiego uruchamiania aplikacji w dowolnym środowisku. Ogromnym plusem kontenerów jest możliwość ich przeniesienia w krótkim czasie na inny serwer bez przerw w dostępnie do aplikacji dla użytkowników.
Sieć
Docker implementuje sieć w swojej architekturze w sposób bardzo oparty na aplikacji. Co więcej, networking oferuje kilka opcji przy zachowaniu abstrakcji dla programistów. Dwa podejścia: domyślne i zdefiniowane przez użytkownika w Dockerze pozwalają na konfigurację sieci w kontenerach.
Po zainstalowaniu platformy Docker w celu wdrożenia uzyskujesz dostęp do trzech różnych sieci domyślnych, a mianowicie brak sieci (none), most (bridge) i host. Sieci none i host są odpowiedzialne za bycie znaczącą częścią stosu sieciowego platformy Docker. Sieć bridge jest odpowiedzialna za automatyczne tworzenie podsieci IP i bramy w kontenerze.
Wszystkie kontenery znajdujące się pod siecią bridge mogą komunikować się ze sobą za pomocą adresowania IP. Niestety ma również pewne ograniczenia w zakresie wykrywania usług i użyteczności sieci.
Drugi typ sieci to sieć zdefiniowana przez użytkownika. Administratorzy mają możliwość konfigurowania wielu sieci tego typu. Istnieją trzy typy sieci zdefiniowanych przez użytkownika: bridge, overlay i sieć Macvlan. Różnica między domyślnymi a zdefiniowanymi przez użytkownika sieciami typu bridge polega na tym, że w ramach sieci zdefiniowanej przez użytkownika nie trzeba implementować przekierowania portów dla kontenerów, aby umożliwić im komunikowanie się ze sobą.
Komunikacja pomiędzy kontenerami na różnych hostach wymaga konfiguracji sieci overlay. Z drugiej strony sieć Macvlan działa po usunięciu mostu (bridge), który znajduje się między kontenerem a hostem przy użyciu sieci bridge i overlay.
Storage
Ostatnim elementem środowiska opartego o Dockera jest magazyn (storage). Umożliwia on przechowywanie danych w warstwie kontenera, która pozwala na zapisywanie danych. Potrzebny jest do tego sterownik storage. Restart kontenera w podejściu domyślnym spowoduje utratę danych, które ona przechowuje. Istnieje kilka opcji na trwałe przechowywanie danych w kontenerze:
Woluminy danych
Zapewnia możliwość tworzenia trwałej pamięci masowej i zmiany nazw woluminów, tworzenia ich listy, a także dostosowywania listy kontenerów w powiązaniu z woluminem.
Data Volume Container
Przypomina bardziej alternatywne podejście, w ramach którego kontener obsługuje określony wolumin i montuje go na innych kontenerach.
Montowanie lokalnego katalogu
Do kontenera można zamontować katalog lokalny hosta. Aby skorzystać z tej opcji, woluminy powinny znajdować się w folderze woluminów platformy Docker.
Wtyczki
Oferuje możliwość łączenia się z zewnętrznymi platformami pamięci masowej.
Podsumowanie
Budowa architektury Dockera nie jest trudna do zrozumienia. Jednocześnie daje duże możliwości budowania zwinnych środowisk, które zapewniają wysoką wydajność w trakcie dostępności do aplikacji, która działa w oparciu o taką architekturę. Rozszerzeniem Dockera jest Kubernetes, który pozwala w jeszcze sprawniejszy sposób grupować kontenery do pracy.
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).
Hmmm. Liczyłem na ciekawszy opis. Może artykuł powinien zostać podzielony na części lub mieć więcej przykładów. Taki trochę zlepek definicji wyszedł.
Wszystko w swoim czasie. Kilka praktycznych podejść, można przeczytać tutaj: https://beitadmin.pl/category/docker/