ου γαρ εστιν κρυπτον ο ου φανερον γενησεται ουδε αποκρυφον ο ου γνωσθησεται και εις φανερον ελθη
Wersja PL ENG Version

Docker

Docker jest aplikacją, która umożliwia umieszczanie programów wewnątrz izolowanych piaskownic (ang. sandbox) nazywanych kontenerami (ang. container). Kontenery tworzone przez Docker są dożo wydajniejsze niż wykorzystywane zwykle do izolacji maszyny wirtualne (ang. virtual machine). Docker został stworzony we Francji, w roku 2013. Oficjalną stroną projektu jest http://www.docker.com.

Docker umożliwia użytkownikowi tworzenie izolowanych kontenerów, zawierających wskazaną aplikację razem ze wszystkimi powiązanymi z nią bibliotekami i ustawieniami systemowymi. Kontenery mogą być następnie wykorzystywane do wielokrotnego uruchamiania wcześniej przygotowanych programów lub do programowania.

Ze względu na możliwość relatywnie szybkiego i łatwego modyfikowania aplikacji (poprzez dodawanie lub podmienianie poszczególnych kontenerów), Docker jest często wykorzystywany do tworzenia i zarządzania dużymi systemami rozproszonymi. Kontenery mogą działać na wielu maszynach, zarówno fizycznych, jak i wirtualnych. Wewnętrzna konfiguracja kontenerów nie jest afektowana przez ustawienia systemów, w których działają.

Aplikacje służące do zarządzania wirtualnymi kontenerami nie są narzędziami ściśle kryptograficznymi. Nadają się bardzo dobrze do wdrażania i testowania systemów bezpieczeństwa, z racji swojej efektywności, elastyczności i łatwości instalacji.

Mimo, że obecnie istnieje szereg aplikacji umożliwiających tworzenie wirtualnych kontenerów, Docker jest niezaprzeczalnie jednym z najpopularniejszych z nich. Jest warte wspomnienia, że wiele popularnych dostawców usług w chmurze (ang. cloud service providers), jak Amazon lub Microsoft, obsługuje obrazy tworzone przez Docker.

Wirtualne piaskownice

Koszt uruchamiania aplikacji w wirtualnych kontenerach utworzonych przez Docker jest dużo mniejszy niż koszt działania całej maszyny wirtualnej. Zamiast tworzenia nowego systemu operacyjnego, kontenery wykorzystują niskopoziomowe funkcjonalności systemu, w którym działają, modyfikując jedynie jego wyższe warstwy.

Początkowo Docker był dostępny jedynie dla systemów Linux, ale z biegiem czasu dodano możliwość używania go również pod Windowsami. Docker wykorzystuje nowoczesne funkcje systemów operacyjnych, które umożliwiają izolowanie zasobów na różne sposoby. Przykładowo, działając na Linuxie, Doker wykorzystuje takie funkcjonalności jądra jak namespaces, cgoups, system plików aufs oraz interfejsy wirtualizujące (libcontainer, libvirt i LXC).

Aplikacja działająca wewnątrz kontenera jest izolowana od zewnętrznych systemów operacyjnych pod względem systemu plików, innych procesów i użytkowników, procesowa i pamięci oraz interfejsów sieciowych i urządzeń wyjścia/wejścia.

API aplikacji Docker

Jednym z powodów popularności programu Docker jest prostota jego używania. Po utworzeniu obrazu kontenera, użytkownik może kontrolować aplikację za pomocą kilku prostych komand.

Obraz tworzony w aplikacji Docker jest paczką zawierającą docelowy program wybrany przez użytkownika, wraz z jego zależnościami i parametrami konfiguracyjnymi. Za każdym razem, kiedy obraz jest uruchamiany, Docker tworzy nowy wirtualny kontener i inicjuje go za pomocą tych samych parametrów. Oczywiście, szereg oddzielnych kontenerów bazujących na tym samym obrazie może działać równocześnie. Każdy utworzony kontener otrzymuje unikalny numer identyfikacyjny.

Tworzenie obrazów aplikacji Docker

Obecnie istnieje bardzo wiele gotowych obrazów Docker, dostępnych w publicznych repozytoriach. Można je pobrać przy użyciu komendy docker pull, a następnie pracować z kontenerami utworzonymi na ich podstawie.

Jest możliwe zbudowanie własnych nowych obrazów, modyfikując istniejące obrazy aplikacji Docker. W tym celu wykorzystuje się specjalnie przygotowany plik Dockerfile.

Plik Dockerfile składa się zwykle z kilku linijek, z których każda zawiera słowo kluczowe i odpowiadającą mu wartość. Pierwsza linijka powinna określać obraz, który ma być zmodyfikowany (słowo kluczowe: FROM). W kolejnych liniach znajdują się dodatkowe zależności, które powinny być załadowane do obrazu (słowo kluczowe: ADD), skrypty i aplikacje, które powinny być zainstalowane lub uruchomione (słowa kluczowe: RUN, CMD), numery portów, które powinny zostać otwarte (słowo kluczowe: EXPOSE), itd.

Mając plik Dockerfile, nowy obraz może zostać utworzony za pomocą komendy docker build, który pobiera jako parametry docelową nazwę obrazu (połączoną z opcjonalnymi użytkownikiem i tagiem) i wspomniany wcześniej plik.

Utworzony w ten sposób oraz może zostać załadowany to wskazanego repozytorium za pomocą komendy:
  docker push nazwa_obrazu

Sieci aplikacji Docker

Możliwe jest utworzenie wielu obrazów aplikacji docker, które będą w stanie komunikować się z wykorzystaniem zwykłych protokołów sieciowych. Ogólnie rzecz biorąc, zaleca się budowanie systemów składających się z wielu obrazów, z których każdy zajmowałby się jednym określonym procesem i komunikował się z innymi kontenerami w celu wykonania przewidzianego zadania.

Sieć w aplikacji Docker może zostać utworzona za pomocą komendy:
  docker network create nazwa_sieci

Następnie użytkownik może wskazać odpowiednią sieć, definiując parametr --net podczas wydawania komendy run. Kontenery mogą się komunikować, jeśli działają w tej samej sieci aplikacji Docker.

Istnieje jeszcze jedna, samodzielna aplikacja, o nazwie Docker Compose, która w nawet większym stopniu uproszcza konfigurację wielu kontenerów pracujących w jednej sieci. Pozwala ona umieścić wiele obrazów w jednym pliku konfiguracyjnym, docker-compose.yml, i zarządzać nimi za pomocą dwóch komand docker-compose up i docker-compose stop.