Jaka jest różnica między Docker Compose a Kubernetes?

328

Podczas nurkowania w Docker, Google Cloud i Kubernetes i bez jasnego zrozumienia wszystkich trzech z nich, wydaje mi się, że te produkty nakładają się, ale nie są kompatybilne.

Na przykład docker-compose.ymlplik musi zostać ponownie zapisany, aby aplikacja mogła zostać wdrożona na Kubernetes.

Czy ktoś mógłby przedstawić ogólny, przybliżony opis tego, gdzie Docker, Docker Compose, Docker Cloud i Kubernetes nakładają się na siebie i gdzie jedno jest zależne od drugiego?

George Katsanos
źródło

Odpowiedzi:

479

Doker :

  • Docker to technologia kontenerowa, która umożliwia konteneryzację aplikacji.
  • Docker jest podstawą korzystania z innych technologii.

Docker Compose

  • Docker Compose umożliwia konfigurowanie i uruchamianie wielu kontenerów Docker.
  • Komponent Docker Compose jest najczęściej używany jako pomocnik, gdy chcesz uruchomić wiele kontenerów Docker i nie chcesz uruchamiać każdego z nich osobno docker run ....
  • Komponent Docker Compose służy do uruchamiania kontenerów na tym samym hoście.
  • Kompilacja dokująca jest używana zamiast wszystkich opcjonalnych parametrów podczas budowania i uruchamiania pojedynczego kontenera dokowanego .

Docker Swarm

  • Docker Swarm służy do uruchamiania i łączenia kontenerów na wielu hostach.
  • Docker Swarm to narzędzie do zarządzania i organizacji klastrów kontenerów.
  • Zarządza kontenerami działającymi na wielu hostach i wykonuje takie czynności, jak skalowanie, uruchamianie nowego kontenera po awarii, kontenery sieciowe ...
  • Docker Swarm to Docker w produkcji. Jest to natywne narzędzie do aranżacji Docker wbudowane w Docker Engine.
  • Plik stosu Docker Swarm o nazwie plik stosu jest bardzo podobny do pliku tworzenia Docker Compose.

Kubernetes

  • Kubernetes to narzędzie do aranżacji kontenerów opracowane przez Google.
  • Cel Kubernetesa jest bardzo podobny do celu Docker Swarm.

Docker Cloud

  • Płatne usługi doker przedsiębiorstwo, które pozwala na budowanie i pojemniki na serwerach w chmurze lub lokalnymi serwerami.
  • Zapewnia interfejs sieciowy i centralny panel sterowania do uruchamiania kontenerów i zarządzania nimi, a jednocześnie zapewnia wszystkie funkcje Docker w przyjaznym dla użytkownika interfejsie internetowym.

Aktualizacja:

Chmura Docker „częściowo” przestała działać

Usługi w Docker Cloud, które zapewniają zarządzanie klastrami aplikacji, węzłów i roju, zostaną zamknięte 21 maja [2020 r.] ... automatyczne kompilacje i usługi przechowywania rejestru nie zostaną naruszone i będą nadal dostępne

yamenk
źródło
Wszystko dobrze, jeśli chodzi o ostatnią rzecz: „Chmura Dockera pozwala na uruchamianie kontenerów ..” praktycznie, co możesz zrobić z uruchomieniem tych kontenerów w chmurze? czy mogą zapewnić publicznie dostępne punkty końcowe? w zasadzie czy chmura dokerów jest czymś podobnym do AWS, ale dla kontenerów dokerów? (czy jest to tylko biblioteka kontenerów do odkrycia)
George Katsanos
2
Ok przepraszam. Myślę, że wciąż jestem zdezorientowany. Czy to oznacza, że ​​kompilacja dokerów jest podobna do Kubernetes, ponieważ służy do lokalnej organizacji kontenerów i jest wygodniejsza dla lokalnego rozwoju, czy też Kubernetes jest czymś więcej?
Vipin Menon
6
Czy sprawiedliwie jest zastosować następującą analogię: 1. docker-compose <> minikube 2. docker-swarm <> klaster kubernetes 3. docker-cloud <> zarządzany klaster kubernetes przez GCP, AWS itp.
Anoop
1
„Rój dokerów służy do uruchamiania i ŁĄCZENIA kontenerów na wielu hostach”. : Co oznacza tutaj „łączenie”? Połączenie internetowe?
someone_ smiley
1
@someone_smiley Tak. Tworzy sieć nakładek
OneCricketeer
135

