Druga rewolucja w wirtualizacji serwerów

Zasada działania

Docker działa, tworząc kontenery wykorzystujące, tzw. obrazy (image) systemu Linux. Podobnie jak inne narzędzia do parawirtualizacji (np. Virtuozzo), wszystkie kontenery w danym komputerze korzystają z jednego jądra Linuksa. Jednakże są zamknięte we własnym środowisku uruchomieniowym i oddzielone od podstawowego środowiska uruchomieniowego systemu operacyjnego. Uruchamiając lub tworząc kontener, jest on aktywny tylko pod warunkiem, że są w nim działające procesy.

W momencie uruchomienia procesu działającego w pierwszym planie, kontener będzie działać normalnie aż do momentu, kiedy proces się zatrzyma. Wyłączy się również w przypadku, gdy działają w nim tylko procesy w tle. Tym różni się od innych narzędzi do wirtualizacji, które tworzą zamknięte środowiska uruchomieniowe przypominające maszyny wirtualne. Te środowiska działają, nawet jeśli nie ma w nich aktywnych procesów.

Zobacz również:

  • 5 priorytetów, które obniżają koszty chmury i usprawniają operacje IT
  • AI ma duży apetyt na prąd. Google znalazł na to sposób

Dockera można zainstalować w większości dystrybucji Linuksa, jak również w komputerach z systemami Windows i Mac OS X. Jednakże w tych dwóch ostatnich jest to możliwe tylko z wykorzystaniem maszyn wirtualnych. W większości przypadków instalacja środowiska uruchomieniowego Docker jest bardzo prostym procesem, wymagającym skorzystania ze standardowych poleceń służących do zarządzania paczkami z oprogramowaniem w Linuksie. Na stronie projektu znajdziemy kompletne instrukcje instalacji w wielu dystrybucjach Linuksa, usługach chmurowych, jak również systemach Mac OS X i Windows. Po zainstalowaniu Dockera można utworzyć nowy kontener, wpisując prostą komendę: $ sudo docker run -i -t ubuntu /bin/bash. To polecenie mówi Dockerowi, aby pobrał najnowszy obraz Ubuntu (jeśli nie ma go jeszcze w komputerze) i uruchomił polecenie /bin/bash wewnątrz kontenera. To polecenie będzie działać w nowym kontenerze z uprawnieniami roota, jak również będzie poprzedzone symbolem roota w linii poleceń w nowym kontenerze: root@2e002f3eb1b2:/#

Z tego poziomu można wykonać niemal wszystko to, co umożliwia nowa instalacja Linuksa.

Przykładowo, można uruchomić proces pobierania aktualizacji, zainstalować nowe oprogramowanie, skonfigurować je, napisać skrypt i korzystać z kontenera mniej więcej tak, jak ze standardowej instalacji Linuksa. Z tą różnicą, że w momencie wyjścia z linii poleceń kontener przestanie działać. Jeśli wcześniej uruchomiony został w kontenerze serwer Apache udostepniający strony WWW, przestanie on działać. Dlatego ogólnie dobrym pomysłem jest zbudowanie kontenera dla pojedynczej usługi, a nie dla stosu aplikacji. Owszem, można uruchomić w jednym kontenerze wiele aplikacji, ale jest to sporym wyzwaniem.

Praca z Dockerem

Docker jest oprogramowaniem obsługiwanym z poziomu wiersza poleceń, a wszystkie wymagane narzędzia zostały wbudowane w jego plik wykonywalny. Dzięki temu obsługa jest bardzo prosta. Pracę usprawniają różne ułatwienia, przykładowo wystarczy wpisać tylko początek nazwy obrazu, np. „e45”, aby odwołać się do obrazu o nazwie e45281078da0. Warto zauważyć, że obrazy mają niewielkie rozmiary, ponieważ Docker wykorzystuje do ich utworzenia podstawowy szablon i dla każdego nowego kontenera zapisuje tylko zmiany. Dzięki temu, jeśli pierwotny obraz ma, np. 300 MB, obraz kontenera może mieć tylko 50 MB, jeśli zostanie w nim zainstalowana aplikacja mająca rozmiar właśnie 50 MB.

Można zautomatyzować tworzenie kontenerów Dockera, wykorzystując Dockerfiles, pliki zawierające specyficzne informacje na temat pojedynczego kontenera. Przykładowo, można utworzyć Dockerfile, aby skonfigurować kontener z Ubuntu z odpowiednimi ustawieniami sieciowymi, uruchomić szereg poleceń wewnątrz nowego kontenera, zainstalować oprogramowanie czy wykonać inne zadania, a dopiero na koniec uruchomić gotowy kontener.

Komunikacja sieciowa

Połączenie sieciowe we wcześniejszych wersjach Dockera wykorzystywało mechanizm mostkowania w obrębie komputera, ale od wersji 1.0 oprogramowanie zawiera nowe funkcje obsługi sieci, które umożliwia kontenerom bezpośrednią komunikację z interfejsami Ethernet serwera.

Domyślnie kontener ma ustawioną pętlę zwrotną (loopback) i interfejs podłączony do wewnętrznego mostu, ale można również skonfigurować bezpośrednie połączenie, jeśli jest taka potrzeba. Naturalnie, bezpośredni dostęp umożliwia szybszą wymianę danych niż mostkowanie.

Niemniej jednak, metoda mostkowania jest bardzo przydatna w wielu sytuacjach. Komputer automatycznie tworzy wewnętrzny adapter sieciowy i przypisuje mu pulę adresów IP z podsieci, ale innej niż ta, w której pracuje sam komputer. Następnie, kiedy nowy kontener jest podłączany do mostu, automatycznie otrzymuje odpowiedni adres IP. Można również skonfigurować kontener tak, aby łączył się z interfejsem sieciowym komputera a określonym porcie. Przykładowo, nasz serwer Apache może łączyć się z portem TCP 8080 komputera, które to połączenie jest następnie przekazywane do kontenera na porcie 80.

Używając skryptów i narzędzi administracyjnych, można uruchamiać kontenery Dockera w dowolnym miejscu, zbierać informacje o używanych przez nie portach i rozgłaszać informacje o tych portach do innych aplikacji tworzących stos, które potrzebują komunikować się z daną aplikacją.


TOP 200