คอนเทนเนอร์ docker OS: อะไรคือความแตกต่างกับ VM แล้ว?


10

อะไรคือจุดประสงค์ของการใช้ระบบปฏิบัติการในตัวเชื่อมต่อ

ในที่เก็บนักเทียบท่าคุณจะพบภาพนักเทียบเรือของ Ubuntu: https://registry.hub.docker.com/_/ubuntu/ ฉันคิดว่านักเทียบท่ามีมากขึ้นในระดับ "แอป"

อะไรคือความแตกต่างระหว่างตู้คอนเทนเนอร์ Ubuntu docker และเครื่องเสมือน Ubuntu หากคุณมีทั้งระบบปฏิบัติการในตัวเทียบท่าแล้วมันไม่มีประโยชน์ที่จะใช้ Docker ใช่ไหม?

ขอบคุณ

คำตอบ:


11

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

สิ่งแรกที่คุณต้องรู้คือปรัชญาของ Docker: เรียกใช้หนึ่งกระบวนการที่แยกได้ในคอนเทนเนอร์ คุณจะไม่เรียกใช้ระบบปฏิบัติการในคอนเทนเนอร์ Docker คุณจะเรียกใช้กระบวนการภายในคอนเทนเนอร์ที่มีเนื้อหาระบบไฟล์รูทตามการกระจายของลินุกซ์ที่คุณเลือก Ubuntu เป็นตัวเลือกอื่น ๆ

ตอนนี้คุณควรสงสัยว่าเป็นไปได้อย่างไรที่จะทำให้กระบวนการทำงานภายในอิมเมจพื้นฐานของ linux แตกต่างจากการแจกจ่าย linux ที่โฮสต์ของคุณใช้งาน สำหรับระบบปฏิบัติการที่ต้องใช้งานคุณจำเป็นต้อง:

  • ระบบไฟล์สำหรับบูต: มี bootloader และเคอร์เนลที่จะอยู่ในหน่วยความจำเมื่อโหลดแล้ว เราไม่สนใจเกี่ยวกับเรื่องนี้ในกรณีของคอนเทนเนอร์ Docker เนื่องจากเคอร์เนลถูกแชร์กับโฮสต์และเป็นส่วนร่วมระหว่างการแจกแจงลินุกซ์ทั้งหมด
  • ระบบไฟล์รูท: มีโครงสร้างระบบไฟล์ มันอาจแตกต่างจากลินุกซ์ตัวหนึ่งไปยังอีกตัว มันเป็นแบบอ่านอย่างเดียวจนกระทั่งลำดับการบู๊ตเสร็จสิ้น

นักเทียบท่าใช้ UnionFS เพื่อจัดการเลเยอร์ของบล็อกดิสก์ภายในคอนเทนเนอร์เพื่อให้คุณสามารถกองซ้อนได้

ด้านหลังของฉากนั้นใช้ยูเนี่ยนเมาท์ซึ่งทำให้สามารถติดตั้งระบบไฟล์หลาย ๆ ไฟล์ได้ในเวลาเดียวกัน อันที่จริงแล้วมันลดเลเยอร์อิมเมจพื้นฐานเป็นโหมดอ่าน - เขียนที่ด้านบนของระบบไฟล์รูทฐานในโหมดอ่านอย่างเดียว

ที่นี่คุณมีกองบล็อกดิสก์เลเยอร์ในลักษณะที่ลินุกซ์กระจายภาพฐานมาจากจะมีระบบไฟล์เดียวกันเมื่อติดตั้งในโฮสต์จริง แต่มันอยู่ในภาชนะในเวลานี้

สิ่งสุดท้ายที่ขาดในตอนนี้คือ: คุณจะแยกสิ่งนี้ได้อย่างไร

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

  • IPC: IPC namespace (การสื่อสารระหว่างกระบวนการ)
  • MNT: เมานต์เนมสเปซ
  • NET: เนมสเปซเครือข่าย
  • PID: pid เนมสเปซ
  • USER: ชื่อผู้ใช้ (uid)
  • UTS: namespace UTS (ชื่อโฮสต์)

เนมสเปซเป็นโครงสร้างที่แยกได้ภายในเคอร์เนลที่อนุญาตให้กระบวนการทำงานด้วยสภาพแวดล้อมเฉพาะ ตัวอย่างเช่นเนมสเปซ MNT จะเป็นคุณสมบัติหลักในการทำให้กระบวนการทำงานในลักษณะเฉพาะของระบบไฟล์รูทอิมเมจพื้นฐาน NET namespace จะเป็นคุณสมบัติสำคัญอีกอย่างหนึ่งของคอนเทนเนอร์ที่จะมีอินเตอร์เฟสเครือข่ายเฉพาะเพื่อสื่อสารกับนักเทียบท่าบริดจ์ ฯลฯ

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

จะเป็นการดีถ้าคุณอ่านเอกสารของนักเทียบท่าก่อนที่จะขุดลงไป


ขอบคุณนั่นหมายความว่าภาพ "อูบุนตู" เช่นนี้: registry.hub.docker.com/_/ubuntuทำให้ "ไม่มีเหตุผล" โดยตัวมันเองและใช้เป็นฐานสำหรับคอนเทนเนอร์ที่กำหนดเพิ่มเติมเช่น "nginx container" ฉันไม่รู้ว่าฉันเหมาะสมหรือไม่
Michael

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

ฉันได้อ่านเอกสารแล้วและมีสิ่งหนึ่งที่ฉันไม่แน่ใจ สมมติว่าขนาดของภาพอูบุนตูคือ 140Mb จากนั้นภาพอื่นที่อ้างอิงภาพนี้จะเพิ่มอีก 10 Mb หากฉันใช้ 2 คอนเทนเนอร์จากอิมเมจนี้แต่ละคอนเทนเนอร์จะมี 150Mb และฉันต้องการพื้นที่ดิสก์ 300Mb หรือขนาดทั้งหมดจะยังคงอยู่ที่ 150Mb หรือไม่ ขอบคุณ
Michael

ว้าวฉันเพิ่งดาวน์โหลดภาพงูใหญ่อย่างเป็นทางการและขนาดเสมือนคือ 802.4 MB ใช้เวลาสักครู่ในการดาวน์โหลด ถ้าฉันใช้ 10 ตู้จากมันจะใช้พื้นที่เท่าไหร่? ขอบคุณ
Michael

2
@YAmikep ภาพบางภาพอาจมีขนาดใหญ่เนื่องจากการทำความสะอาดอ้างอิงไม่ถูกต้อง หากคุณเริ่มต้น 10 คอนเทนเนอร์ด้วยรูปภาพเดียวกันนั่นไม่ได้หมายความว่าพื้นที่ดิสก์ที่ใช้จะเท่ากับขนาดของรูปภาพ 10 เท่า คุณไม่โหลดรูปภาพหนึ่งภาพ แต่เรียกใช้จากหลาย ๆ คอนเทนเนอร์ นักเทียบท่าใช้ copy-on-write เมื่อเรียกใช้หลายคอนเทนเนอร์จากอิมเมจเดียวกันซึ่งโดยทั่วไปหมายความว่ามันจะแชร์อิมเมจระหว่างคอนเทนเนอร์และสร้างสำเนาส่วนตัวของไฟล์ภายในอิมเมจเฉพาะเมื่อคอนเทนเนอร์เพิ่ม / แก้ไข ขนาดที่แท้จริงที่ใช้จะถูกเชื่อมโยงกับกิจกรรมภายในคอนเทนเนอร์ไม่ใช่จำนวนที่รัน
ซาเวียร์ลูคัส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.