Oprócz odpowiedzi @ yamenk , chciałbym tutaj dodać kilka szczegółów, które mogą pomóc ludziom w ich podróży po Kubernetes.

Krótka odpowiedź:

  • docker-compose: to narzędzie, które pobiera plik YAML, który opisuje twoją aplikację do obsługi wielu kontenerów i pomaga tworzyć , uruchamiać / zatrzymywać , usuwać wszystkie te kontenery bez konieczności wpisywania wielu docker ...poleceń dla każdego kontenera.
  • Kubernetes: to platforma do zarządzania konteneryzowanymi obciążeniami i usługami, która ułatwia zarówno deklaratywną konfigurację, jak i automatyzację. Co? 🤔 Czytaj dalej ...

Docker Compose

(z dokumentacji): Compose to narzędzie do definiowania i uruchamiania aplikacji Docker do wielu kontenerów. Za pomocą funkcji Komponuj używasz pliku YAML do konfigurowania usług aplikacji. Następnie za pomocą jednego polecenia możesz utworzyć i uruchomić wszystkie usługi z konfiguracji.

Compose ma komendy do zarządzania całym cyklem życia aplikacji:

  • Uruchom, zatrzymaj i odbuduj usługi
  • Wyświetl status uruchomionych usług
  • Przesyłaj strumieniowo dane wyjściowe dziennika uruchomionych usług
  • Uruchom jednorazowe polecenie w usłudze

Kubernetes

(od Wprowadzenie do Kubernetes ): Kubernetes to orkiestrator kontenerowy, taki jak Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad . Organizatorzy kontenerów to narzędzia, które grupują hosty w celu utworzenia klastra i pomagają nam upewnić się, że aplikacje:

  • są odporne na uszkodzenia,
  • można skalować i robić to na żądanie
  • optymalnie wykorzystuj zasoby
  • może automatycznie odkrywać inne aplikacje i komunikować się ze sobą
  • są dostępne ze świata zewnętrznego
  • może aktualizować / przywracać bez żadnych przestojów.

Wiele osób twierdzi, że Kubernetes jest trudny do nauczenia. To dlatego, że rozwiązuje szereg problemów, a ludzie próbują zrozumieć, nie znając wszystkich warunków wstępnych. To komplikuje sprawę. Zacznij układać elementy układanki, czytając o pojęciach / terminach, takich jak poniżej. Ten proces pomoże ci zrozumieć rodzaj problemów, które Kubernetes próbuje rozwiązać:

  • Aplikacje 12-czynnikowe,
  • Automatyczne pakowanie binów,
  • Mechanizmy samoleczenia,
  • Skalowanie w poziomie,
  • Wykrywanie usług i równoważenie obciążenia,
  • Automatyczne wdrażanie i wycofywanie,
  • Wdrożenia niebiesko-zielone / wdrożenia na kanarkach
  • Sekrety i zarządzanie konfiguracją,
  • Organizacja przechowywania

A ponieważ wokół kontenerów i zarządzania nimi istnieje wiele różnych rzeczy, miej oko na krajobraz Cloud Native:

Wersja interaktywna tutaj: landscape.cncf.io/

wprowadź opis zdjęcia tutaj

Aktualizacje

Maj 2020: Docker Compose Specification jest teraz otwartym standardem

