คอนเทนเนอร์คืออะไร


23

อธิบายได้อย่างง่ายดายshivab.com/blog/docker/2019/01/10/…
นักมายากล

คำตอบ:


18

สิ่งแรกที่ต้องรู้เกี่ยวกับคอนเทนเนอร์คือ:

มันเป็นครั้งแรกและสำคัญที่สุดในกระบวนการ

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

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

เครื่องเสมือนใช้ไฮเปอร์ไวเซอร์เพื่อแยก VMs ออกจากโฮสต์ นี่คือเลเยอร์ของซอฟต์แวร์ที่ส่งต่อการร้องขอทรัพยากรจาก "แขก" (VM) ไปยังฮาร์ดแวร์ การแยกดิสก์จัดทำโดยการจำลองเสมือนของดิสก์ VMs ไม่แชร์เคอร์เนลกับโฮสต์ - พวกมันจะโหลดเมล็ดของตนเองเข้าไปในพื้นที่หน่วยความจำสำหรับ VM โดยเฉพาะ

ผลกระทบที่สำคัญอย่างหนึ่งของความแตกต่างนี้คือคอนเทนเนอร์ต้องสามารถทำงานร่วมกับเคอร์เนลกับโฮสต์ได้ ตัวอย่างเช่นไม่สามารถเรียกใช้คอนเทนเนอร์ที่ใช้ Windows Nano Server บนโฮสต์ Linux หรือคอนเทนเนอร์ Ubuntu โดยตรงบนโฮสต์ Windows ตรงกันข้ามเครื่องเสมือนสามารถเรียกใช้เคอร์เนลใด ๆ โดยไม่คำนึงถึงโฮสต์ OS เมื่อรันคอนเทนเนอร์ Linux บนโฮสต์ Windows Docker จะรันคอนเทนเนอร์ใน Linux VM

ความแตกต่างในการปฏิบัติงานมีความคล่องตัว: ภาชนะบรรจุเริ่มและหยุดได้เร็วเท่ากับกระบวนการปกติ วีเอ็มเอสนั้น "หนักกว่า" ซึ่งต้องการทรัพยากรเฉพาะสำหรับพวกเขาและใช้เวลานานกว่าในการเริ่มต้นและปิดตัวลง

ภาชนะบรรจุมีความยืดหยุ่นอย่างมากสำหรับรูปแบบการดำเนินงาน DevOps:

  • ภาชนะแยกการพึ่งพาองค์ประกอบของซอฟต์แวร์ นักพัฒนาสามารถใช้ตู้คอนเทนเนอร์เพื่อรับประกันว่าโมดูลแอปพลิเคชันจะทำงานได้ดีบนเครื่องพัฒนาของพวกเขาเช่นเดียวกับใน QA / UA / Production
  • ตู้คอนเทนเนอร์ใช้เครือข่ายที่กำหนดโดยซอฟต์แวร์เพื่อสื่อสาร
  • คำจำกัดความของคอนเทนเนอร์เป็นข้อมูลที่เปิดเผยและสามารถควบคุมได้
  • ระบบการจัดการคอนเทนเนอร์ (Kubernetes, DC / OS, Swarm) สามารถจัดการทรัพยากรฮาร์ดแวร์ (การคำนวณ / RAM / การจัดเก็บ) และการปรับขนาดแบบไดนามิก

1
ฉันยังทำ 3 สัญลักษณ์ล่าสุดของคุณบน vSphere ด้วยคนจรจัด :)
Tensibai

8

คำว่าcontainerหมายถึงเทคโนโลยี virtualisation ที่มีน้ำหนักเบาบนเคอร์เนล Linux ที่ทันสมัยเทคโนโลยีนี้คล้ายกับ FreeBSD jails มาก

