คอนเทนเนอร์นักเทียบท่ามีเคอร์เนลของตัวเองหรือไม่?


65

ฉันเห็นว่าภาพนักเทียบท่าจำนวนมากในที่เก็บนักเทียบท่านั้นทำจากฐาน Ubuntu

นั่นหมายความว่าอย่างไร? ภาชนะแต่ละอันรวมลีนุกซ์เคอร์เนลเวอร์ชั่นที่ดึงลงมาหรือไม่?

ภาชนะบรรจุนั่งอยู่บนเมล็ดของพวกเขาเองหรือ แต่ฉันคิดว่าคอนเทนเนอร์แชร์เคอร์เนลของโฮสต์ (ซึ่งในบางกรณีคือ boot2docker, Tiny Core Linux บิวด์บิวด์ที่กำหนดเองและอื่น ๆ เช่น CoreOS)

แก้ไข:ชี้แจงคำถามเล็กน้อย ใช่ฉันรู้ว่านักเทียบท่าเป็นที่เก็บกระบวนการไม่ใช่ VM แบบเต็ม แต่เนื่องจากมี "อูบุนตู" บรรจุในรีจิสทรีศูนย์กลางนักเทียบท่าอย่างเป็นทางการและระบบปฏิบัติการอื่น ๆ เช่น CentOS มันหมายความว่าอะไรที่จะใช้ Ubuntu ในคอนเทนเนอร์?

คำตอบ:อ่าเพิ่งมาถึงฉันแล้ว มันเป็นกระบวนการเชื่อมโยงผู้ใช้ของ Ubuntu ซึ่งประกอบด้วย apt-get และกระบวนการกำหนดค่าอื่น ๆ สำหรับการสร้าง Ubuntu เฉพาะ ในทำนองเดียวกันสำหรับ CentOS นักเทียบท่าไม่ใช่กระบวนการเดียวเพียงรายการเดียว ดังนั้นสำหรับการแจกแจงเหล่านี้จุดเริ่มต้นเป็นกระบวนการเริ่มต้นบางอย่างที่เกิดกระบวนการอื่น ๆ


2
"เป็นกระบวนการเชื่อมโยงผู้ใช้ Ubuntu" - ไม่เพียง แต่ประมวลผลเท่านั้น แต่ยังรวมถึงห้องสมุดด้วย
osgx

คำตอบ:


37

นักเทียบท่าใช้เคอร์เนลระบบปฏิบัติการโฮสต์ไม่มีเคอร์เนลแบบกำหนดเองหรือเคอร์เนลเพิ่มเติมภายในคอนเทนเนอร์ คอนเทนเนอร์ทั้งหมดที่ทำงานบนเครื่องกำลังแชร์เคอร์เนล "โฮสต์" นี้

วิกิพีเดียกล่าวว่าhttp://en.wikipedia.org/wiki/Docker_(software)ว่า

นักเทียบท่าใช้คุณสมบัติการแยกทรัพยากรของเคอร์เนล Linux เช่น cgroups และเคอร์เนลเนมสเปซเพื่ออนุญาตให้ "คอนเทนเนอร์" อิสระทำงานภายในอินสแตนซ์ Linux เดียวหลีกเลี่ยงค่าใช้จ่ายในการเริ่มต้นเครื่องเสมือน

cgroups, namespaces และ LXC เป็นคุณสมบัติของลีนุกซ์เคอร์เนลเพื่อแยกกลุ่มของกระบวนการ; ยังมีเคอร์เนลเดี่ยวตัวกำหนดตารางเวลาเดียวและหนึ่งอินสแตนซ์ของตัวจัดการหน่วยความจำเคอร์เนล

Boot2docker และ CoreOS เป็นเพียงลินุกซ์ดิสทริบิวชันที่มีโฮสต์เคอร์เนลบางตัว สามารถใช้เพื่อโหลดคอนเทนเนอร์ของนักเทียบท่าได้

http://boot2docker.io/

boot2docker เป็นการกระจาย Linux ที่มีน้ำหนักเบาโดยใช้ Tiny Core Linux ซึ่งทำขึ้นเป็นพิเศษเพื่อเรียกใช้คอนเทนเนอร์ Docker มันทำงานได้อย่างสมบูรณ์จาก RAM น้ำหนัก ~ 27MB และบู๊ทใน ~ 5s (YMMV)

http://en.wikipedia.org/wiki/CoreOS

โฮสต์การควบคุมเดียว (อินสแตนซ์ CoreOS) ใช้ระบบ Linux หลายตัว (คอนเทนเนอร์) โดยใช้ Docker เป็นเลเยอร์เพิ่มเติมของนามธรรมและอินเทอร์เฟซ [14] ไปยังคุณลักษณะการจำลองเสมือนระดับระบบปฏิบัติการของเคอร์เนล Linux ... วิธีการนี้อาศัยการทำงานของกลุ่มเคอร์เนลลินุกซ์ซึ่งให้การแยก namespace และความสามารถในการ จำกัด บัญชีและแยกการใช้ทรัพยากร (CPU, หน่วยความจำ, ดิสก์ I / O ฯลฯ ) สำหรับคอลเลกชันของกระบวนการ


