อะไรคือข้อแตกต่างระหว่าง Docker Compose และ Kubernetes


328

ในขณะที่ดำน้ำใน Docker, Google Cloud และ Kubernetes และยังไม่เข้าใจทั้งสามอย่างชัดเจนดูเหมือนว่าผลิตภัณฑ์เหล่านี้ซ้อนทับกัน แต่ฉันไม่สามารถใช้งานร่วมกันได้

ตัวอย่างเช่นdocker-compose.ymlไฟล์ต้องเขียนใหม่เพื่อให้แอปสามารถปรับใช้กับ Kubernetes

บางคนสามารถให้คำอธิบายในระดับสูงอย่างคร่าวๆว่า Docker, Docker Compose, Docker Cloud และ Kubernetes ทับซ้อนกันและที่หนึ่งขึ้นอยู่กับอีกหรือไม่

คำตอบ:


480

นักเทียบท่า :

  • นักเทียบท่าเป็นเทคโนโลยีคอนเทนเนอร์ที่ให้คุณบรรจุแอปพลิเคชันของคุณได้
  • นักเทียบท่าเป็นหัวใจสำคัญของการใช้เทคโนโลยีอื่น ๆ

นักแต่งเพลงประกอบ

  • Docker Compose ช่วยให้การกำหนดค่าและการเริ่มต้นคอนเทนเนอร์ Docker หลาย ๆ ตัว
  • docker run ...เทียบท่าเขียนส่วนใหญ่จะใช้เป็นผู้ช่วยเมื่อคุณต้องการที่จะเริ่มต้นภาชนะเทียบท่าที่หลากหลายและไม่ต้องการที่จะเริ่มต้นในแต่ละแยกโดยใช้
  • Docker Compose ใช้สำหรับเริ่มต้นคอนเทนเนอร์บนโฮสต์เดียวกัน
  • นักเขียนประกอบจะถูกใช้แทนพารามิเตอร์ที่ไม่จำเป็นทั้งหมดเมื่อสร้างและเรียกใช้คอนเทนเนอร์นักเทียบท่าเดียว

นักเทียบท่า Swarm

  • Docker Swarm สำหรับการใช้งานและเชื่อมต่อตู้คอนเทนเนอร์กับหลาย ๆโฮสต์เครื่อง
  • Docker Swarm เป็นเครื่องมือจัดการคลัสเตอร์และเครื่องมือวิเคราะห์ข้อมูล
  • มันจัดการคอนเทนเนอร์ที่ทำงานบนโฮสต์หลายเครื่องและทำสิ่งต่าง ๆ เช่นปรับขนาดเริ่มคอนเทนเนอร์ใหม่เมื่อล่มระบบเครือข่ายคอนเทนเนอร์ ...
  • นักเทียบท่า Swarm เป็นนักเทียบท่าในการผลิต เป็นเครื่องมือ orchestration Docker ดั้งเดิมที่ฝังอยู่ใน Docker Engine
  • ไฟล์ Docker Swarm ชื่อไฟล์สแต็กคล้ายกับไฟล์ Docker Compose

Kubernetes

  • Kubernetes เป็นเครื่องมือ orchestration คอนเทนเนอร์พัฒนาโดย Google
  • เป้าหมายของ Kubernetes นั้นคล้ายกับของ Docker Swarm มาก

นักเทียบท่าเมฆ

  • การจ่ายเงินบริการขององค์กรนักเทียบท่าที่ช่วยให้คุณสร้างและเรียกใช้ภาชนะบนเซิร์ฟเวอร์เมฆหรือเซิร์ฟเวอร์ท้องถิ่น
  • มันมี Web UI และแผงควบคุมส่วนกลางเพื่อเรียกใช้และจัดการคอนเทนเนอร์ในขณะที่ให้คุณสมบัติทั้งหมดของ Docker ในเว็บอินเตอร์เฟสที่ใช้งานง่าย

ปรับปรุง:

