Яка різниця між Docker Compose та Kubernetes?


328

Під час занурення в Docker, Google Cloud та Kubernetes і, не маючи чіткого розуміння всіх трьох, ще мені здається, ці продукти перетинаються, але вони не сумісні.

Наприклад, docker-compose.ymlфайл потрібно переписати, щоб додаток можна було розгорнути в Kubernetes.

Чи міг би хтось надати високий, приблизний опис того, де Докер, Докер Композит, Докер Хмара та Кубернетес перетинаються і де один залежить від іншого?

Відповіді:


479

Докер :

  • Docker - це технологія контейнерів, яка дозволяє контейнерувати ваші програми.
  • Докер - це серцевина використання інших технологій.

Docker Compose

  • Docker Compose дозволяє налаштувати і запустити кілька контейнерів Docker.
  • Docker Compose в основному використовується як помічник, коли ви хочете запустити кілька контейнерів Docker і не бажаєте запускати кожен окремо, використовуючи docker run ....
  • Docker Compose використовується для запуску контейнерів на одному хості.
  • Docker Compose використовується замість усіх необов'язкових параметрів при складанні та запуску одного контейнера докера.

Докер Рой

  • Docker Swarm призначений для запуску та підключення контейнерів на кількох хостах.
  • Docker Swarm - це інструмент керування кластерними та оркестровими контейнерами.
  • Він управляє контейнерами, що працюють на кількох хостах, і робить такі речі, як масштабування, запуск нового контейнера, коли один виходить з ладу, мережеві контейнери ...
  • Docker Swarm - Докер у виробництві. Це рідний Docker оркестровка інструмент , який вбудований в Докер Engine.
  • Файл Docker Swarm з назвою файл стека дуже схожий на файл Docker Compose.

Кубернети

  • Kubernetes - це інструмент для оркестрування контейнерів, розроблений Google.
  • Мета Kubernetes дуже схожа з ціною Докера Роя.

Докер Хмара

  • Платний сервіс підприємство докер , що дозволяє створювати і запускати контейнери на хмарних серверах і локальних серверів.
  • Він надає веб-інтерфейс та центральну панель управління для запуску та управління контейнерами, забезпечуючи всі функції Docker у зручному веб-інтерфейсі.

Оновлення:

Хмара Докера "частково" припинена

Служби в Docker Cloud, які надають управління додатками, вузлами та ройовими кластерами, будуть припинені 21 травня [2020] ... автоматизовані збірки та сервіси зберігання реєстру не впливатимуть і надалі будуть доступні


Все добре, що стосується останнього, що "Хмара Докера дозволяє запускати контейнери .." практично, що ви можете зробити з запуском цих контейнерів на хмарі? чи можуть вони надавати загальнодоступні кінцеві точки? по суті це докерська хмара щось на зразок AWS, але для докерних контейнерів? (або це лише бібліотека контейнерів для відкриття)
Джордж Катсанос

2
Добре вибач. Думаю, я все ще плутаюсь. Так це означає, що докер-композиція схожа на Kubernetes тим, що вона використовується для оркестрування контейнерів на місцях і є більшою зручністю для місцевого розвитку, або Kubernetes набагато більше, ніж це?
Випін Менон

6
Чи справедливо зробити наступну аналогію 1. docker-compose <> minikube 2. docker-roarm <> kubernetes cluster 3. docker-cloud <> керований кластер kubernetes від GCP, AWS тощо.
Anoop

1
"Докерний рій призначений для запуску та З'єднання контейнерів на кількох хостах." : Що тут означає "з'єднання"? Підключення до мережі?
когось_ смайлик

1
@someone_smiley Так. Він створює мережу накладання
OneCricketeer

135

На додаток до відповіді @ yamenk , я хотів би додати тут декілька деталей, які можуть допомогти людям у дорозі розуміння Кубернетів.

Коротка відповідь:

  • docker-compose: - це інструмент, який містить файл YAML, який описує вашу багатоконтейнерну програму та допомагає створювати , запускати / зупиняти , видаляти всі ці контейнери без необхідності вводити кілька docker ...команд для кожного контейнера.
  • Kubernetes: - це платформа для управління контейнерними робочими навантаженнями та послугами, яка полегшує як декларативну конфігурацію, так і автоматизацію. Що? 🤔 Продовжуй читати ...

Docker Compose