เคอร์เนล Linux ที่เก่ากว่าและไม่สามารถคอนเทนเนอร์สามารถเรียกใช้กระบวนการพร้อมกันได้ แอ็ตทริบิวต์บางส่วนของระบบเป็นแบบส่วนตัวสำหรับกระบวนการเช่นสภาพแวดล้อมกระบวนการหรือหน่วยความจำกระบวนการ: เฉพาะกระบวนการที่เป็นเจ้าของคุณลักษณะเหล่านี้และระบบปฏิบัติการเท่านั้นที่สามารถเข้าถึงข้อมูลนี้ได้ (มีช่องโหว่มากมายเช่นการใช้งานpsบางอย่างแต่นั่นเป็นเรื่องจริง!) คุณลักษณะอื่น ๆ บางอย่างจะถูกใช้ร่วมกันระหว่างกระบวนการเช่นระบบแฟ้มและอินเทอร์เฟซเครือข่ายเป็นต้น

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

แน่นอนว่านี่เป็นเพียงคำอธิบายที่หยาบมาก แต่ฉันหวังว่ามันจะช่วยอธิบายความคิดของภาชนะบรรจุ ตอนนี้สิ่งที่ดีสำหรับ

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

เทคโนโลยีบนตู้คอนเทนเนอร์นั้นสะดวกต่อการ:

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

(ตามที่คุณคุ้นเคยกับเทคโนโลยี virtualisation อื่น ๆ เช่น Virtual Box คุณอาจสังเกตว่าเทคโนโลยีเหล่านี้ยังสามารถระบุจุดสามจุดด้านบนได้อย่างสะดวกสบายทุกวันนี้มี virtualisation technology ค่อนข้างน้อยและเราสามารถเปรียบเทียบคำถามของความนิยมใน บริบทบางอย่างกับความนิยมของภาษาคอมพิวเตอร์: มันอาจขึ้นอยู่กับข้อดีทางเทคนิคของการแก้ปัญหาแต่ละข้อ แต่รวมถึงปัจจัยหลายอย่างที่ฉันจะระบุว่า "โอกาส")


1
ไม่ จำกัด ลินุกซ์อีกต่อไป windows 16 มีความสามารถเหมือนกัน
Tensibai

1
ลิงก์เพื่อสนับสนุนเอกสารการเรียกร้องของฉันdocs.microsoft.com/en-us/virtualization/windowscontainers/…
Tensibai

7

โดยปกติคอนเทนเนอร์หมายถึงบางสิ่งบางอย่างเช่นคอนเทนเนอร์นักเทียบท่าซึ่งเป็นที่นิยมของชื่อ

ฉันพูดมีนิยามจากนักเทียบท่า:

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

การตั้งชื่อรูทนั้นมาจากlinux container (lxc) ซึ่งมีเป้าหมายที่จะแยกกระบวนการออกจากระบบโฮสต์เป้าหมายแรกคือเพื่อหลีกเลี่ยงการประนีประนอมของกระบวนการเพื่อเข้ายึดครองระบบโฮสต์

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

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

ไม่น่าจะเป็นระบบ VM เช่นเครื่องเสมือนกล่องเสมือนหรืออินสแตนซ์ EC2 บน AWS ตู้คอนเทนเนอร์เป็นเสมือนเฉพาะในระดับระบบไฟล์และแยกได้เฉพาะในหน่วยความจำสแต็ก พวกเขายังคงใช้โฮสต์เดียวกันและระบบปฏิบัติการภายใต้พวกเขาจะตัดสินเห็บ cpu

เครื่องเสมือนเป็นเสมือนที่ระดับฮาร์ดแวร์และคุณเรียกใช้ระบบปฏิบัติการภายในคอนเทนเนอร์เป็นเสมือนที่ระดับระบบปฏิบัติการและเรียกใช้กระบวนการภายใน


1
หืมดังนั้นบางอย่างเช่น VirtualBox-image (หรืออะไรก็ตามที่เรียกว่าใน VirtualBox) อาจมีคุณสมบัติเป็น "คอนเทนเนอร์" หรือฉันไม่เข้าใจหรือไม่
Pierre.Vriens

เห็นฉันลืมส่วนหนึ่งของคำถามเพิ่มความแตกต่างในขณะที่ขยายคำตอบ
Tensibai

3

จากคำจำกัดความของ AWS :

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

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

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