นักเทียบท่าบนคลาวด์ "บางส่วน" ถูกยกเลิก

บริการบน Docker Cloud ที่ให้บริการแอปพลิเคชันโหนดและการจัดการคลัสเตอร์แบบ Swarm จะปิดตัวลงในวันที่ 21 พฤษภาคม [2020] ... การสร้างอัตโนมัติและบริการที่เก็บข้อมูลรีจิสทรีจะไม่ได้รับผลกระทบและจะยังคงมีอยู่ต่อไป


สิ่งที่ดีเกี่ยวกับสิ่งสุดท้าย "คลาวด์นักเทียบท่าช่วยให้คุณเรียกใช้คอนเทนเนอร์ .. " ในทางปฏิบัติคุณจะทำอย่างไรกับการเรียกใช้คอนเทนเนอร์เหล่านี้บนคลาวด์ พวกเขาสามารถให้ปลายทางที่เข้าถึงได้แบบสาธารณะได้หรือไม่? เป็นหลักเป็นนักเทียบท่าเมฆบางอย่างเช่น AWS แต่สำหรับภาชนะนักเทียบท่า? (หรือเป็นเพียงคลังเก็บสำหรับการค้นพบ)
George Katsanos

2
โอเคขออภัย ฉันคิดว่าฉันยังคงสับสน นั่นหมายความว่านักเทียบท่าแต่งเป็นเหมือน Kubernetes ซึ่งมันถูกใช้เพื่อจัดวางภาชนะในท้องถิ่นและสะดวกกว่าสำหรับการพัฒนาท้องถิ่นหรือ Kubernetes ยิ่งกว่านี้มาก?
Vipin Menon

6
มันยุติธรรมที่จะทำการเปรียบเทียบดังต่อไปนี้ 1. docker-compose <> minikube 2. docker-swarm <> คลัสเตอร์ kubernetes 3. docker-cloud <> คลัสเตอร์ kubernetes ที่มีการจัดการโดย GCP, AWS, ฯลฯ
Anoop

1
"Docker swarm สำหรับการทำงานและเชื่อมต่อคอนเทนเนอร์บนโฮสต์หลาย ๆ เครื่อง" : "การเชื่อมต่อ" หมายความว่าอะไรที่นี่? การเชื่อมต่อเครือข่าย
someone_ smiley

1
@someone_smiley ใช่ มันสร้างเครือข่ายโอเวอร์เลย์
OneCricketeer

136

นอกเหนือจาก@ yamenk'sคำตอบฉันต้องการเพิ่มรายละเอียดเล็ก ๆ น้อย ๆ ที่นี่ซึ่งอาจช่วยให้ผู้คนในการเดินทางไปทำความเข้าใจกับ Kubernetes

คำตอบสั้น ๆ :

  • docker-compose: เป็นเครื่องมือที่ใช้ไฟล์ YAML ซึ่งอธิบายของคุณหลายภาชนะใบสมัครและช่วยให้คุณสร้าง , start / stop , เอาภาชนะบรรจุทุกคนโดยไม่ต้องพิมพ์หลายdocker ...คำสั่งสำหรับแต่ละภาชนะ
  • Kubernetes: เป็นแพลตฟอร์มสำหรับการจัดการภาระงานและบริการที่บรรจุไว้ซึ่งอำนวยความสะดวกทั้งในการกำหนดค่าการประกาศและระบบอัตโนมัติ อะไรนะ🤔อ่านต่อ ...

นักแต่งเพลงประกอบ

(จากเอกสาร): เขียนเป็นเครื่องมือสำหรับการกำหนดและเรียกใช้แอปพลิเคชันนักเทียบท่าที่มีหลายคอนเทนเนอร์ ด้วยการเรียบเรียงคุณใช้ไฟล์ YAML เพื่อกำหนดค่าบริการของแอปพลิเคชันของคุณ จากนั้นด้วยคำสั่งเดียวคุณสามารถสร้างและเริ่มบริการทั้งหมดจากการกำหนดค่าของคุณ

