Zrozumienie Dockera

Używam Dockera od kilku miesięcy do strukturyzowania procesu tworzenia/dostarczania projektów internetowych. Oferuję czytelnikom Habrakhabr tłumaczenie artykułu wprowadzającego na temat dokera - „Zrozumienie okna dokowanego”.

Co to jest doker?

Docker to otwarta platforma do tworzenia, dostarczania i obsługi aplikacji. Docker został zaprojektowany, aby szybciej dostarczać aplikacje. Dzięki dokowaniu możesz oddzielić aplikację od infrastruktury i traktować ją jako aplikację zarządzaną. Docker pomaga szybciej wysyłać kod, szybciej testować, szybciej dostarczać aplikacje i skracać czas między napisaniem kodu a jego uruchomieniem. Docker robi to poprzez lekką platformę do wirtualizacji kontenerów, korzystając z procesów i narzędzi, które pomagają zarządzać aplikacjami i hostować je.

U podstaw okna dokowanego można uruchomić niemal każdą aplikację bezpiecznie odizolowaną w kontenerze. Bezpieczna izolacja umożliwia jednoczesne uruchomienie wielu kontenerów na tym samym hoście. Lekki charakter kontenera, który działa bez dodatkowego obciążenia związanego z hiperwizorem, pozwala wydobyć więcej ze sprzętu.

Platforma i narzędzia do wirtualizacji kontenerów mogą przydać się w następujących przypadkach:

  • pakowanie aplikacji (i używanych komponentów) do kontenerów dokowanych;
  • dystrybucja i dostawa tych kontenerów do Twoich zespołów w celu opracowania i przetestowania;
  • rozmieszczając te kontenery w swoich zakładach produkcyjnych, zarówno w centrach danych, jak i w chmurach.

Do czego mogę używać okna dokowanego?

Szybko publikuj swoje aplikacje

Docker świetnie nadaje się do organizowania cyklu rozwoju. Docker umożliwia programistom uruchamianie lokalnych kontenerów z aplikacjami i usługami. Co później pozwala na integrację z procesem ciągłej integracji i przepływem pracy wdrożeniowej.

Na przykład programiści piszą kod lokalnie i udostępniają współpracownikom swój stos programistyczny (zestaw obrazów platformy Docker). Kiedy będą gotowi, wypychają kod i kontenery na stronę testową i przeprowadzają niezbędne testy. Z witryny testowej mogą wysyłać kod i obrazy do produkcji.

Łatwiejsze rozkładanie i rozkładanie

Platforma oparta na kontenerach dokowanych ułatwia przenoszenie ładunku. Kontenery Docker mogą działać na komputerze lokalnym, rzeczywistym, na maszynie wirtualnej w centrum danych lub w chmurze.

Przenośność i lekkość okna dokowanego ułatwiają dynamiczne zarządzanie obciążeniem. Możesz użyć okna dokowanego do wdrożenia lub zamknięcia aplikacji lub usług. Szybkość okna dokowanego pozwala na wykonanie tego w czasie zbliżonym do rzeczywistego.

Większe ładunki i większa ładowność

Docker jest lekki i szybki. Zapewnia odporną, ekonomiczną alternatywę dla maszyn wirtualnych opartych na hypervisorze. Jest to szczególnie przydatne w środowiskach o dużym obciążeniu, na przykład podczas tworzenia własnej chmury lub platformy jako usługi. Ale jest również przydatny w małych i średnich aplikacjach, gdy chcesz lepiej wykorzystać posiadane zasoby.

Główne komponenty Dockera

Docker składa się z dwóch głównych komponentów:

  • Docker: platforma wirtualizacyjna typu open source;
  • Docker Hub: nasza platforma jako usługa do dystrybucji i zarządzania kontenerami Docker.

Notatka! Docker jest dystrybuowany na licencji Apache 2.0.

Architektura Dockera

Docker wykorzystuje architekturę klient-serwer. Klient Docker komunikuje się z demonem Docker, który przejmuje ciężar tworzenia, uruchamiania i dystrybucji kontenerów. Zarówno klient, jak i serwer mogą działać w tym samym systemie, można podłączyć klienta do zdalnego demona dokującego. Klient i serwer komunikują się za pośrednictwem gniazda lub interfejsu API RESTful.

Zrozumienie Dockera

Demon Dockera

Jak pokazano na diagramie, demon działa na komputerze hosta. Użytkownik nie wchodzi w interakcję bezpośrednio z serwerem, ale wykorzystuje w tym celu klienta.

Klient Dockera

Klient Dockera, program dokera, jest głównym interfejsem Dockera. Otrzymuje polecenia od użytkownika i wchodzi w interakcję z demonem dokującym.

Wewnątrz okna dokowanego

Aby zrozumieć, z czego składa się doker, musisz wiedzieć o trzech komponentach:

  • obrazy
  • rejestr
  • pojemniki

