В чем разница между Docker Compose и Kubernetes?

329

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

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

Может ли кто-нибудь дать общее грубое описание того, где Docker, Docker Compose, Docker Cloud и Kubernetes пересекаются и где один зависит от другого?

Джордж Кацанос
источник

Ответы:

482

Докер :

  • Docker - это контейнерная технология, которая позволяет вам контейнировать ваши приложения.
  • Docker - это ядро ​​использования других технологий.

Docker Compose

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

Докер Рой

  • Docker Swarm предназначен для запуска и подключения контейнеров на нескольких хостах.
  • Docker Swarm - это инструмент управления и оркестровки контейнерных кластеров.
  • Он управляет контейнерами, работающими на нескольких хостах, и выполняет такие функции, как масштабирование, запуск нового контейнера при сбое, сетевые контейнеры ...
  • Docker Swarm является Docker в производстве. Это встроенный инструмент оркестровки Docker , встроенный в Docker Engine.
  • Файл Docker Swarm с именем stack file очень похож на файл Docker Compose.

Kubernetes

  • Kubernetes - это инструмент оркестровки контейнеров, разработанный Google.
  • Цель Кубернетеса очень похожа на цель Docker Swarm.

Docker Cloud

  • Платный сервис предприятие докер , что позволяет создавать и запускать контейнеры на облачных серверах и локальных серверов.
  • Он предоставляет веб-интерфейс и центральную панель управления для запуска и управления контейнерами, а также предоставляет все функции Docker в удобном веб-интерфейсе.

Обновить:

Docker cloud "частично" снят с производства

Службы в Docker Cloud, обеспечивающие управление приложениями, узлами и кластером роя, будут закрыты 21 мая [2020 года] ... службы автоматической сборки и хранения реестра не будут затронуты и будут по-прежнему доступны

yamenk
источник
Все хорошо, насчет последней вещи: «Облако Docker, позволяет вам запускать контейнеры ...». Что вы можете сделать, запустив эти контейнеры в облаке? могут ли они предоставить конечным точкам, к которым открыт доступ? По сути, докерское облако - это что-то вроде AWS, но для докеров (или это просто контейнерная библиотека для открытия)
Джордж Кацанос
2
Ок, прости. Я думаю, что я все еще в замешательстве. Значит ли это, что docker-compose похож на Kubernetes в том смысле, что он используется для организации контейнеров локально и является более удобным для локальной разработки, или Kubernetes намного больше этого?
Випин Менон
6
Справедливо ли провести следующую аналогию 1. docker-compose <> minikube 2. docker-swarm <> кластер kubernetes 3. docker-cloud <> управляемый кластер kubernetes по GCP, AWS и т. Д.
Anoop
1
«Docker swarm предназначен для запуска и ПОДКЛЮЧЕНИЯ контейнеров на нескольких хостах». : Что означает здесь «соединение»? Подключение к сети?
somebody_ смайлик
1
@someone_smiley Да. Это создает оверлейную сеть
OneCricketeer
136

В дополнение к ответу @ yamenk , я хотел бы добавить здесь несколько деталей, которые могут помочь людям в их путешествии по пониманию Kubernetes.

Короткий ответ:

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

Docker Compose

(из документации): Compose - это инструмент для определения и запуска многоконтейнерных приложений Docker. С Compose вы используете файл YAML для настройки служб вашего приложения. Затем с помощью одной команды вы создаете и запускаете все службы из вашей конфигурации.

Compose имеет команды для управления всем жизненным циклом вашего приложения:

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

Kubernetes

(из « Введения в Kubernetes» ): Kubernetes - это контейнерный оркестратор, такой как Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad . Контейнерные оркестраторы - это инструменты, которые группируют хосты для формирования кластера и помогают нам убедиться в правильности приложений:

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

Многие люди утверждают, что Kubernetes трудно учиться. Это потому, что это решает ряд проблем, и люди пытаются понять, не зная всех предпосылок. Это усложняет. Начните собирать части головоломки вместе, читая о понятиях / терминах, подобных следующему. Этот процесс поможет вам понять, какие проблемы пытается решить Kubernetes:

  • 12-факторные приложения,
  • Автоматическая бункерная упаковка,
  • Механизмы самовосстановления,
  • Горизонтальное масштабирование,
  • Обнаружение услуг и балансировка нагрузки,
  • Автоматические развертывания и откаты,
  • Сине-зеленые развертывания / Канарские развертывания
  • Секреты и управление конфигурацией,
  • Хранение оркестровки

А поскольку в отношении контейнеров и управления ими существует много разных вещей, следите за ландшафтом Cloud Native:

Интерактивная версия здесь: landscape.cncf.io/

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

Обновления

Май 2020: Docker Compose Specification теперь в открытом стандарте

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

