[หมายเหตุคำตอบนี้มุ่งเน้นไปที่คอนเทนเนอร์ Linux และอาจใช้กับระบบปฏิบัติการอื่นไม่ได้ทั้งหมด ]
คอนเทนเนอร์คืออะไร?
มันคือแอพ : คอนเทนเนอร์คือวิธีเรียกใช้แอพพลิเคชั่นที่แยกออกจากกัน แทนที่จะทำให้ฮาร์ดแวร์เป็นเสมือนเพื่อรันระบบปฏิบัติการหลาย ๆ ระบบคอนเทนเนอร์ต้องอาศัยการจำลองเสมือนระบบปฏิบัติการเพื่อรันแอพพลิเคชั่นหลายตัว ซึ่งหมายความว่าคุณสามารถเรียกใช้คอนเทนเนอร์บนฮาร์ดแวร์เดียวกันได้มากกว่า VM เนื่องจากคุณมีระบบปฏิบัติการที่รันเพียงสำเนาเดียวและคุณไม่จำเป็นต้องจัดสรรหน่วยความจำและแกน CPU ล่วงหน้าสำหรับแต่ละอินสแตนซ์ของแอป เช่นเดียวกับแอปอื่น ๆ เมื่อคอนเทนเนอร์ต้องการซีพียูหรือหน่วยความจำมันจะจัดสรรให้และปล่อยให้เป็นอิสระเมื่อเสร็จสิ้นทำให้แอปอื่น ๆ สามารถใช้ทรัพยากรที่ จำกัด เดียวกันได้ในภายหลัง
พวกเขาใช้ประโยชน์จากเคอร์เนลเนมสเปซ : โดยค่าเริ่มต้นแต่ละคอนเทนเนอร์จะได้รับสภาพแวดล้อมที่มีการกำหนดเนมสเปซต่อไปนี้:
- Mount: ระบบไฟล์
/
ในคอนเทนเนอร์จะแตกต่างจาก/
บนโฮสต์
- PID: รหัสกระบวนการ, pid 1 ในคอนเทนเนอร์คือแอปพลิเคชันที่เปิดใช้งานของคุณ pid นี้จะแตกต่างกันเมื่อดูจากโฮสต์
- เครือข่าย: คอนเทนเนอร์ทำงานด้วยอินเทอร์เฟซแบบย้อนกลับของตัวเอง (127.0.0.1) และ IP ส่วนตัวตามค่าเริ่มต้น นักเทียบท่าใช้เทคโนโลยีเช่นเครือข่ายบริดจ์ของลินุกซ์เพื่อเชื่อมต่อคอนเทนเนอร์หลายตัวเข้าด้วยกันในแลนส่วนตัวของตนเอง
- IPC: การสื่อสารระหว่างกระบวนการ
- UTS: รวมถึงชื่อโฮสต์
- ผู้ใช้: คุณสามารถเลือกที่จะเลื่อนรหัสผู้ใช้ทั้งหมดเพื่อหักล้างจากโฮสต์ได้
แต่ละเนมสเปซเหล่านี้ยังป้องกันไม่ให้คอนเทนเนอร์มองเห็นสิ่งต่างๆเช่นระบบไฟล์หรือกระบวนการบนโฮสต์หรือในคอนเทนเนอร์อื่น ๆ เว้นแต่คุณจะลบการแยกนั้นออกอย่างชัดเจน
และเครื่องมือรักษาความปลอดภัยอื่น ๆ ของลินุกซ์ : คอนเทนเนอร์ยังใช้คุณลักษณะด้านความปลอดภัยอื่น ๆ เช่น SELinux, AppArmor, Capabilities และ Seccomp เพื่อ จำกัด ผู้ใช้ภายในคอนเทนเนอร์รวมถึงผู้ใช้รูทไม่ให้สามารถหลบหนีจากคอนเทนเนอร์หรือส่งผลเสียต่อโฮสต์
แพ็กเกจแอปของคุณด้วยการอ้างอิงสำหรับการพกพา : การบรรจุแอปพลิเคชันลงในคอนเทนเนอร์ไม่เพียง แต่ต้องประกอบแอปพลิเคชันเท่านั้น แต่ยังรวมถึงการอ้างอิงทั้งหมดที่จำเป็นในการเรียกใช้แอปพลิเคชันนั้นให้เป็นภาพแบบพกพา อิมเมจนี้เป็นระบบไฟล์พื้นฐานที่ใช้สร้างคอนเทนเนอร์ เนื่องจากเรากำลังแยกแอปพลิเคชันเท่านั้นระบบไฟล์นี้จึงไม่รวมเคอร์เนลและยูทิลิตี้ระบบปฏิบัติการอื่น ๆ ที่จำเป็นในการจำลองระบบปฏิบัติการทั้งหมด ดังนั้นอิมเมจสำหรับคอนเทนเนอร์ควรมีขนาดเล็กกว่าอิมเมจสำหรับเครื่องเสมือนที่เทียบเท่ากันอย่างมากทำให้สามารถปรับใช้กับโหนดข้ามเครือข่ายได้เร็วขึ้น ด้วยเหตุนี้คอนเทนเนอร์จึงกลายเป็นตัวเลือกยอดนิยมสำหรับการปรับใช้แอปพลิเคชันในระบบคลาวด์และศูนย์ข้อมูลระยะไกล
สามารถแทนที่เครื่องเสมือนที่ทุ่มเทให้กับการพัฒนาได้หรือไม่?
ขึ้นอยู่กับ : หากสภาพแวดล้อมการพัฒนาของคุณใช้งาน Linux และคุณไม่จำเป็นต้องเข้าถึงอุปกรณ์ฮาร์ดแวร์หรือเป็นที่ยอมรับในการเข้าถึงฮาร์ดแวร์ทางกายภาพโดยตรงคุณจะพบว่าการย้ายข้อมูลไปยังคอนเทนเนอร์ Linux ค่อนข้างตรงไปตรงมา เป้าหมายที่เหมาะสมที่สุดสำหรับคอนเทนเนอร์นักเทียบท่าคือแอปพลิเคชันเช่น API บนเว็บ (เช่นแอป REST) ซึ่งคุณเข้าถึงผ่านเครือข่าย
จุดประสงค์ของการใช้ Docker ใน บริษัท คืออะไร? ประโยชน์หลัก?
Dev หรือ Ops : โดยทั่วไปแล้ว Docker จะถูกนำเข้าสู่สภาพแวดล้อมหนึ่งในสองเส้นทาง นักพัฒนากำลังมองหาวิธีในการพัฒนาและทดสอบแอปพลิเคชันในพื้นที่อย่างรวดเร็วยิ่งขึ้นและการดำเนินงานที่ต้องการใช้งานปริมาณงานมากขึ้นบนฮาร์ดแวร์น้อยกว่าที่จะเป็นไปได้กับเครื่องเสมือน
หรือ Devops : หนึ่งในเป้าหมายที่ดีที่สุดคือการใช้ประโยชน์จาก Docker ทันทีจากเครื่องมือการปรับใช้ CI / CD รวบรวมแอปพลิเคชันและสร้างอิมเมจที่ปรับใช้กับการพัฒนา CI prod และอื่น ๆ ทันทีคอนเทนเนอร์มักจะลดเวลาในการย้ายแอปพลิเคชัน ตั้งแต่การเช็คอินโค้ดจนกระทั่งพร้อมสำหรับการทดสอบทำให้นักพัฒนามีประสิทธิภาพมากขึ้น และเมื่อได้รับการออกแบบอย่างเหมาะสมก็สามารถนำรูปภาพเดียวกันกับที่ทดสอบและรับรองโดยนักพัฒนาและเครื่องมือ CI ไปใช้ในการผลิตได้ เนื่องจากภาพดังกล่าวมีการอ้างอิงแอปพลิเคชันทั้งหมดความเสี่ยงที่จะเกิดการแตกหักในการผลิตที่ทำงานในการพัฒนาจึงลดลงอย่างมาก
ความสามารถในการปรับขนาด : ประโยชน์หลักประการสุดท้ายของคอนเทนเนอร์ที่ฉันจะพูดถึงคือออกแบบมาเพื่อความสามารถในการปรับขนาดในแนวนอน เมื่อคุณมีแอปไร้สัญชาติภายใต้ภาระงานหนักคอนเทนเนอร์จะง่ายและเร็วกว่ามากในการขยายขนาดเนื่องจากขนาดภาพที่เล็กลงและค่าใช้จ่ายที่ลดลง ด้วยเหตุนี้คุณจึงเห็นคอนเทนเนอร์ถูกใช้โดย บริษัท ที่ทำงานบนเว็บขนาดใหญ่หลายแห่งเช่น Google และ Netflix