Sự khác biệt giữa Docker Compose và Kubernetes là gì?


328

Khi đi sâu vào Docker, Google Cloud và Kubernetes và chưa hiểu rõ cả ba trong số chúng, có vẻ như các sản phẩm này chồng chéo lên nhau, nhưng chúng không tương thích.

Ví dụ: docker-compose.yml tệp cần phải được viết lại để ứng dụng có thể được triển khai lên Kubernetes.

Ai đó có thể cung cấp một mô tả cấp cao, sơ bộ về nơi Docker, Docker Compose, Docker Cloud và Kubernetes trùng nhau và nơi nào phụ thuộc vào nhau không?

Câu trả lời:


481

Docker :

  • Docker là công nghệ container cho phép bạn chứa các ứng dụng của mình.
  • Docker là cốt lõi của việc sử dụng các công nghệ khác.

Docker Soạn

  • Docker Compose cho phép cấu hình và bắt đầu nhiều container Docker.
  • Docker Compose chủ yếu được sử dụng như một trình trợ giúp khi bạn muốn bắt đầu nhiều container Docker và không muốn bắt đầu từng cái riêng biệt bằng cách sử dụng docker run ....
  • Docker Compose được sử dụng để bắt đầu các container trên cùng một máy chủ.
  • Docker Compose được sử dụng thay cho tất cả các tham số tùy chọn khi xây dựng và chạy một container docker duy nhất.

Docker Swarm

  • Docker Swarm là để chạy và kết nối các container trên nhiều máy chủ.
  • Docker Swarm là một công cụ quản lý và điều phối cụm container.
  • Nó quản lý các container chạy trên nhiều máy chủ và thực hiện những việc như nhân rộng, bắt đầu một container mới khi gặp sự cố, các container mạng ...
  • Docker Swarm là Docker trong sản xuất. Đây là nguồn gốc Docker công cụ dàn nhạc được nhúng trong Engine Docker.
  • Tệp Docker Swarm có tên là tệp stack rất giống với tệp Docker Compose.

Kubernetes

  • Kubernetes là một công cụ điều phối container được phát triển bởi Google.
  • Mục tiêu của Kubernetes rất giống với mục tiêu của Docker Swarm.

Đám mây Docker

  • Một trả dịch vụ doanh nghiệp Docker cho phép bạn xây dựng và container chạy trên các máy chủ đám mây hoặc máy chủ địa phương.
  • Nó cung cấp giao diện người dùng web và bảng điều khiển trung tâm để chạy và quản lý các thùng chứa trong khi cung cấp tất cả các tính năng Docker trong giao diện web thân thiện với người dùng.

Cập nhật:

Docker đám mây "một phần" ngưng

Các dịch vụ trên Docker Cloud cung cấp quản lý cụm ứng dụng, nút và swarm sẽ ngừng hoạt động vào ngày 21 tháng 5 [2020] ... các dịch vụ lưu trữ và đăng ký tự động, sẽ không bị ảnh hưởng và sẽ tiếp tục khả dụng


Tất cả đều tốt, về điều cuối cùng "Docker cloud, cho phép bạn chạy container .." thực tế, bạn có thể làm gì với việc chạy các container này trên đám mây? họ có thể cung cấp các điểm cuối truy cập công khai? về cơ bản là một đám mây docker giống như AWS nhưng đối với các container docker? (hoặc nó chỉ là một thư viện container để khám phá)
George Katsanos

2
Được rồi xin lỗi. Tôi nghĩ rằng tôi vẫn còn bối rối. Vì vậy, điều đó có nghĩa là docker-compose giống như Kubernetes ở chỗ nó được sử dụng để sắp xếp các container tại địa phương và thuận tiện hơn cho phát triển cục bộ hay Kubernetes nhiều hơn thế?
Vipin Menon

6
Có công bằng không khi thực hiện phép tương tự sau 1. docker-compose <> minikube 2. docker-swarm <> kubernetes cluster 3. docker-cloud <> được quản lý cụm kubernetes bởi GCP, AWS, v.v.
Anoop

