ความสัมพันธ์ระหว่างระบบปฏิบัติการโฮสต์ Docker กับระบบปฏิบัติการอิมเมจพื้นฐานของคอนเทนเนอร์คืออะไร


122

ฉันไม่แน่ใจว่าฉันกำลังถามคำถามที่ถูกต้อง ... แต่ในขณะที่ฉันอ่านนักเทียบท่าทุกอย่างที่ฉันสามารถทำได้ฉันเห็นว่าฉันสามารถติดตั้ง Docker บน Ubuntu 12.04 (เช่น) จากนั้นฉันสามารถติดตั้งได้ Fedora container หรือ ubuntu เวอร์ชันอื่น? (มีตัวอย่างที่ผู้ใช้ติดตั้ง busybox ในคอนเทนเนอร์)

และแน่นอนว่าฉันคิดผิดไปหมด

แต่คงเป็นความคาดหวังของฉันที่มีการเชื่อมต่อชั่วคราวระหว่างระบบฐานและคอนเทนเนอร์

ปรับปรุงใหม่: อะไรคือความสัมพันธ์ระหว่างระบบปฏิบัติการโฮสต์และระบบปฏิบัติการของอิมเมจฐานคอนเทนเนอร์

คำตอบ:


100

ดังที่กล่าวไว้ใน BraveNewCurrency ความสัมพันธ์เดียวระหว่างโฮสต์ OS และคอนเทนเนอร์คือเคอร์เนล

เป็นหนึ่งในความแตกต่างที่สำคัญระหว่างนักเทียบท่าและเครื่องเสมือน 'ปกติ' ไม่มีค่าใช้จ่ายใด ๆ เกิดขึ้นโดยตรงภายในเคอร์เนลของโฮสต์

นี่คือเหตุผลที่คุณสามารถรันได้เฉพาะการกระจาย / ไบนารีที่ใช้ Linux ภายในคอนเทนเนอร์ หากคุณต้องการเรียกใช้อย่างอื่นไม่ใช่เรื่องที่เป็นไปไม่ได้ แต่คุณจะต้องมีการจำลองเสมือนภายในคอนเทนเนอร์ (qemu, kvm ฯลฯ )

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

อันที่จริงเพื่อความสะดวกของตัวอย่างเรามักจะใช้ภาพพื้นฐาน แต่คุณสามารถสร้างภาพของคุณได้โดยไม่ต้องใช้ไลบรารี / ไบนารีการแจกจ่ายใด ๆ ด้วยวิธีนี้คุณจะมีคอนเทนเนอร์ขนาดเล็ก แต่ใช้งานได้จริง

อีกหนึ่งประเด็นเกี่ยวกับการแจกแจง: เนื่องจากเคอร์เนลยังคงเป็นเคอร์เนลของโฮสต์คุณจะไม่มีโมดูล / แพตช์เคอร์เนลใด ๆ ที่จัดเตรียมโดยการแจกจ่าย


2
ดังนั้นหากโฮสต์ OS เป็น Ubuntu คอนเทนเนอร์นั้นจะเป็น Ubuntu ด้วยหรือไม่?
Richard

21
เคอร์เนลของคอนเทนเนอร์จะเป็นเคอร์เนลจาก ubuntu แต่ไม่มีอะไรเพิ่มเติม คุณสามารถเรียกใช้ centos, archlinux, debian หรือการกระจายตาม linux อื่น ๆ เป็นคอนเทนเนอร์ได้อย่างง่ายดาย
ดังขึ้น

37
แม้ว่าข้อมูลนี้อาจระบุโดยตรง / โดยอ้อมบนเว็บไซต์นักเทียบท่า แต่ฉันรู้สึกว่าพวกเขาควรทำให้ชัดเจนขึ้นเล็กน้อย ฉันได้ดำเนินการผ่านหน้าแรกภาพรวมบทช่วยสอนแบบอินเทอร์แอกทีฟและอุปกรณ์พื้นฐานส่วนใหญ่ อย่างไรก็ตามเรื่องนี้ฉันก็สับสนในหัวข้อนี้และเริ่มที่จะสันนิษฐานว่าประสิทธิภาพที่ดีที่สุดจากนักเทียบท่า (ตามแผนภาพสถาปัตยกรรมจากไซต์) จะต้องมีการจับคู่บนโฮสต์และระบบปฏิบัติการคอนเทนเนอร์ ฉันยังใหม่กับแนวคิดของ "linux kernel" ดังนั้นสิ่งนี้จึงไม่ชัดเจนสำหรับฉันในทันที การรู้สิ่งนี้ทันทีทำให้นักเทียบท่าเป็นสองเท่าของ bad-ass
ctrlplusb

2
Docker เป็นโครงการที่ค่อนข้างซับซ้อนซึ่งใช้ประโยชน์จากคุณสมบัติขั้นสูง ในบางประเด็นเราถือว่าผู้ใช้มีความรู้บางอย่างเช่นความแตกต่างระหว่างระบบปฏิบัติการและการแจกจ่าย หากคุณคิดว่ามันจะเพิ่มมูลค่าเอกสารนี้เป็นโอเพนซอร์สและคุณสามารถส่งคำขอดึงได้
creack

3
สิ่งนี้ดูเหมือนจะบ่งชี้ว่าเฉพาะส่วนพื้นที่ผู้ใช้ของระบบปฏิบัติการ (ไลบรารีคำสั่งแอปพลิเคชัน) เท่านั้นที่สามารถจัดเก็บได้ หากแอปพลิเคชันต้องการการแก้ไขเคอร์เนลที่แตกต่างกัน (เช่น 3.10 เทียบกับ 4.9) แอปพลิเคชันอาจไม่สามารถทำงานในคอนเทนเนอร์ได้ นั่นถูกต้องใช่ไหม?
David C.

23

แท้จริงแล้วสิ่งเดียวที่พวกเขามีเหมือนกันคือเคอร์เนล โลกทั้งใบของพวกเขา (ระบบไฟล์) อยู่ในคอนเทนเนอร์นักเทียบท่า


1

มีข้อควรพิจารณาอีกอย่างหนึ่ง - แม้ว่าทั้งสองเมล็ดจะเหมือนกัน แต่ก็มีปัญหาหากโฮสต์ OS ไม่รองรับ Docker เช่น RHEL 6: https://access.redhat.com/solutions/1378023

ดังนั้นคุณจะไม่สามารถหมุนคอนเทนเนอร์บน RHEL 6 ได้แม้ว่าอิมเมจจะเป็น Linux ก็ตาม

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