Omówienie różnic pomiędzy Kubernetes a Docker jest jednym z najważniejszych tematów w natywnej chmurze oraz DevOps. Chociaż Kubernetes i Docker z pewnością można omawiać jednocześnie, tak naprawdę nie należy ich porównywać. W rzeczywistości Kubernetes i Docker nie konkurują ze sobą bezpośrednio. Zamiast tego należy traktować je jako dwie technologie, które mogą się wzajemnie uzupełniać i ze sobą współpracować.
Skąd można wiedzieć z jakimi okolicznościami będziemy mieli do czynienia? Aby odpowiedzieć na to pytanie, najpierw należy zrozumieć konkretne obszary, w których Kubernetes i Docker nakładają się i różnią między sobą.
Docker to platformą open source do tworzenia kontenerów aplikacji. Jeśli ta koncepcja brzmi nieznajomo: kontener to samodzielny format pakietowania, który umieszcza wszystkie niezbędne kody i zależności w wykonywalnym formacie. Aby użyć analogii ze świata rzeczywistego: kontener jest jak paczka IKEA ze wszystkimi elementami, wspornikami i śrubami biurka (i oczywiście kluczem sześciokątnym). Oprócz zawierania wszystkich elementów, kontener buduje również biurko samodzielnie, podczas jego wykonywania.
Docker jest często używany przez programistów ze względu na swój lekki i standaryzowany format. Cechy te pozwalają programistom tworzyć, testować i wdrażać aplikacje w elastyczny i skalowalny sposób.
Docker ma również inne znaczenie w branży IT – istnieje firma o nazwie Docker, Inc., która opracowuje narzędzia do pracy na tej platformie. Należy pamiętać o tej różnicy, biorąc pod uwagę tę samą nazwę.
Docker to pojedynczy kontener, a Kubernetes to narzędzie do jednoczesnego zarządzania wieloma kontenerami. Podobnie jak Docker (platforma, a nie firma), Kubernetes jest platformą open source, lecz zarządzana przez organizację Cloud Native Computing Foundation jako projekt z ponad 2300 współtwórcami. Kubernetes działa jak system operacyjny dla chmury, usprawniając i upraszczając zarządzanie między maszynami wirtualnymi i chmurami, dzięki czemu działy IT mogą działać w skali.
Co potrafi Kubernetes? Kubernetes działa podobnie do każdego rozwiązania zarządzania systemem obecnego w systemie lokalnym – ale w skali kontenera. Udostępnienia, aktualizacje, harmonogramy, usunięcia i ogólne monitorowanie stanu – Kubernetes radzi sobie ze wszystkim. Wracając do analogii z meblami IKEA: jeśli kontener jest jednym biurkiem, Kubernetes jest jak menedżer sklepu, który umożliwia zamawianie, dystrybucję i sprawdzanie stanu biurek, krzeseł i innych zapakowanych mebli w magazynie sklepu IKEA.
Jednym z elementów brakujących w każdej dyskusji na temat Docker i Kubernetes jest definicja środowiska uruchamiania kontenerów. Czym jest środowisko uruchamiania kontenera? Krótko mówiąc, to jest silnik, który uruchamia kontener. Wracając do analogii z meblami IKEA, środowisko uruchamiania kontenerów to instrukcje montażu wewnątrz opakowania. W niektórych przypadkach jest to proste, a zarządzanie wykonaniem jest obsługiwane w tak zwanym środowisku uruchamiania kontenera niskiego poziomu . W bardziej złożonych sytuacjach, środowisko uruchamiania kontenerów wysokiego poziomu nadzoruje integrację API, formaty obrazów oraz zarządzanie obrazami. W niektórych przypadkach termin ten może być używany zamiennie z Docker, chociaż sprawa ta jest odrobinę bardziej skomplikowana.
Kubernetes uruchamia API, określane jako interfejs uruchamiania kontenera – CRI (Content Runtime Interface). CRI wchodzi w interakcję z każdym środowiskiem uruchamiania kontenera w celu wykonania pakietu. Wracając raz jeszcze do analogii z meblami IKEA, CRI w Kubernetes jest osobą odczytującą instrukcję montażu (środowisko uruchamiania kontenera) w pakiecie (kontenerze).
Docker to nie jedyne środowisko uruchamiania kontenerów. Dwa inne, popularne rozwiązania to:
Containerd: Containerd zaistniał najpierw jako część projektu Docker. Jego celem było jednak dodania elastyczności i modułowości dla Docker, dlatego jego programiści zdecydowali się na kontynuowanie Containerd jako osobnego projektu. Containerd obsługuje środowisko uruchomienia kontenera wysokiego poziomu, łącznie z pobieraniem obrazów z rejestrów, zarządzaniem obrazami oraz integrację ze środowiskami uruchomienia niskiego poziomu w celu wykonania procesu kontenera.
CRI-O: CRI-O to kolejne alternatywne środowisko uruchamiania kontenera open source, zastępujące Docker. Wdraża środowisko CRI (Kubernetes Container Runtime Interface) umożliwiające środowiska uruchomienia zgodne ze standardem Open Container Initiative.
Zarówno CRI-O, jak i Containerd korzystają ze specyfikacji dostarczonych przez CRI, co czyni je całkowicie kompatybilnymi z Kubernetes.
Często toczone są dyskusje na temat konkurencji między Docker i Kubernetes, ale tak naprawdę te dwa rozwiązania nie konkurują ze sobą bezpośrednio. Analogia mebli IKEA stosowana w tym artykule pokazuje, jak są one spokrewnione i dlaczego wspólnie mają kluczowe znaczenie w nowoczesnym zarządzaniu IT, bez jakiejkolwiek konkurencji. Są one raczej częścią natywnego ekosystemu chmury. Kontenery Docker są częścią elementów zarządzanych przez Kubernetes, a zaletą Kubernetes jest możliwość łatwego skalowania rozmiaru kontenerów Docker.
Pytanie nie brzmi więc: „Docker czy Kubernetes?” Zamiast tego, głównym zagadnieniem do rozważenia dla dyrektorów IT jest jak, w zakresie zarządzania i działania, będą korzystać z Kubernetes i Docker.
Kubernetes i Docker są stworzone do wspólnego działania. Mimo że do zarządzania wdrożeniem Docker nie jest wymagane użycie Kubernetes, jest to skuteczne tandemowe rozwiązanie w sytuacjach, w których trzeba zarządzać wieloma instancjami wdrożeń. Dotyczy to zwłaszcza sytuacji, w których używanych jest wiele wdrożeń tej samej aplikacji, a także przy konieczności skalowania. To, że system orkiestracji Kubernetes działa na zasadach open source, zapewnia stale obsługiwaną platformę, zarządzającą zawiłością na wielu serwerach.
Z poziomu Kubernetes można wdrożyć i zarządzać licznymi pakietami Docker, korzystając z takich funkcji, jak wsadowe przetwarzanie poprawek i aktualizacji oraz monitorowanie problemów w skali, przy jednoczesnej obsłudze dowolnych żądań. Dzięki Kubernetes, działy IT mogą:
Oracle Cloud Infrastructure oferuje wiele usług do przyspieszenia i tworzenia nowoczesnych, natywnych aplikacji w chmurze. W szczególności Container Engine for Kubernetes i Container Registry – analizujące obrazy Docker i zarządzające nimi – to zaawansowane i bezpłatne (wbudowane) narzędzia usprawniające zarządzanie i zwiększające wydajność. Przekonaj się o tym, próbując bezpłatnie Oracle Cloud, by uzyskac dostęp do Kubernetes.
Po zamknięciu w marcu 2020 roku parku archeologicznego we włoskich Pompejach, jakiekolwiek plany ponownego otwarcia wymagały zarządzania i kontroli w celu zapewnienia dystansu społecznego. Utworzono plany pozwalające turystom uzyskać dostęp do nowej aplikacji MyPompeii, opartej na produktach Oracle (w tym Oracle Container Engine for Kubernetes i Oracle Container Registry), wybranych w celu stworzenia natywnego chmurowego rozwiązania mobilnego.
Działająca w Londynie firma Snap Vision oferuje technologię wyszukiwania wizualnego, bazującą na sztucznej inteligencji, aby pomóc kupującym odkryć ubrania, które pokochają. Ponieważ COVID-19 spowodował zawieszenie zakupów w fizycznych sklepach na długi okres czasu, technologia Snap Vision została zaoferowana sprzedawcom detalicznym w Wielkiej Brytanii, aby pomóc im stworzyć cyfrowe środowisko zakupów. Skalowanie było dużym wyzwaniem, choć firma Snap Vision mogła hostować nowe środowiska sprzedawców po niskich kosztach dzięki Oracle Cloud Infrastructure i Kubernetes.