การเขียนมีคำสั่งสำหรับจัดการวงจรชีวิตทั้งหมดของแอปพลิเคชันของคุณ:

  • เริ่มหยุดและสร้างบริการใหม่
  • ดูสถานะของการเรียกใช้บริการ
  • สตรีมเอาท์พุทบันทึกของบริการที่ทำงานอยู่
  • เรียกใช้คำสั่ง one-off บนบริการ

Kubernetes

(จากข้อมูลเบื้องต้นเกี่ยวกับ Kubernetes ): Kubernetes เป็นผู้ประพันธ์ภาชนะเช่นหาง Swarm, Mesos มาราธอน, Amazon ECS, Hashicorp Nomad Container orchestrators เป็นเครื่องมือที่กลุ่มโฮสต์รวมกันเพื่อจัดทำคลัสเตอร์และช่วยให้เรามั่นใจได้ว่าแอปพลิเคชัน:

  • มีความผิดพลาด
  • สามารถปรับขนาดและทำตามความต้องการ
  • ใช้ทรัพยากรอย่างเหมาะสมที่สุด
  • สามารถค้นหาแอปพลิเคชั่นอื่นโดยอัตโนมัติและสื่อสารกัน
  • สามารถเข้าถึงได้จากโลกภายนอก
  • สามารถอัปเดต / ย้อนกลับได้โดยไม่ต้องหยุดทำงาน

หลายคนแย้งว่าคูเบอร์เนตนั้นยากที่จะเรียนรู้ มันเป็นเพราะมันแก้ปัญหาชุดและผู้คนพยายามที่จะเข้าใจโดยไม่ต้องรู้เบื้องต้นทั้งหมด สิ่งนี้ทำให้มันซับซ้อน เริ่มวางชิ้นส่วนของปริศนาเข้าด้วยกันโดยอ่านเกี่ยวกับแนวคิด / คำศัพท์ดังต่อไปนี้ กระบวนการนี้จะช่วยให้คุณเข้าใจปัญหาที่ Kubernetes พยายามแก้ไข:

  • แอพ 12 ปัจจัย
  • บรรจุอัตโนมัติ
  • กลไกการรักษาตนเอง
  • ปรับขนาดแนวนอน
  • การค้นพบบริการและการทำโหลดบาลานซ์
  • การเปิดตัวและการย้อนกลับอัตโนมัติ
  • การปรับใช้ Blue-Green / การปรับใช้ Canary
  • ความลับและการจัดการการกำหนดค่า
  • การจัดเก็บข้อมูล orchestration

และเนื่องจากมีสิ่งต่าง ๆ มากมายรอบ ๆ ตู้คอนเทนเนอร์และการจัดการของพวกเขาจับตาดูแนวนอนของ Native Cloud:

รุ่นอินเทอร์แอกทีฟที่นี่: landscape.cncf.io/

ป้อนคำอธิบายรูปภาพที่นี่

อัพเดท

พฤษภาคม 2020: ข้อมูลจำเพาะของนักเขียนประกอบในตอนนี้เป็นมาตรฐานเปิด

การทำงานกับ AWS, Microsoft และอื่น ๆ ในชุมชนโอเพนซอร์สเราได้ขยาย Compose Specification เพื่อสนับสนุนแพลตฟอร์มคลาวด์เนทีฟเช่น Kubernetes และ Amazon ECS นอกเหนือจากแพลตฟอร์ม Compose ที่มีอยู่ เพิ่มเติมได้ที่นี่: บล็อก / compose-spec.io


คำตอบนี้ล้าสมัยแล้ว docker.com/blog/…
OneCricketeer

1
ขอบคุณ @ cricket_007 ฉันจะจับตาดูเรื่องนี้ แต่ฉันคิดว่าโพสต์บล็อกนี้จากปี 2018 เป็นประเภท ... "การตลาด" มันเป็นปี 2020 และถ้าคุณตรวจสอบเอกสารที่Docker ComposeและCompose file version 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
George Katsanos