Obrazy

Obraz platformy Docker jest szablonem tylko do odczytu. Na przykład obraz może zawierać system operacyjny Ubuntu z Apache i aplikacją. Obrazy służą do tworzenia kontenerów. Docker ułatwia tworzenie nowych obrazów, aktualizowanie istniejących lub pobieranie obrazów utworzonych przez inne osoby. Obrazy są składnikami kompilacji okna dokowanego.

rejestr

Rejestr Dockera przechowuje obrazy. Istnieją rejestry publiczne i prywatne, z których można pobierać i przesyłać obrazy. Publiczny rejestr Dockera to Centrum Dockera. Przechowywana jest tam ogromna kolekcja obrazów. Jak wiesz, obrazy mogą być tworzone przez Ciebie lub możesz korzystać z obrazów stworzonych przez innych. Rejestry są składnikiem dystrybucji.

pojemniki

Kontenery przypominają katalogi. Kontenery zawierają wszystko, czego potrzebuje aplikacja do działania. Każdy kontener jest tworzony na podstawie obrazu. Kontenery można tworzyć, uruchamiać, zatrzymywać, migrować lub usuwać. Każdy kontener jest izolowany i zapewnia bezpieczną platformę dla aplikacji. Kontenery są elementami pracy.

Jak więc działa Docker?

Póki co wiemy, że:

  • możemy tworzyć obrazy, w których znajdują się nasze aplikacje;
  • możemy tworzyć kontenery z obrazów do uruchamiania aplikacji;
  • Możemy dystrybuować obrazy za pośrednictwem Docker Hub lub innego rejestru obrazów.

Zobaczmy, jak te elementy pasują do siebie.

Jak działa obraz?

Wiemy już, że obraz jest szablonem tylko do odczytu, z którego tworzony jest kontener. Każdy obraz składa się z zestawu poziomów. Docker używa unijny system plików połączyć te poziomy w jeden obraz. Unijny system plików pozwala na przezroczyste nakładanie się plików i katalogów z różnych systemów plików (różnych gałęzi), tworząc spójny system plików.

Jednym z powodów, dla których okno dokowane jest lekkie, jest to, że wykorzystuje takie warstwy. Kiedy zmieniasz obraz, np. aktualizujesz aplikację, tworzona jest nowa warstwa. Zatem bez zastępowania całego obrazu lub jego odbudowywania, jak to może mieć miejsce w przypadku maszyny wirtualnej, dodawana lub aktualizowana jest tylko warstwa. Nie trzeba także rozpowszechniać całego nowego obrazu, dystrybuowana jest jedynie aktualizacja, co ułatwia i przyspiesza dystrybucję obrazów.

Sercem każdego obrazu jest obraz podstawowy. Na przykład ubuntu, podstawowy obraz Ubuntu lub fedora, podstawowy obraz dystrybucji Fedory. Możesz także użyć obrazów jako podstawy do tworzenia nowych obrazów. Na przykład, jeśli masz obraz Apache, możesz go użyć jako obrazu podstawowego dla swoich aplikacji internetowych.

Notatka! Docker zazwyczaj pobiera obrazy z rejestru Docker Hub.

Z tych obrazów podstawowych można tworzyć obrazy platformy Docker; kroki tworzenia tych obrazów nazywamy instrukcjami. Każda instrukcja tworzy nowy obraz lub poziom. Instrukcje będą następujące:

  • Uruchom polecenie
  • dodanie pliku lub katalogu
  • utworzenie zmiennej środowiskowej
  • instrukcje dotyczące tego, co należy uruchomić po uruchomieniu kontenera tego obrazu

Instrukcje te są przechowywane w pliku Dockerfile. Docker to czyta Dockerfile, podczas budowania obrazu, wykonuje te instrukcje i zwraca ostateczny obraz.

Jak działa rejestr dokerów?

Rejestr jest repozytorium obrazów dokerów. Po utworzeniu obrazu możesz opublikować go w publicznym rejestrze Docker Hub lub w rejestrze osobistym.

Za pomocą klienta dokowanego możesz wyszukiwać już opublikowane obrazy i pobierać je na maszynę dokującą w celu tworzenia kontenerów.

Docker Hub udostępnia publiczne i prywatne repozytoria obrazów. Wyszukiwanie i pobieranie obrazów z repozytoriów publicznych jest dostępne dla każdego. Zawartość prywatnych magazynów nie jest uwzględniana w wynikach wyszukiwania. Tylko Ty i Twoi użytkownicy możecie otrzymywać te obrazy i tworzyć z nich kontenery.

Jak działa kontener?