1
"Docker swarm là để chạy và KẾT NỐI container trên nhiều máy chủ." : "Kết nối" nghĩa là gì ở đây? Kết nối mạng?
ai đó_ cười

1
@someone_smiley Vâng. Nó tạo ra một mạng lưới lớp phủ
OneCricketeer

136

Ngoài @ yamenk's câu trả lời , tôi muốn thêm một vài chi tiết ở đây có thể giúp mọi người trong hành trình tìm hiểu Kubernetes của họ.

Câu trả lời ngắn:

  • docker-compose: là một công cụ lấy tệp YAML mô tả ứng dụng đa vùng chứa của bạn và giúp bạn tạo , bắt đầu / dừng , xóa tất cả các vùng chứa đó mà không phải nhập nhiều docker ...lệnh cho mỗi vùng chứa.
  • Kubernetes: là một nền tảng để quản lý khối lượng công việc và dịch vụ được đóng gói, tạo điều kiện thuận lợi cho cả cấu hình khai báo và tự động hóa. Cái gì? 🤔 Tiếp tục đọc ...

Docker Soạn

(từ các tài liệu): Compose là một công cụ để xác định và chạy các ứng dụng Docker đa container. Với Compose, bạn sử dụng tệp YAML để định cấu hình dịch vụ của ứng dụng. Sau đó, với một lệnh duy nhất, bạn tạo và bắt đầu tất cả các dịch vụ từ cấu hình của mình.

Compose có các lệnh để quản lý toàn bộ vòng đời của ứng dụng của bạn:

  • Bắt đầu, dừng và xây dựng lại dịch vụ
  • Xem trạng thái của dịch vụ đang chạy
  • Truyền phát đầu ra nhật ký của các dịch vụ đang chạy
  • Chạy lệnh một lần trên một dịch vụ

Kubernetes

(từ Giới thiệu về Kubernetes ): Kubernetes là một nhà soạn nhạc container như Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad . Bộ điều phối container là các công cụ mà nhóm lưu trữ với nhau để tạo thành một cụm và giúp chúng tôi đảm bảo các ứng dụng:

  • có khả năng chịu lỗi,
  • có thể mở rộng quy mô và làm điều này theo yêu cầu
  • sử dụng tài nguyên một cách tối ưu
  • có thể tự động khám phá các ứng dụng khác và liên lạc với nhau
  • có thể truy cập từ thế giới bên ngoài
  • có thể cập nhật / rollback mà không có thời gian chết.

Nhiều người cho rằng Kubernetes khó học. Đó là bởi vì nó giải quyết được một loạt vấn đề và mọi người cố gắng hiểu mà không biết tất cả các điều kiện tiên quyết. Điều này làm cho nó phức tạp. Bắt đầu ghép các mảnh ghép lại với nhau bằng cách đọc về các khái niệm / thuật ngữ như sau. Quá trình này sẽ giúp bạn hiểu loại vấn đề mà Kubernetes cố gắng giải quyết:

  • Ứng dụng 12 yếu tố,
  • Tự động đóng gói,
  • Cơ chế tự phục hồi,
  • Chia tỷ lệ ngang,
  • Khám phá dịch vụ và cân bằng tải,
  • Tự động triển khai và rollback,
  • Triển khai Blue-Green / Triển khai Canary
  • Bí mật và quản lý cấu hình,
  • Dàn nhạc lưu trữ

Và bởi vì có rất nhiều thứ khác nhau xung quanh các container và quản lý của chúng, hãy để mắt đến phong cảnh của Cloud Native:

Phiên bản tương tác tại đây: cảnh quan.cncf.io /

nhập mô tả hình ảnh ở đây

Cập nhật

Tháng 5 năm 2020: Docker Compose Đặc điểm kỹ thuật bây giờ là một tiêu chuẩn mở

Làm việc với AWS, Microsoft và các tổ chức khác trong cộng đồng nguồn mở, chúng tôi đã mở rộng Đặc tả soạn thảo để hỗ trợ các nền tảng gốc trên đám mây như Kubernetes và Amazon ECS ngoài các nền tảng Compose hiện có. Xem thêm tại đây: blog / compose-spec.io