28

หากคุณกำลังเครือข่ายภายในภาชนะโฮสต์เดียวกันไปสำหรับนักเทียบท่าเขียน

หากคุณกำลังเครือข่ายทั่วภาชนะหลายครอบครัวไปKubernetes


2
นั่นคือประเภทของคำตอบที่ฉันคาดหวัง! แม้ว่ามันจะมีคำอธิบายเพิ่มเติม แต่ส่วน "tl; dr" เป็นประเด็น ไม่มีคำตอบอื่นที่จริงบอกว่า!
เจ้าพ่อ

8

ความแตกต่างแรกคือระหว่างเครื่องมือคอนเทนเนอร์และตัวจัดคอนเทนเนอร์

docker เป็นเอ็นจิ้นคอนเทนเนอร์ซึ่งทำให้คุณสามารถสร้างและเรียกใช้งานได้ไม่เกินหนึ่งคอนเทนเนอร์ภายในเครื่องพีซีของคุณเพื่อการพัฒนา

docker-compose เป็นเครื่องมือเทียบท่าเพื่อเรียกใช้คอนเทนเนอร์หลาย ๆ ตัวและให้พวกเขาแบ่งปันปริมาณและระบบเครือข่ายผ่านคุณสมบัติตัวเชื่อมต่อเครื่องยนต์ทำงานในพื้นที่เพื่อเลียนแบบองค์ประกอบของบริการและจากระยะไกลบนคลัสเตอร์

Kubernetes เป็นแพลตฟอร์ม orchestration ของตู้คอนเทนเนอร์ดูแลการใช้งานตู้คอนเทนเนอร์และปรับปรุงคุณสมบัติของเครื่องยนต์เพื่อให้สามารถประกอบและปรับขนาดตู้คอนเทนเนอร์เพื่อให้บริการแอปพลิเคชันที่ซับซ้อน (PaaS ที่จัดการโดยคุณหรือผู้ให้บริการคลาวด์) คุณสมบัติหลักของ Kubernetes คือการแยกโครงสร้างพื้นฐานออกจากแอปพลิเคชันที่ใช้ตู้คอนเทนเนอร์และมันยังเปิดสำหรับเครื่องยนต์อื่น ๆ ที่นักเทียบท่าเช่นมันสามารถเรียกใช้คอนเทนเนอร์ด้วย rkt หรือ cri-o

คลาวด์นักเทียบท่ายังเป็นข้อเสนอ PaaS ที่จะให้คุณเรียกใช้และปรับแต่งตู้คอนเทนเนอร์ผ่าน docker API ของเครื่องยนต์

ตอนนี้ขึ้นอยู่กับความต้องการระดับการควบคุมโครงสร้างพื้นฐานและกลุ่มเป้าหมายคุณสามารถใช้ Kubernetes กับ baremetal หรือ Azure ACS หรือ Google GKE เป็นต้น

หวังว่านี่จะช่วยได้ :) ขอแสดงความนับถือ


1
ฉันสับสนนิดหน่อยว่าทำไมคุณมักจะเรียกใช้เพียงหนึ่งคอนเทนเนอร์บนนักเทียบท่า? ในขณะที่ฉันคิดว่า Docker-compose เป็นทางออกที่ดีกว่าไม่มีอะไรจะหยุดคุณไม่ให้เริ่มภาชนะหลาย ๆ อันโดยที่ไม่มีมัน!
ปีเตอร์

โอ้ใช่บางครั้งฉันมี mysql ทำงานอยู่ในพื้นหลังแล้วเริ่ม httpd และ nginx เป็นคอนเทนเนอร์แบบสแตนด์อโลน ... แต่เมื่อฉันต้องการทุกสิ่งแบบอัตโนมัติฉันจะสร้างนักเทียบท่า-compose.yml เพื่อระบุการพึ่งพาเครือข่าย ฯลฯ ..
Francesco Gualazzi

6