(від документів): Compose - це інструмент для визначення та запуску багатоконтейнерних програм Docker. За допомогою Compose ви використовуєте файл YAML для налаштування служб своєї програми. Потім за допомогою однієї команди ви створюєте та запускаєте всі служби зі своєї конфігурації.

Compose має команди для управління всім життєвим циклом вашої програми:

  • Запуск, зупинка та відновлення послуг
  • Перегляд стану запущених служб
  • Потокове виведення журналу запущених служб
  • Запустіть разову команду на сервісі

Кубернети

вступу до Кубернетів ): Kubernetes - це контейнерний оркестровий, наприклад Докер Рой, Месос Марафон, Амазонка ECS, Хашикорп Номад . Оркестрові контейнери - це інструменти, які об'єднують хости для формування кластера та допомагають нам переконатися в застосуванні:

  • стійкі до відмов,
  • може масштабувати та робити це на вимогу
  • використовувати ресурси оптимально
  • може автоматично знаходити інші програми та спілкуватися один з одним
  • доступні із зовнішнього світу
  • може оновлювати / відкатати без простоїв.

Багато людей стверджують, що Кубернетам важко вчитися. Це тому, що воно вирішує низку проблем, і люди намагаються зрозуміти, не знаючи всіх передумов. Це ускладнює. Почніть складати шматочки головоломки, читаючи про поняття / терміни, як описано нижче. Цей процес допоможе вам зрозуміти, які проблеми намагаються вирішити Kubernetes:

  • 12-факторні програми,
  • Автоматичне упаковка бін,
  • Механізми самолікування,
  • Горизонтальне масштабування,
  • Відкриття служби та балансування завантаження,
  • Автоматизовані розкрутки та відкати,
  • Синьо-зелені розгортання / розгортання канарів
  • Управління секретами та конфігурацією,
  • Оркестрація зберігання

А оскільки навколо контейнерів та їхнього управління існує багато різних речей, слідкуйте за краєвидом Cloud Native:

Тут інтерактивна версія: landscape.cncf.io/

введіть тут опис зображення

Оновлення

Травень 2020 року: специфікація Docker Compose Специфікація в теперішньому відкритому стандарті

Працюючи з AWS, Microsoft та іншими людьми у спільноті з відкритим кодом, ми розширили специфікацію Compose для підтримки хмарних платформ, таких як Kubernetes та Amazon ECS, на додаток до існуючих платформ Compose. Більше тут: блог / compose-spec.io


Ця відповідь застаріла. docker.com/blog/…
OneCricketeer

1
Дякую @ cricket_007 Я буду стежити за цим, але я вважаю, що цей блог з 2018 року є свого роду ... "маркетингом". Настає 2020 рік, і якщо ви перевіряєте документи на довідці Docker Compose and Compose, версія 3 файлу, про Kubernetes немає нічого.
tgogos


1
о, дивно, що є композиційний шар, який резюмує всі синтаксиси кубернетів! Дякуємо @ cricket_007.
Джордж Катсанос

28

Якщо мережеві контейнери джгутів той же хост піти Docker композит .

Якщо ви підтримуєте мережу контейнерів у кількох хостах, перейдіть на кубернети .


2
Такого типу відповіді я очікував! Незважаючи на те, що це може мати ще одне пояснення, "tl; dr" частина - це справді сенс. Жоден з інших відповідей насправді цього не говорить!
Хрещений батько

8

Перша відмінність - між двигуном контейнера і контейнерним оркестром.

docker це контейнерний двигун, він дозволяє створювати та запускати, як правило, не більше одного контейнера, локально на вашому ПК для цілей розробки.

docker-compose - це утиліта Docker для запуску декількох контейнерів і дозволу їм ділитися об'ємами та мережами за допомогою функцій двигуна докер, працює локально, щоб імітувати сервісну композицію та віддалено на кластерах.

Kubernetes - це платформа для оркестровки контейнерів, вона піклується про запуск контейнерів та покращення функцій двигуна, щоб контейнери могли бути складені та масштабовані для обслуговування складних програм (на зразок PaaS, керований вами або постачальник хмарних послуг). Основна особливість Kubernetes полягає в тому, щоб від'єднати інфраструктуру від програми за допомогою контейнерів, а також вона відкрита для інших двигунів, які Docker, наприклад, вона може запускати контейнери з rkt або cri-o.

Хмара Docker - це також пропозиція PaaS, яка дозволить вам запускати та упорядковувати контейнери через dockerAPI двигуна.