Câu trả lời này đã lỗi thời. docker.com/blog/ Kẻ
OneCricketeer

1
Cảm ơn @ cricket_007 Tôi sẽ theo dõi điều này, nhưng tôi nghĩ rằng bài đăng trên blog từ năm 2018 này là ... "tiếp thị". Đó là năm 2020 và nếu bạn kiểm tra các tài liệu tại Docker ComposeCompose tệp phiên bản 3 thì không có gì về Kubernetes.
tgogos


1
ồ, thật ngạc nhiên khi có một lớp soạn thảo tóm tắt tất cả cú pháp kubernetes! Cảm ơn @ cricket_007.
George Katsanos

28

Nếu bạn đang kết nối các container với cùng một máy chủ, hãy soạn docker .

Nếu bạn đang kết nối các container trên nhiều máy chủ, hãy tìm kubernetes .


2
Đó là loại câu trả lời tôi đang mong đợi! Mặc dù nó có thể có một số giải thích thêm, phần "tl; dr" thực sự là vấn đề. Không có câu trả lời nào khác thực sự nói lên điều đó!
Bố già

8

phân biệt đầu tiên là giữa động cơ container và bộ điều phối container.

docker là một công cụ chứa, nó làm cho bạn xây dựng và chạy thường không nhiều nhất một container, cục bộ trên PC của bạn cho mục đích phát triển.

docker-compose là một tiện ích Docker để chạy nhiều container và cho phép chúng chia sẻ khối lượng và kết nối mạng thông qua các tính năng của công cụ docker, chạy cục bộ để mô phỏng thành phần dịch vụ và từ xa trên các cụm.

Kubernetes là một nền tảng điều phối container, nó đảm nhiệm việc chạy các container và tăng cường các tính năng của động cơ để các container có thể được cấu tạo và thu nhỏ để phục vụ các ứng dụng phức tạp (loại PaaS, do bạn hoặc nhà cung cấp đám mây quản lý). Tính năng chính của Kubernetes là tách rời cơ sở hạ tầng khỏi ứng dụng bằng cách sử dụng các thùng chứa và nó cũng mở cho các công cụ khác mà Docker, ví dụ, nó có thể chạy các container với rkt hoặc cri-o.

Docker cloud cũng là một ưu đãi PaaS cho phép bạn chạy và sắp xếp các container thông qua docker API công cụ.

Bây giờ tùy thuộc vào nhu cầu của bạn, mức độ kiểm soát đối với cơ sở hạ tầng và đối tượng mục tiêu, bạn có thể sử dụng Kubernetes trên baremetal hoặc Azure ACS hoặc Google GKE, v.v ...

Hy vọng điều này sẽ giúp :) Trân trọng


1
Tôi hơi bối rối tại sao bạn thường chỉ chạy một container trên docker? Trong khi tôi nghĩ Docker-compose là một giải pháp tốt hơn, không có gì ngăn cản bạn bắt đầu nhiều container mà không có nó!
Peter

ồ vâng, đôi khi tôi có một mysql chạy nền, sau đó bắt đầu httpd và nginx dưới dạng các thùng chứa độc lập ... nhưng sau đó khi tôi muốn toàn bộ tự động, tôi chắc chắn sẽ xây dựng một docker-compose.yml để chỉ định các phụ thuộc, mạng, v.v. ..
Francesco Gualazzi

6

Docker Soạn không phải là một công cụ sẵn sàng sản xuất. Nó hoạt động tuyệt vời cho PoC hoặc môi trường phát triển, nhưng thiếu rất nhiều khả năng mà ít nhiều cổ phần bảng để sử dụng sản xuất nghiêm trọng. Swarm sẵn sàng sản xuất hơn, nhưng tôi sẽ không bao giờ đầu tư vào Swarm trong kịch bản sân xanh. Kubernetes đã giành chiến thắng trong cuộc chiến dàn nhạc, bằng chứng là nó được đưa vào Docker Desktop và nó được cung cấp bởi tất cả các nhà cung cấp điện toán đám mây lớn. Kubernetes có nhiều khả năng hơn và có nhiều hỗ trợ cộng đồng và doanh nghiệp hơn.

