คุณกำลังขาดแนวคิดพื้นฐานของนักเทียบท่า มันเป็นสิ่งที่แตกต่างอย่างสิ้นเชิง
สิ่งแรกที่คุณต้องรู้คือปรัชญาของ 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 จะเป็นคุณสมบัติสำคัญอีกอย่างหนึ่งของคอนเทนเนอร์ที่จะมีอินเตอร์เฟสเครือข่ายเฉพาะเพื่อสื่อสารกับนักเทียบท่าบริดจ์ ฯลฯ
ดังนั้นใช่วัตถุประสงค์หลักของทั้งหมดนี้คือการเรียกใช้แอปพลิเคชันที่แยกได้ส่งจากสภาพแวดล้อมท้องถิ่นของคุณไปยังการผลิตได้อย่างง่ายดายด้วยภายในกล่องที่เรียกว่าคอนเทนเนอร์
จะเป็นการดีถ้าคุณอ่านเอกสารของนักเทียบท่าก่อนที่จะขุดลงไป