นักแต่งเพลงประกอบไม่ใช่เครื่องมือที่พร้อมใช้งานจริง มันใช้งานได้ดีสำหรับ PoC หรือสภาพแวดล้อมการพัฒนา แต่ขาดความสามารถจำนวนมากซึ่งเป็นเดิมพันที่มากหรือน้อยสำหรับการใช้งานจริง Swarm พร้อมสำหรับการผลิตมากขึ้น แต่ฉันจะไม่ลงทุนกับ Swarm ในสถานการณ์สีเขียว Kubernetes ได้รับรางวัลการต่อสู้แนวออเคสตราเป็นหลักฐานโดยรวมไว้ใน Docker Desktop และผู้ให้บริการคลาวด์รายใหญ่ทุกรายนำเสนอ Kubernetes มีความสามารถมากขึ้นและมีการสนับสนุนชุมชนและองค์กรอีกมาก

ฉันขอแนะนำให้ดำน้ำในบทเรียนบางอย่างของ Kubernetes ที่ Pluralsight, Linux Academy, ฯลฯ และหมุนกลุ่มเพื่อเล่นกับแพลตฟอร์มคลาวด์ที่คุณเลือก (EKS, AKS, GKE, ฯลฯ ) หากคุณพยายามหมุนโลหะเปลือยลองดู OpenShift แต่จำไว้ว่าคุณสูญเสียความมหัศจรรย์ของ Kubernetes ในการตั้งค่านี้


ตกลงกันว่า k8s "ชนะ" (ตอนนี้) แต่ Mesos ใช้ในการถูกเรียกว่าเป็นมาตรฐานทองสำหรับกลุ่มการผลิต DC / OS ทำงานได้ดีในการผลักดันฟีเจอร์ขององค์กรออกมา แต่ตอนนี้คุณสามารถเรียกใช้กลุ่ม k8 หลายกลุ่มในสภาพแวดล้อม Mesos และเข้าถึงพวกเขาได้จากแพลตฟอร์มผู้ขายผู้ไม่เชื่อเรื่องพระเจ้าคนเดียว
OneCricketeer

3

นักเทียบท่าเขียน:

ในdocker-compose.ymlไฟล์แต่ละรายการสามารถเลือกที่docker-composeจะสร้างรูปภาพได้ แต่ละรายการสามารถเป็นตัวแทนของภาชนะเดียวที่เราต้องการสร้างและแต่ละรายการกำหนดข้อกำหนดของเครือข่ายหรือพอร์ต

Kubernetes:

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 นักเทียบท่าว่ายน้ำเป็นอีกหนึ่งแพลตฟอร์มการจัดการคอนเทนเนอร์ที่สร้างขึ้นโดยนักเทียบท่าเอง Kubernetes ยังให้ความสะดวกในการบันทึกการกำหนดค่าที่เกี่ยวข้องกับพ็อด (สอดคล้องกับคอนเทนเนอร์ในตัวเทียบท่า) ในไฟล์ yaml เช่นนักแต่ง ตัวอย่างไฟล์ 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

ที่นี่ยังมีรูปภาพพอร์ตที่จะเปิดและพ็อดแมปไปยังโฮสต์พอร์ต ฯลฯ สามารถกำหนดได้ เหมือนนักเทียบท่าเขียน kubectl Apply -f เป็นคำสั่งให้เรียกใช้ไฟล์นี้


ดังนั้นความแตกต่างคืออะไร =)
เจ้าพ่อ

นักเทียบท่าเขียนเป็นคอนโซลเพื่อเรียกใช้อิมเมจนักเทียบท่าและ kubernetes ไม่เหมือนที่มันเป็นระบบ orchestration คอนเทนเนอร์ ดังนั้นทั้งสองจึงไม่สามารถเปรียบเทียบและแตกต่างกันโดยสิ้นเชิง แต่ kubernetes มี kubectl มันยังเป็นคอนโซลและคล้ายกับนักแต่งเพลงเขียน
Nalin Kularathna
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.