Tôi sẽ khuyên bạn nên đi sâu vào một số hướng dẫn Kubernetes có sẵn tại Pluralsight, Học viện Linux, v.v. và tạo ra một cụm để chơi xung quanh trong nền tảng đám mây của bạn (EKS, AKS, GKE, v.v.). Nếu bạn đang cố gắng xoay tròn trên kim loại trần, hãy xem OpenShift, nhưng nhận ra rằng bạn đã mất một số phép thuật của Kubernetes trong thiết lập này.


Đồng ý rằng k8s đã "thắng" (hiện tại). Nhưng Mesos từng được gọi là tiêu chuẩn vàng cho các cụm sản xuất . DC / OS đã làm rất tốt khi đẩy các tính năng doanh nghiệp ra ngoài, nhưng bây giờ bạn thậm chí có thể chạy nhiều cụm k8 trong môi trường Mesos và truy cập chúng từ một nền tảng bất khả tri của nhà cung cấp, vậy điều gì thực sự tốt hơn?
OneCricketeer

3

Docker Soạn:

Trong một docker-compose.ymltệp, mỗi mục có thể tùy ý có được docker-composeđể xây dựng một hình ảnh. mỗi mục có thể đại diện cho một bộ chứa duy nhất mà chúng tôi muốn xây dựng và mỗi mục xác định các yêu cầu hoặc cổng mạng.

Kubernetes:

Kubernetes hy vọng tất cả các hình ảnh đã được xây dựng và có một tệp cấu hình cho mỗi đối tượng chúng tôi muốn tạo và chúng tôi phải thiết lập thủ công tất cả các mạng.

Vì vậy, chúng tôi đảm bảo hình ảnh của chúng tôi được lưu trữ trên Docker Hub, tạo một tệp cấu hình để tạo vùng chứa và một tệp cấu hình để thiết lập mạng.


1

Docker-Compose là một tệp triển khai được xác định trước một hoặc nhiều vùng chứa với môi trường của nó như khối lượng, mạng, lệnh để chạy, v.v.

Kubernetes, mặt khác, là một hệ thống phối hợp các container docker và các dịch vụ siêu nhỏ khác bằng cách làm cho chúng được thu nhỏ và đáng tin cậy trên nhiều nút


1

Docker compose: container docker có thể được chạy trực tiếp với sự hỗ trợ của bất kỳ tập tin yaml nào. Nhưng với sự hỗ trợ của các thuộc tính bộ chứa công cụ soạn thảo Docker có thể được xác định bên trong một tệp gọi là tệp docker-compose.yml. vui lòng tìm tập tin mẫu yml dưới đây để biết thêm chi tiết.

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

Tên của hình ảnh, số lượng bản sao, vv .. có thể được cấu hình thông qua tệp yml.

Kubernetes: Đây là nền tảng quản lý container chạy trên Docker được xây dựng bởi google. Docker swam là một nền tảng quản lý container khác được xây dựng bởi chính docker. Kubernetes cũng cung cấp phương tiện để lưu cấu hình liên quan đến nhóm (tương ứng với vùng chứa trong docker) trong tệp yaml như docker compose. ví dụ tập tin 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

ở đây cũng có thể đưa ra hình ảnh, cổng được mở và pod để lưu trữ ánh xạ cổng, v.v. Giống như docker compose, kubectl áp dụng -f là lệnh để chạy tệp này.


Vì vậy, sự khác biệt là gì? =)
Bố già

docker compose là một giao diện điều khiển để chạy hình ảnh docker và kubernetes không giống như nó là một hệ thống điều phối container. vì vậy hai cái này không thể được so sánh và hoàn toàn khác nhau. nhưng kubernetes có kubectl nó cũng là một bàn điều khiển và tương tự như
docker compose
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.