Zagłębmy się w budowę platformy Docker i jej fundamentalne elementy.
Zakładam, że masz już ogólne pojęcie o Dockerze. Jeśli nie, odsyłam Cię do poprzedniego tekstu, gdzie te zagadnienia zostały wyjaśnione.
Z pewnością rozumiesz, jak istotną rolę odgrywa Docker w metodyce DevOps. Za tym niezwykłym narzędziem stoi przemyślana i solidna architektura. Czyż nie?
Jednak zanim przejdziemy do szczegółów, spójrzmy na ewolucję systemów wirtualizacji.
Wirtualizacja tradycyjna kontra wirtualizacja nowej generacji
W przeszłości tworzyliśmy maszyny wirtualne, z których każda zawierała kompletny system operacyjny, co wiązało się z dużym zużyciem zasobów i sporą wagą.
Obecnie, dzięki kontenerom Dockera, mamy do dyspozycji jeden system operacyjny, a zasoby są współdzielone między kontenerami. To sprawia, że są one znacznie lżejsze i uruchamiają się w mgnieniu oka.
Struktura Dockera
Poniżej znajduje się uproszczony schemat struktury platformy Docker.
Przejdźmy teraz do omówienia poszczególnych elementów tej struktury.
Silnik Dockera
Jest to kluczowy element całego ekosystemu Dockera. Silnik Dockera to aplikacja o architekturze klient-serwer. Jest instalowany na komputerze hosta. Silnik Dockera składa się z trzech części:
- Serwer: inaczej demon dockera, dockerd. Zajmuje się tworzeniem obrazów dockera i zarządzaniem nimi, a także kontenerami, sieciami i innymi.
- Rest API: Umożliwia wydawanie poleceń demonowi dockera.
- Interfejs wiersza poleceń (CLI): To klient służący do wprowadzania poleceń dockera.
Klient Dockera
Użytkownicy mogą komunikować się z Dockerem za pośrednictwem klienta. Po wprowadzeniu polecenia, klient przekazuje je do demona dockerd, który je realizuje. Polecenia dockera korzystają z Docker API. Klient może współpracować z wieloma demonami.
Rejestry Dockera
To miejsca, gdzie przechowywane są obrazy Dockera. Mogą to być rejestry publiczne lub prywatne. Docker Hub jest domyślnym, publicznym repozytorium obrazów. Możliwe jest również utworzenie i korzystanie z własnego rejestru prywatnego.
W trakcie wykonywania poleceń typu docker pull lub docker run, potrzebny obraz dockera jest pobierany z określonego rejestru. Z kolei polecenie docker push służy do umieszczania obrazów w rejestrze.
Obiekty Dockera
W interakcji z Dockerem korzystamy z obrazów, kontenerów, wolumenów, sieci – są to tzw. obiekty Dockera.
Obrazy
Obrazy Dockera to szablony, wyłącznie do odczytu, zawierające instrukcje potrzebne do stworzenia kontenera Dockera. Obraz można pobrać z Docker Hub i użyć go w oryginalnej formie lub rozszerzyć go o własne instrukcje i utworzyć nowy, zmodyfikowany obraz. Za pomocą pliku dockerfile można również tworzyć własne obrazy. Plik ten zawiera wszystkie instrukcje niezbędne do utworzenia i uruchomienia kontenera i pozwala stworzyć własny, unikatowy obraz dockera.
Obraz Dockera składa się z warstwy bazowej, tylko do odczytu, i górnej warstwy, która może być modyfikowana. Gdy zmieniamy plik dockerfile i przebudowujemy obraz, tylko zmodyfikowana część jest odbudowywana w górnej warstwie.
Kontenery
Uruchomienie obrazu dockera powoduje powstanie kontenera. Wszystkie aplikacje i ich środowisko działają w ramach tego kontenera. Za pomocą Docker API lub CLI możemy uruchamiać, zatrzymywać i usuwać kontenery.
Poniżej przykład polecenia uruchamiającego kontener Ubuntu:
docker run -i -t ubuntu /bin/bash
Wolumeny
Trwałe dane, generowane i wykorzystywane przez kontenery Dockera, są przechowywane w wolumenach. Zarządzanie nimi odbywa się za pomocą Docker CLI lub Docker API. Wolumeny działają zarówno na kontenerach Windows, jak i Linux. Zamiast zapisywać dane w zapisywalnej warstwie kontenera, zaleca się korzystanie z wolumenów. Treść wolumenu istnieje niezależnie od cyklu życia kontenera, więc jego wykorzystanie nie wpływa na rozmiar kontenera.
Do uruchomienia kontenera z wolumenem używa się flagi -v lub –mount. W podanym przykładzie wykorzystywany jest wolumen geekvolume z kontenerem newsblog.pl.
docker run -d --name newsblog.pl -v geekvolume:/app nginx:latest
Sieci
Sieć Dockera to kanał komunikacji między izolowanymi kontenerami. W Dockerze stosuje się pięć podstawowych sterowników sieciowych:
- Bridge: Jest to domyślny sterownik dla kontenerów. Stosowany, gdy aplikacja działa na niezależnych kontenerach, gdzie wiele kontenerów komunikuje się z tym samym hostem.
- Host: Ten sterownik znosi izolację sieciową między kontenerami i hostem. Wykorzystywany w sytuacjach, gdy izolacja nie jest potrzebna.
- Overlay: Umożliwia komunikację usług w roju (swarm). Stosowany, gdy kontenery działają na różnych hostach lub gdy tworzone są usługi roju składające się z wielu aplikacji.
- None: Wyłącza całą sieć.
- Macvlan: Przypisuje adres mac kontenerom, imitując urządzenia fizyczne. Ruch między kontenerami odbywa się z wykorzystaniem tych adresów. Przydatny, gdy chcemy, aby kontenery zachowywały się jak urządzenia fizyczne, na przykład w trakcie migracji konfiguracji maszyny wirtualnej.
Podsumowanie
Mam nadzieję, że przybliżyłem Ci architekturę Dockera i jej kluczowe elementy. Eksperymentuj z Dockerem, aby zgłębić swoją wiedzę. Jeśli interesuje Cię praktyczne szkolenie, sprawdź kurs Docker Mastery.
Czy podobał Ci się ten artykuł? Zachęcam do dzielenia się nim ze znajomymi!
newsblog.pl