tgogos
источник
Этот ответ устарел. docker.com/blog/...
OneCricketeer
1
Спасибо @ cricket_007 Я буду следить за этим, но я думаю, что это сообщение в блоге с 2018 года является своего рода ... "маркетингом". Сейчас 2020 год, и если вы посмотрите документы в Docker Compose и Compose, файл версии 3, то ничего о Kubernetes нет.
tgogos
Так? github.com/docker/compose-on-kubernetes docker stack deploy --orchestrator=kubernetes ... docs.docker.com/engine/reference/commandline/stack_deploy
OneCricketeer
1
о, удивительно, что есть композитный слой, который абстрагирует весь синтаксис kubernetes! Спасибо @ cricket_007.
Джордж Кацанос
28

Если вы используете сетевые контейнеры с одним и тем же хостом, перейдите к docker compose .

Если вы используете сетевые контейнеры на нескольких хостах, выбирайте kubernetes .

Аникет Алхат
источник
2
Вот такой ответ я ожидал! Несмотря на то, что это могло бы иметь более подробное объяснение, часть "tl; dr" на самом деле важна. Ни один из других ответов на самом деле не говорит об этом!
Крестный отец
8

первое различие между контейнерным двигателем и контейнерным оркестратором.

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

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

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

Docker cloud - это также предложение PaaS, которое позволит вам запускать и организовывать контейнеры через dockerAPI движка.

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

Надеюсь, что это помогло :) С уважением

Франческо Гуалацци
источник
1
Я немного запутался, почему вы обычно запускаете только один контейнер в докере? Хотя я считаю, что Docker-compose - лучшее решение, ничто не мешает запускать несколько контейнеров без него!
Питер
о да, иногда у меня работает mysql в фоновом режиме, затем я запускаю httpd и nginx как автономные контейнеры ... но затем, когда я хочу, чтобы все было автоматизировано, я определенно соберу docker-compose.yml для указания зависимостей, сетей и т. д. ..
Франческо Гуалацци
6

Docker Compose не является готовым инструментом для производства. Он отлично работает для PoC или сред разработки, но ему не хватает многих возможностей, которые являются более или менее настольными ставками для серьезного производственного использования. Swarm более готов к производству, но я бы никогда не инвестировал в Swarm в новом сценарии. Kubernetes выиграл битву за оркестровку, о чем свидетельствует его включение в Docker Desktop и его предложение всех основных облачных провайдеров. Kubernetes намного более способный и имеет намного больше сообщества и корпоративной поддержки.

Я бы порекомендовал окунуться в некоторые учебные пособия по Kubernetes, доступные в Pluralsight, Linux Academy и т. Д., И раскрутить кластер, чтобы поэкспериментировать с выбранной облачной платформой (EKS, AKS, GKE и т. Д.). Если вы пытаетесь раскрутиться на голом металле, взгляните на OpenShift, но осознайте, что в этой настройке вы теряете часть магии Кубернетов.

Ашок Редди
источник
Договорились, что k8s "победил" (пока). Но Месос раньше назывался золотым стандартом для производственных кластеров . DC / OS проделали отличную работу по продвижению корпоративных функций, но теперь вы можете даже запустить несколько кластеров k8s в среде Mesos и получить к ним доступ с единой независимой от поставщика платформы, так что же лучше?
OneCricketeer
3

Докер Составьте:

В docker-compose.ymlфайле каждая запись может при желании docker-composeсоздать изображение. каждая запись может представлять отдельный контейнер, который мы хотим построить, и каждая запись определяет сетевые требования или порты.

Kubernetes:

Kubernetes ожидает, что все образы уже созданы, и для каждого объекта, который мы хотим создать, есть один файл конфигурации, и мы должны вручную настроить все сети.

Поэтому мы гарантируем, что наш образ размещен на Docker Hub, создадим один файл конфигурации для создания контейнера и один файл конфигурации для настройки сети.

Даниил
источник
1

Docker-Compose - это файл развертывания, который предопределил один или несколько контейнеров с его средой, такой как тома, сеть, команда для запуска и так далее.

Kubernetes, с другой стороны, представляет собой систему, которая управляет докерными контейнерами и другими микросервисами и делает их масштабируемыми и надежными на нескольких узлах.

Янив Хаким
источник
1

Docker compose: контейнеры docker можно запускать напрямую без помощи любого файла yaml. Но с помощью Docker compose свойства контейнера могут быть определены внутри файла с именем docker-compose.yml file. пожалуйста, найдите приведенный ниже пример файла 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 также предоставляет возможность сохранять конфигурацию, связанную с модулями (соответствуют контейнеру в Docker) в файле 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 - это консоль для запуска образов docker, а kubernetes совсем не похож на систему управления контейнером. поэтому эти два нельзя сравнивать и они совершенно разные. но у kubernetes есть kubectl, это также консоль и похожий на докер сочинения
Nalin Kularathna