Współpracując z AWS, Microsoft i innymi członkami społeczności open source, rozszerzyliśmy specyfikację tworzenia treści o obsługę natywnych platform chmurowych, takich jak Kubernetes i Amazon ECS, oprócz istniejących platform Compose. Więcej tutaj: blog / compose-spec.io

tgogos
źródło
Ta odpowiedź jest nieaktualna. docker.com/blog/…
OneCricketeer
1
Dzięki @ cricket_007 Będę mieć to na oku, ale myślę, że ten wpis na blogu z 2018 roku jest swego rodzaju ... marketingiem. Jest rok 2020 i jeśli sprawdzisz dokumenty w Docker Compose i Compose file version 3, nie ma nic o Kubernetes.
tgogos
Więc? github.com/docker/compose-on-kubernetes docker stack deploy --orchestrator=kubernetes ... docs.docker.com/engine/reference/commandline/stack_deploy
OneCricketeer
1
o, niesamowite, że istnieje warstwa tworzenia, która wyodrębnia całą składnię kubernetes! Dzięki @ cricket_007.
George Katsanos
28

Jeśli łączysz kontenery z tym samym hostem, przejdź do komponowania dokera .

Jeśli łączysz kontenery na wielu hostach, wybierz kubernetes .

Aniket Alhat
źródło
2
Tego rodzaju odpowiedzi się spodziewałem! Mimo że może mieć więcej wyjaśnień, tak naprawdę chodzi o część „tl; dr”. Żadna z innych odpowiedzi tak naprawdę nie mówi!
Ojciec chrzestny
8

pierwsza różnica polega na silniku kontenera i koordynatorze kontenerów.

docker to silnik kontenerowy, który pozwala budować i uruchamiać zwykle najwyżej jeden kontener, lokalnie na komputerze w celach programistycznych.

docker-compose to narzędzie Docker do uruchamiania wielu kontenerów i umożliwiania współużytkowania woluminów i sieci za pośrednictwem funkcji silnika dokera, działa lokalnie w celu emulacji składu usług i zdalnie w klastrach.

Kubernetes to platforma do organizacji kontenerów, która dba o uruchamianie kontenerów i ulepszanie funkcji silnika, dzięki czemu kontenery można komponować i skalować w celu obsługi złożonych aplikacji (rodzaj PaaS, zarządzany przez Ciebie lub dostawcę chmury). Główną funkcją Kubernetes jest oddzielenie infrastruktury od aplikacji za pomocą kontenerów, a także jest ona otwarta dla innych silników, które Docker, na przykład może uruchamiać kontenery z rkt lub cri-o.

Chmura Docker to także oferta PaaS, która pozwala uruchamiać i koordynować kontenery za pośrednictwem dockerinterfejsu API silnika.

Teraz w zależności od potrzeb, poziomu kontroli infrastruktury i docelowych odbiorców możesz używać Kubernetes na baremetal, Azure ACS lub Google GKE itp.

Mam nadzieję, że to pomogło :) Pozdrawiam

Francesco Gualazzi
źródło
1
Jestem trochę zdezorientowany, dlaczego zwykle uruchamiasz tylko jeden kontener w oknie dokowanym? Chociaż myślę, że Docker-compose jest lepszym rozwiązaniem, nic nie powstrzyma cię przed uruchomieniem wielu kontenerów bez niego!
Peter
o tak, czasami mam mysql działający w tle, a następnie uruchamiający httpd i nginx jako samodzielne kontenery ... ale kiedy chcę całą automatyzację, na pewno zbuduję docker-compose.yml, aby określić zależności, sieci itp. ..
Francesco Gualazzi
6

Docker Compose nie jest narzędziem gotowym do produkcji. Działa świetnie w PoC lub środowiskach programistycznych, ale brakuje mu wielu możliwości, które są mniej lub bardziej ryzykowne dla poważnego wykorzystania produkcyjnego. Swarm jest bardziej gotowy na produkcję, ale nigdy nie zainwestowałbym w Swarm w scenariuszu typu greenfield. Kubernetes wygrał bitwę aranżacyjną, o czym świadczy jego włączenie do Docker Desktop i oferowanie go przez wszystkich głównych dostawców chmury. Kubernetes jest znacznie bardziej wydajny i ma znacznie więcej wsparcia społeczności i korporacji.

