หากคุณดูที่คุณสมบัติของ Docker นั้นส่วนใหญ่มีให้โดย LXC แล้ว
ดังนั้นนักเทียบท่าจะเพิ่มอะไร? ทำไมฉันถึงต้องใช้ Docker กับ LXC ธรรมดา
หากคุณดูที่คุณสมบัติของ Docker นั้นส่วนใหญ่มีให้โดย LXC แล้ว
ดังนั้นนักเทียบท่าจะเพิ่มอะไร? ทำไมฉันถึงต้องใช้ Docker กับ LXC ธรรมดา
คำตอบ:
จากคำถามที่พบบ่อยนักเทียบท่า :
นักเทียบท่าไม่ใช่การทดแทนสำหรับ lxc "lxc" หมายถึงความสามารถของเคอร์เนล linux (โดยเฉพาะเนมสเปซและกลุ่มควบคุม) ซึ่งอนุญาตกระบวนการแซนด์บ็อกซ์จากกันและควบคุมการจัดสรรทรัพยากร
นอกเหนือจากคุณสมบัติพื้นฐานของเคอร์เนลระดับต่ำแล้ว Docker ยังมีเครื่องมือระดับสูงที่มีฟังก์ชั่นที่ทรงพลังหลายประการ:
การปรับใช้แบบพกพาข้ามเครื่องนักเทียบท่ากำหนดรูปแบบสำหรับการรวมแอปพลิเคชันและการอ้างอิงทั้งหมดลงในวัตถุเดียวซึ่งสามารถถ่ายโอนไปยังเครื่องที่เปิดใช้งานนักเทียบท่าใด ๆ และดำเนินการที่นั่นพร้อมกับการรับประกันว่าสภาพแวดล้อมการดำเนินการที่เปิดเผยกับแอปพลิเคชันจะเหมือนกัน Lxc ใช้กระบวนการ sandboxing ซึ่งเป็นสิ่งจำเป็นก่อนการปรับใช้แบบพกพา แต่เพียงอย่างเดียวนั้นไม่เพียงพอสำหรับการปรับใช้แบบพกพา หากคุณส่งสำเนาของแอปพลิเคชันของคุณที่ติดตั้งในการกำหนดค่า lxc ที่กำหนดเองมันจะไม่ทำงานบนเครื่องของฉันเหมือนกับที่คุณทำเพราะมันเชื่อมโยงกับการกำหนดค่าเฉพาะของเครื่องของคุณ: เครือข่ายการจัดเก็บการบันทึก distro เป็นต้นนักเทียบท่ากำหนดสิ่งที่เป็นนามธรรมสำหรับการตั้งค่าเฉพาะเครื่องเหล่านี้เพื่อให้ภาชนะนักเทียบท่าเดียวกันที่แน่นอนสามารถทำงานได้ - ไม่เปลี่ยนแปลง - บนเครื่องที่แตกต่างกัน
การประยุกต์ใช้เป็นศูนย์กลาง นักเทียบท่าได้รับการปรับให้เหมาะสำหรับการปรับใช้แอปพลิเคชันซึ่งตรงข้ามกับเครื่อง สิ่งนี้สะท้อนให้เห็นใน API ส่วนติดต่อผู้ใช้ปรัชญาการออกแบบและเอกสารประกอบ ในทางตรงกันข้ามสคริปต์ lxc helper มุ่งเน้นไปที่คอนเทนเนอร์เป็นเครื่องจักรที่มีน้ำหนักเบา - โดยทั่วไปเซิร์ฟเวอร์ที่บูตได้เร็วขึ้นและต้องการหน่วยความจำน้อยลง เราคิดว่ามีมากกว่าตู้คอนเทนเนอร์
สร้างโดยอัตโนมัติ นักเทียบท่ามีเครื่องมือสำหรับนักพัฒนาในการรวบรวมภาชนะจากซอร์สโค้ดโดยอัตโนมัติพร้อมการควบคุมแอพพลิเคชั่นอย่างสมบูรณ์สร้างเครื่องมือบรรจุภัณฑ์และอื่น ๆ พวกเขามีอิสระที่จะใช้ make, maven, พ่อครัว, หุ่นเชิด, เกลือ, debian package, rpms tarballs หรือการรวมกันใด ๆ ดังกล่าวข้างต้นโดยไม่คำนึงถึงการกำหนดค่าของเครื่องที่
รุ่น นักเทียบท่ารวมถึงความสามารถเหมือน git สำหรับการติดตามเวอร์ชันที่ต่อเนื่องของคอนเทนเนอร์การตรวจสอบความแตกต่างระหว่างเวอร์ชันการคอมไพล์เวอร์ชันใหม่การย้อนกลับเป็นต้นประวัติยังรวมถึงวิธีการรวมตัวของคอนเทนเนอร์และบุคคล ตลอดทางกลับไปที่ผู้พัฒนาต้นน้ำ นักเทียบท่ายังใช้การอัปโหลดและดาวน์โหลดเพิ่มเติมเช่นเดียวกับ "git pull" ดังนั้นเวอร์ชันใหม่ของคอนเทนเนอร์สามารถถ่ายโอนได้โดยการส่ง diffs เท่านั้น
นำส่วนประกอบกลับมาใช้ใหม่ คอนเทนเนอร์ใด ๆ สามารถใช้เป็น "ภาพฐาน" เพื่อสร้างส่วนประกอบพิเศษเพิ่มเติม ซึ่งสามารถทำได้ด้วยตนเองหรือเป็นส่วนหนึ่งของการสร้างอัตโนมัติ ตัวอย่างเช่นคุณสามารถเตรียมสภาพแวดล้อมของงูใหญ่ที่เหมาะสมที่สุดและใช้เป็นฐานสำหรับ 10 แอปพลิเคชันที่แตกต่างกัน การตั้งค่า postgresql ในอุดมคติของคุณสามารถนำมาใช้ใหม่สำหรับโครงการในอนาคตของคุณทั้งหมด และอื่น ๆ
ที่ใช้ร่วมกัน นักเทียบท่ามีการเข้าถึงรีจิสตรีสาธารณะ ( https://registry.hub.docker.com/ ) ที่มีผู้คนนับพันอัปโหลดคอนเทนเนอร์ที่มีประโยชน์: สิ่งใดก็ตามจาก Redis, couchdb, postgres ไปยัง bouncers irc ไปจนถึงราวแอพเซิร์ฟเวอร์ของแอพ distros ต่างๆ รีจิสตรียังมี "ไลบรารีมาตรฐาน" อย่างเป็นทางการของคอนเทนเนอร์ที่มีประโยชน์ซึ่งดูแลโดยทีมนักเทียบท่า รีจิสตรีเองนั้นเป็นโอเพ่นซอร์สดังนั้นใครก็ตามสามารถปรับใช้รีจิสตรีของตัวเองเพื่อจัดเก็บและถ่ายโอนคอนเทนเนอร์ส่วนตัวสำหรับการปรับใช้เซิร์ฟเวอร์ภายในเช่น
เครื่องมือระบบนิเวศ นักเทียบท่ากำหนด API สำหรับการทำให้เป็นอัตโนมัติและปรับแต่งการสร้างและการปรับใช้ภาชนะ มีเครื่องมือจำนวนมากที่ทำงานร่วมกับนักเทียบท่าเพื่อขยายขีดความสามารถ การปรับใช้ที่เหมือน PaaS (Dokku, Deis, Flynn), orchestration หลายโหนด (มาสโทร, เกลือ, Mesos, openstack nova), แดชบอร์ดการจัดการ (นักเทียบท่า-UI, openstack ขอบฟ้า, อู่ต่อเรือ), การจัดการการกำหนดค่า (เชฟหุ่นกระบอก) (jenkins, strider, travis) ฯลฯ Docker กำลังสร้างตัวเองอย่างรวดเร็วเป็นมาตรฐานสำหรับการใช้เครื่องมือที่ใช้ภาชนะ
ฉันหวังว่านี่จะช่วยได้!
ลองมาดูรายการคุณสมบัติทางเทคนิคของ Dockerและตรวจสอบว่า LXC นั้นเป็นรุ่นใดบ้าง
1) การแยกระบบไฟล์ : แต่ละคอนเทนเนอร์กระบวนการทำงานในระบบไฟล์รูทที่แยกจากกันอย่างสมบูรณ์
จัดเตรียมด้วย LXC ธรรมดา
2) การแยกทรัพยากร : ทรัพยากรระบบเช่น cpu และหน่วยความจำสามารถจัดสรรให้แตกต่างกันไปในแต่ละกระบวนการของคอนเทนเนอร์โดยใช้ cgroups
จัดเตรียมด้วย LXC ธรรมดา
3) การแยกเครือข่าย : แต่ละกระบวนการคอนเทนเนอร์จะทำงานในเนมสเปซเครือข่ายของตนเองพร้อมด้วยอินเตอร์เฟสเสมือนและที่อยู่ IP ของตนเอง
จัดเตรียมด้วย LXC ธรรมดา
4) Copy-on-write : ระบบไฟล์รูทสร้างขึ้นโดยใช้ copy-on-write ซึ่งทำให้การปรับใช้รวดเร็วมากหน่วยความจำราคาถูกและดิสก์ราคาถูก
สิ่งนี้จัดทำโดย AUFS ซึ่งเป็นระบบไฟล์รวมที่นักเทียบท่าขึ้นอยู่กับ คุณสามารถตั้งค่า AUFS ด้วยตนเองได้ด้วย LXC แต่นักเทียบท่าใช้มันเป็นมาตรฐาน
5) การบันทึก : สตรีมมาตรฐาน (stdout / stderr / stdin) ของแต่ละคอนเทนเนอร์กระบวนการจะถูกรวบรวมและบันทึกสำหรับการดึงแบบเรียลไทม์หรือแบทช์
นักเทียบท่าให้สิ่งนี้
6) การจัดการการเปลี่ยนแปลง: การเปลี่ยนแปลงระบบไฟล์ของคอนเทนเนอร์สามารถถูกกำหนดเป็นรูปภาพใหม่และนำมาใช้ใหม่เพื่อสร้างคอนเทนเนอร์เพิ่มเติม ไม่ต้องกำหนดค่า templating หรือกำหนดเอง
"Templating หรือการกำหนดค่าด้วยตนเอง" เป็นการอ้างอิงถึง LXC ซึ่งคุณจะต้องเรียนรู้เกี่ยวกับทั้งสองสิ่งนี้ นักเทียบท่าช่วยให้คุณรักษาภาชนะบรรจุในแบบที่คุณคุ้นเคยกับการรักษาเครื่องเสมือนโดยไม่ต้องเรียนรู้เกี่ยวกับการกำหนดค่า LXC
7) Interactive shell : นักเทียบท่าสามารถจัดสรร pseudo-tty และแนบกับอินพุตมาตรฐานของคอนเทนเนอร์ใด ๆ ตัวอย่างเช่นเพื่อรันเชลล์แบบโต้ตอบที่ถูกทิ้งไว้
LXC ได้มอบสิ่งนี้แล้ว
ฉันเพิ่งเริ่มเรียนรู้เกี่ยวกับ LXC และ Docker ดังนั้นฉันจึงยินดีรับการแก้ไขหรือคำตอบที่ดีกว่า
unshare
เครื่องมือพื้นฐาน(หรือโดยตรงclone()
syscall) ในทำนองเดียวกันนักเทียบท่าทำให้สิ่งเหล่านั้นใช้งานง่ายขึ้น (และนำคุณสมบัติเพิ่มเติมมากมายบนโต๊ะเช่นความสามารถในการผลัก / ดึงภาพ) 2c ของฉัน
update-index
และread-tree
โดยไม่มีเครื่องมือที่คุ้นเคยชอบadd
, และcommit
merge
นักเทียบท่าแสดงเลเยอร์ "ลายคราม" เหนือ "plumbing" ของ LXC ช่วยให้คุณทำงานกับแนวคิดระดับสูงขึ้นและไม่ต้องกังวลกับรายละเอียดระดับต่ำ
โพสต์ดังกล่าวข้างต้นและคำตอบอย่างรวดเร็วกลายเป็นวันที่การพัฒนาLXD ยังคงเพิ่ม LXC ใช่ฉันรู้ว่านักเทียบท่ายังไม่หยุดนิ่งเช่นกัน
ตอนนี้ LXD ใช้ที่เก็บสำหรับอิมเมจคอนเทนเนอร์ LXC ซึ่งผู้ใช้สามารถผลัก / ดึงจากเพื่อสนับสนุนหรือนำมาใช้ซ้ำ
REST api to LXCของ LXD ตอนนี้เปิดใช้งานการสร้าง / ปรับใช้ / การจัดการ / ระยะไกลของคอนเทนเนอร์ LXC โดยใช้ไวยากรณ์คำสั่งที่ง่ายมาก
คุณสมบัติที่สำคัญของ LXD คือ:
มีNCLXD ปลั๊กอินในขณะนี้สำหรับการอนุญาตให้ OpenStack OpenStackที่จะใช้ในการปรับใช้ LXD / จัดการภาชนะบรรจุ LXC เป็น VMs ใน OpenStack แทนการใช้ KVM, VMware ฯลฯ
อย่างไรก็ตาม NCLXD ยังเปิดใช้งานไฮบริดคลาวด์ของการผสมผสานระหว่าง HW VM แบบดั้งเดิมและ LXC VM
ปลั๊กอิน OpenStack nclxd รายการคุณลักษณะที่รองรับรวมถึง:
stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support
ตามเวลาที่อูบุนตู 16.04 ถูกปล่อยออกมาในเดือน เม.ย. 2016 จะได้รับเย็นคุณสมบัติเพิ่มเติมเช่นการสนับสนุนอุปกรณ์ป้องกันการสนับสนุนการถ่ายทอดสดการโยกย้าย
นักเทียบท่าใช้รูปภาพที่สร้างในเลเยอร์ นี่เป็นการเพิ่มความสามารถในการพกพาการแชร์การกำหนดรุ่นและคุณสมบัติอื่น ๆ มากมาย รูปภาพเหล่านี้ง่ายต่อการย้ายหรือถ่ายโอนและเนื่องจากอยู่ในเลเยอร์การเปลี่ยนแปลงในเวอร์ชันถัดมาจึงถูกเพิ่มในรูปแบบของเลเยอร์เหนือเลเยอร์ก่อนหน้า ดังนั้นในขณะที่พอร์ตหลายครั้งคุณไม่จำเป็นต้องพอร์ตชั้นฐาน นักเทียบท่ามีคอนเทนเนอร์ที่ใช้งานอิมเมจเหล่านี้โดยมีสภาพแวดล้อมในการทำงานอยู่พวกมันเพิ่มการเปลี่ยนแปลงเมื่อเลเยอร์ใหม่ให้การควบคุมเวอร์ชันง่าย
นอกเหนือจากนั้น Docker Hub ยังเป็นรีจิสตรีที่มีภาพสาธารณะนับพันภาพซึ่งคุณสามารถค้นหาภาพที่ติดตั้งระบบปฏิบัติการและซอฟต์แวร์อื่น ๆ ดังนั้นคุณสามารถเริ่มต้นที่ดีงามสำหรับใบสมัครของคุณ
จะเก็บเงินจำนวนเล็กน้อยนี้จะถูกถามและตอบ ไปแล้วข้างต้น
ฉันจะถอยกลับและตอบมันแตกต่างกันเล็กน้อยตัวเชื่อมต่อเครื่องยนต์เพิ่มการเชื่อมต่อเข้าด้วยกันเป็นหนึ่งในความพิเศษและนี่คือส่วนที่ก่อกวน เมื่อคุณเริ่มใช้งานแอปด้วยการรวมกันของตู้คอนเทนเนอร์ที่ใช้ 'ที่ใดที่หนึ่ง' ในหลาย ๆ ตู้คอนเทนเนอร์มันน่าตื่นเต้นมาก ความแข็งแกร่ง, การขยายในแนวนอน, การทำให้เป็นนามธรรมอย่างสมบูรณ์จากฮาร์ดแวร์ที่อยู่ข้างใต้ฉันสามารถดำเนินการต่อไป ...
มันไม่ใช่แค่นักเทียบท่าที่ให้สิ่งนี้ในความเป็นจริงมาตรฐานพฤตินัย Container Orchestration คือ Kubernetes ที่มาในหลากหลายรสชาติหนึ่งนักเทียบท่า แต่ยัง OpenShift, SuSe, Azure, AWS ...
จากนั้นภายใต้ K8S จะมีเครื่องยนต์คอนเทนเนอร์สำรอง สิ่งที่น่าสนใจคือ Docker และ CRIO ซึ่งเพิ่งถูกสร้างขึ้นไม่น่าไว้วางใจเพื่อใช้เป็นตู้คอนเทนเนอร์สำหรับ Kubernetes แต่ยังไม่สมบูรณ์ การแข่งขันระหว่างสิ่งเหล่านี้ที่ฉันคิดว่าจะเป็นตัวเลือกระยะยาวที่แท้จริงสำหรับเครื่องยนต์คอนเทนเนอร์