Kontener składa się z systemu operacyjnego, plików użytkownika i metadanych. Jak wiemy, każdy kontener tworzony jest z obrazu. Ten obraz informuje dokera, co znajduje się w kontenerze, jaki proces ma rozpocząć, kiedy kontener się uruchamia i inne dane konfiguracyjne. Obraz platformy Docker jest tylko do odczytu. Gdy okno dokowane uruchamia kontener, tworzy na wierzchu obrazu warstwę do odczytu/zapisu (przy użyciu systemu plików unii, jak wspomniano wcześniej), w której można uruchomić aplikację.

Co się stanie, gdy kontener się uruchomi?

Lub za pomocą programu dockerlub korzystając z interfejsu API RESTful, klient dokujący informuje demona dokującego, aby uruchomił kontener.

$ sudo docker run -i -t ubuntu /bin/bash

Przyjrzyjmy się temu poleceniu. Klient jest uruchamiany za pomocą polecenia docker, z opcją run, który mówi, że zostanie uruchomiony nowy kontener. Minimalne wymagania do uruchomienia kontenera to następujące atrybuty:

  • jakiego obrazu użyć do utworzenia kontenera. W naszym przypadku ubuntu
  • polecenie, które chcesz uruchomić po uruchomieniu kontenera. W naszym przypadku /bin/bash

Co dzieje się pod maską, gdy uruchamiamy to polecenie?

Docker w kolejności wykonuje następujące czynności:

  • pobiera obraz Ubuntu: okno dokowane sprawdza dostępność obrazu ubuntu na komputerze lokalnym, a jeśli go tam nie ma, pobierz go z Centrum Dockera. Jeśli istnieje obraz, używa go do utworzenia kontenera;
  • tworzy kontener: po odebraniu obrazu okno dokowane używa go do utworzenia kontenera;
  • inicjuje system plików i montuje poziom tylko do odczytu: w systemie plików tworzony jest kontener, a obraz dodawany jest do poziomu tylko do odczytu;
  • inicjuje sieć/most: tworzy interfejs sieciowy, który umożliwia komunikację okna dokowanego z maszyną hosta;
  • Ustawianie adresu IP: znajduje i ustawia adres;
  • Uruchamia określony proces: uruchamia Twoją aplikację;
  • Przetwarza i generuje dane wyjściowe z aplikacji: łączy i rejestruje standardowe wejście, wyjście i strumień błędów aplikacji, dzięki czemu można śledzić działanie aplikacji.

Masz teraz działający kontener. Możesz zarządzać swoim kontenerem, wchodzić w interakcję ze swoją aplikacją. Jeśli zdecydujesz się zatrzymać aplikację, usuń kontener.

Zastosowane technologie

Docker jest napisany w Go i wykorzystuje niektóre funkcje jądra Linuksa, aby zaimplementować powyższą funkcjonalność.

Przestrzenie nazw

Docker korzysta z technologii namespaces do organizowania izolowanych przestrzeni roboczych, które nazywamy kontenerami. Kiedy uruchamiamy kontener, doker tworzy zestaw przestrzeni nazw dla tego kontenera.

Tworzy to izolowaną warstwę, w której każdy aspekt kontenera działa we własnej przestrzeni nazw i nie ma dostępu do systemu zewnętrznego.

Lista niektórych przestrzeni nazw używanych przez dokera:

  • numer identyfikacyjny: izolować proces;
  • netto: do zarządzania interfejsami sieciowymi;
  • ipc: zarządzać zasobami IPC. (ICP: komunikacja międzyprocesowa);
  • mnt: zarządzać punktami montowania;
  • utc: aby odizolować jądro i kontrolować generowanie wersji (UTC: system podziału czasu Unix).

Grupy kontrolne

Docker również korzysta z technologii cgroups lub grupy kontrolne. Kluczem do uruchomienia aplikacji w izolacji jest zapewnienie jej tylko tych zasobów, które chcesz udostępnić. Dzięki temu kontenery będą dobrymi sąsiadami. Grupy kontrolne umożliwiają udostępnianie dostępnych zasobów sprzętowych oraz w razie potrzeby ustalanie limitów i ograniczeń. Na przykład ogranicz możliwą ilość pamięci dla kontenera.

Unijny system plików

Union File Sysem lub UnionFS to system plików, który działa poprzez tworzenie warstw, dzięki czemu jest bardzo lekki i szybki. Docker używa UnionFS do tworzenia bloków, z których zbudowany jest kontener. Docker może korzystać z kilku wariantów UnionFS, w tym: AUFS, btrfs, vfs i DeviceMapper.

Formaty kontenerów

Docker łączy te komponenty w opakowanie, które nazywamy formatem kontenera. Nazywa się format domyślny libcontainer. Docker obsługuje także tradycyjny format kontenera w systemie Linux LXC. W przyszłości Docker może obsługiwać inne formaty kontenerów. Na przykład integracja z Więzieniami BSD lub Strefami Solaris.

Źródło: www.habr.com

Dodaj komentarz