Тепер, залежно від ваших потреб, рівня контролю над інфраструктурою та цільовою аудиторією, ви можете використовувати Kubernetes на бареметалі, або Azure ACS або Google GKE тощо.

Сподіваюсь, це допомогло :) З повагою


1
Я трохи розгублений, чому ви зазвичай запускаєте лише один контейнер на докер? Хоча я вважаю, що Докер-композит - це краще рішення, ніщо не заважає вам запускати безліч контейнерів без нього!
Пітер

о так, іноді у мене працює mysql у фоновому режимі, потім запускаються httpd і nginx як окремі контейнери ... але тоді, коли я хочу, щоб вся справа була автоматизованою, я обов'язково буду докер-compose.yml, щоб вказати залежності, мережі тощо. ..
Франческо Гуалацці

6

Docker Compose не є готовим до виробництва інструментом. Він чудово підходить для PoC або середовищ розробки, але не вистачає багатьох можливостей, які є більш-менш столовими ставками для серйозного використання у виробництві. Swarm готовий до виробництва, але я ніколи не вкладатимуться у Swarm за сценарієм «greenfield». Kubernetes виграв битву за оркестрацію, про що свідчить її включення до Docker Desktop і пропонувалося всіма основними постачальниками хмарних технологій. Kubernetes набагато більш здібний і має набагато більше спільноти та корпоративну підтримку.

Я рекомендую зануритися в деякі підручники Kubernetes, доступні в Pluralsight, Linux Academy і т.д., і розпочати кластер, з яким можна пограти у своїй хмарній платформі на вибір (EKS, AKS, GKE тощо). Якщо ви намагаєтеся крутитися на голому металі, подивіться на OpenShift, але визнайте, що ви втрачаєте частину магії Kubernetes в цій установці.


Погодилися, що k8s "перемогла" (поки що). Але Месос раніше називали золотим стандартом для виробничих кластерів . DC / OS зробив чудову роботу, щоб витіснити функції підприємства, але тепер ви навіть можете запустити декілька кластерів k8s в середовищі Mesos та отримати доступ до них з однієї платформи-постачальника, так що дійсно краще?
OneCricketeer

3

Докер композиція:

У docker-compose.ymlфайлі кожен запис може необов'язково отримувати docker-composeдля створення зображення. кожен запис може представляти один контейнер, який ми хочемо створити, і кожен запис визначає мережеві вимоги або порти.

Кубернети:

Kubernetes очікує, що всі зображення вже будуть створені, і є один конфігураційний файл на об'єкт, який ми хочемо створити, і ми повинні вручну налаштувати всі мережі.

Таким чином, ми гарантуємо, що наше зображення розміщене на Docker Hub, зробимо один конфігураційний файл для створення контейнера та один конфігураційний файл для налаштування мереж.


1

Docker-Compose - це файл розгортання, який заздалегідь визначив один або кілька контейнерів із його оточенням, такими як томи, мережа, команда для запуску тощо.

Kubernetes, з іншого боку, - це система, яка оркеструє докер-контейнери та інші мікросервіси і робить їх масштабованими та надійними в декількох вузлах


1

Докер складається: контейнери докера можна запускати безпосередньо за допомогою будь-якого файлу yaml. Але за допомогою Докера можна створити властивості контейнера інструменту для створення композиції всередині файлу, який називається docker-compose.yml. будь ласка, знайдіть нижче зразок файлу yml для отримання більш детальної інформації.

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

ім'я зображення, кількість реплік і т. д. можна налаштувати за допомогою файлу yml.

Kubernetes: Це платформа для управління контейнерами, що працює над Docker, побудована google. Docker swam - ще одна платформа для управління контейнерами, побудована самим docker. Kubernetes також надає можливість зберігати конфігурацію, пов'язану з стручками (відповідають контейнеру в докер) у файлі yaml, як docker compose. приклад файлу 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

тут також можуть бути надані зображення, порти, які потрібно відкрити, і поділ для розміщення карток портів тощо. як docker compose, kubectl apply -f - команда для запуску цього файлу.


Отже, яка різниця? =)
Хрещений батько

docker compose - консоль для запуску зображень докера, а kubernetes - це не так, як це система оркестрування контейнерів. тож ці два не можна порівняти і зовсім відрізнятись. але kubernetes має kubectl - це також консоль і схожа на докер композицію
Налін Куларатна
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.