1
สิ่งนี้ไม่ตอบคำถาม
EML

2
EML คำถามใด? ตามค่าเริ่มต้นคอนเทนเนอร์ Docker ทั้งหมดจะไม่มีเมล็ดของตัวเอง มีโฮสต์เคอร์เนลเดียวเท่านั้นสำหรับคอนเทนเนอร์ Docker ทั้งหมด
osgx

แน่นอนว่าคำตอบของคุณนั้นดีเท่าที่จะเป็นไปได้ แต่ OP ต้องการทราบว่าเหตุใดเขาจึงต้องFROMสร้างภาพฐาน Ubuntu เมื่อโฮสต์ใช้งาน Ubuntu อยู่แล้ว ในการตอบคำถามคุณต้องอธิบายว่าภาพพื้นฐานคืออะไร
EML

2
EML คำถามถูกแก้ไขด้วย "Clarifying" ( superuser.com/posts/889472/revisions ) หลังจากคำตอบของฉันถูกโพสต์ดังนั้นจึงเป็นคำตอบสำหรับคำถามเดิมโดยไม่ต้องชี้แจง หากคุณมีข้อมูลบางอย่างที่จะแบ่งปันเกี่ยวกับภาพฐานและเมล็ดในนักเทียบท่าให้เพิ่มคำตอบอื่น
osgx

17

ในเกือบทุกกรณีเคอร์เนลโฮสต์ OS จะถูกแชร์ ในการใช้งานเคอร์เนลอื่นคุณจำเป็นต้องใช้ระบบเสมือนจริง นี่เป็นของหายากและใช้เมื่อจำเป็นเนื่องจากความเสื่อมประสิทธิภาพ

"คอนเทนเนอร์ Docker Engine ประกอบด้วยเพียงแอปพลิเคชันและการพึ่งพามันทำงานเป็นกระบวนการแยกใน userpace บนระบบปฏิบัติการโฮสต์แชร์เคอร์เนลกับคอนเทนเนอร์อื่น ๆ ดังนั้นจึงสนุกกับการแยกทรัพยากรและการจัดสรรประโยชน์ของ VM แต่มีอีกมากมาย พกพาและมีประสิทธิภาพ "

สิ่งนี้อาจช่วยอธิบายวิธีการทำงาน: ป้อนคำอธิบายรูปภาพที่นี่

ที่มา: https://www.docker.com/whatisdocker/


4
แหล่งใด ๆ สำหรับ "แพคเกจอาจใช้เมล็ดที่แตกต่างกัน" ??? นักเทียบท่าเองไม่สามารถใช้เมล็ดได้หลายเมล็ดมีเคอร์เนลโฮสต์เดียวเสมอ เฉพาะเมื่อรวมกับไฮเปอร์ไวเซอร์ (การจำลองเสมือน) เราสามารถเริ่มโฮสต์ได้หลายเครื่องพร้อมกันด้วยเคอร์เนลเวอร์ชันของตัวเองและรันหนึ่งตัวต่อหนึ่งโฮสต์เสมือน แต่สำหรับโฮสต์ใด ๆ จะมีเพียงหนึ่งโปรแกรมสำหรับโฮสต์และสำหรับบรรจุเทียบของมัน)
osgx

2
แพ็คเกจคืออะไร คอนเทนเนอร์ Docker ไม่มีเคอร์เนลอยู่ภายใน มันเพิ่งติดตั้งและเริ่มต้นบนเคอร์เนลซึ่งใช้กับโฮสต์ ดังนั้น: หนึ่ง Docker = หนึ่งเซิร์ฟเวอร์ = หนึ่งเคอร์เนลตามที่แสดงในภาพ ไม่มีวิธีการใช้สองเมล็ดด้วยเอ็นจิน Docker เดียว คอนเทนเนอร์ทั้งหมดภายในเอ็นจินนี้จะใช้เคอร์เนลเดียวกัน ผมคิดว่าคำตอบที่ถูกต้องคือ "ไม่มีภาชนะหางไม่สามารถใช้เมล็ดแตกต่างกันภายในเช่นเดียวของหางเครื่องยนต์"
osgx

1
คอนเทนเนอร์นักเทียบท่าแต่ละคนสามารถเรียกใช้โค้ดที่ต้องการรวมถึงซอฟต์แวร์การจำลองเสมือนที่สามารถโหลดเคอร์เนลที่ซอฟต์แวร์ของคุณอาจต้องการ คุณสามารถเรียกใช้ Windows ในที่เก็บหากคุณต้องการ
JeremiahBarrar

1
JeremiahBarrar เข้าใจแล้วขอบคุณสำหรับคำอธิบาย การใช้งานซอฟต์แวร์การจำลองเสมือนจากด้านในของคอนเทนเนอร์ Docker มีการบันทึกและสนับสนุนโดย Docker หรือไม่ การจำลองเสมือนแบบใดที่จะทำงานได้จาก Docker (ซอฟต์แวร์ qemu, qemu + kvm, xen, ... )?
osgx

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