Poleciłbym nurkowanie w niektórych tutorialach Kubernetes dostępnych w Pluralsight, Linux Academy itp. I rozwijanie klastra do zabawy na wybranej platformie chmurowej (EKS, AKS, GKE itp.). Jeśli próbujesz podkręcić się na gołym metalu, spójrz na OpenShift, ale zauważ, że w tej konfiguracji tracisz trochę magii Kubernetes.

Ashok Reddy
źródło
Zgodził się, że k8s „wygrał” (na razie). Ale Mesos był nazywany złotym standardem dla klastrów produkcyjnych . DC / OS świetnie sobie poradził z wypchnięciem funkcji korporacyjnych, ale teraz możesz nawet uruchamiać wiele klastrów K8 w środowisku Mesos i uzyskiwać do nich dostęp z poziomu platformy niezależnej od dostawcy, więc co jest naprawdę lepsze?
OneCricketeer
3

Komponent dokowania:

W docker-compose.ymlpliku każdy wpis może opcjonalnie uzyskać docker-composeobraz. każdy wpis może reprezentować pojedynczy kontener, który chcemy zbudować, a każdy wpis określa wymagania sieciowe lub porty.

Kubernetes:

Kubernetes oczekuje, że wszystkie obrazy zostaną już zbudowane i dla każdego obiektu, który chcemy utworzyć, istnieje jeden plik konfiguracyjny i musimy ręcznie skonfigurować wszystkie sieci.

Dlatego zapewniamy, że nasz obraz jest hostowany w Docker Hub, utwórz jeden plik konfiguracyjny, aby utworzyć kontener, i jeden plik konfiguracyjny, aby skonfigurować sieć.

Daniel
źródło
1

Docker-Compose to plik wdrażania, który wstępnie zdefiniował jeden lub więcej kontenerów ze środowiskiem, takim jak woluminy, sieć, polecenie do uruchomienia i tak dalej.

Z drugiej strony Kubernetes to system, który koordynuje kontenery dokerów i inne mikrousługi oraz sprawia, że ​​są skalowane i niezawodne w wielu węzłach

Yaniv Hakim
źródło
1

Komponowanie dokowania: kontenery dokowania można uruchamiać bezpośrednio bez pomocy dowolnego pliku yaml. Ale przy pomocy narzędzia Docker komponuj narzędzie można zdefiniować właściwości kontenera w pliku o nazwie plik docker-compose.yml. proszę znaleźć poniższy przykładowy plik yml, aby uzyskać więcej informacji.

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

nazwę obrazu, liczbę replik itp. można skonfigurować za pomocą pliku yml.

Kubernetes: jest to platforma zarządzania kontenerami uruchomiona na Dockerze zbudowanym przez Google. Docker Swam to kolejna platforma zarządzania kontenerami zbudowana przez samą doker. Kubernetes zapewnia również możliwość zapisywania konfiguracji związanej z zasobnikami (odpowiadającymi kontenerowi w oknie dokowanym) w pliku yaml, np. W komponowaniu dokera. przykładowy plik yaml

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88

tutaj można również podać obrazy, porty do otwarcia i mapowania portów do hosta itp. podobnie jak komponowanie dokera, kubectl Apply -f to polecenie uruchamiające ten plik.

Nalin Kularathna
źródło
Jaka jest różnica? =)
Ojciec chrzestny
docker compose to konsola do uruchamiania obrazów dokerów, a kubernetes nie jest taki, że jest to system aranżacji kontenerów. więc tych dwóch nie można porównywać i są zupełnie inne. ale kubernetes ma kubectl, jest to również konsola i podobna do komponowania
dokera