Docker เป็นที่นิยมมากในขณะนี้และเทคโนโลยีคอนเทนเนอร์ดูเหมือนจะมีอำนาจทุกอย่าง แต่นี่เป็นความเข้าใจผิด อย่าหลงใหลในฟองโฆษณา บทความนี้ทิ้งโฆษณาและแสดงรายการความเข้าใจผิดในปัจจุบันห้าประการของนักเทียบท่าจากมุมมองของโปรแกรมเมอร์ Java เพื่อช่วยให้คุณเข้าใจข้อดีและปัญหาของ Docker ได้ดีขึ้น
การละทิ้งโฆษณาจากสื่อและผู้ผลิตเราจะใช้ Docker ได้ดีขึ้นและมีเหตุผลมากขึ้นได้อย่างไร?
Docker ได้รับความสนใจอย่างมากเมื่อเร็ว ๆ นี้และเหตุผลก็ชัดเจน วิธีการส่งมอบรหัสสำเร็จทำให้ทุกคนมีปัญหาอยู่เสมอ เทคโนโลยีคอนเทนเนอร์แบบดั้งเดิมนั้นวุ่นวายท่ามกลางความต้องการและเทมเพลตมากมาย Docker สามารถสร้างคอนเทนเนอร์ได้อย่างง่ายดายและซ้ำ ๆ การใช้ Docker ช่วยให้สามารถส่งรหัสได้เร็วขึ้นและเป็นธรรมชาติกว่าคอนเทนเนอร์อื่น ๆ Duang, Docker เป็นที่นิยม! นอกจากนี้ยังมีความเข้าใจผิดและความเข้าใจผิด อย่าไว้ใจคนอื่นที่จะพูดว่านักเทียบท่าใช้งานง่ายหรือไม่ การคิดเกี่ยวกับนักเทียบท่าอย่างมีเหตุผลและครอบคลุมโดยตัวคุณเองจะช่วยให้คุณเข้าใจอย่างแท้จริงว่าคุณต้องการมันหรือไม่
บทความนี้แสดงการอ่านผิดที่สำคัญห้าคนจากมุมมอง Java แต่ก่อนอื่นแนะนำความรู้พื้นฐานบางอย่าง เพื่อให้เข้าใจ Docker ได้ดีขึ้นเราได้ปรึกษา Avishai ish-Shalom จาก Dlecterytes ซึ่งมีประสบการณ์นักเทียบท่าที่กว้างขวางและยังเป็นผู้จัดงานประชุม DevOps Days Conference เราได้ระบุความเข้าใจผิดเหล่านี้กับเขา
ความเข้าใจผิดหลัก
1. Docker เป็นเครื่องเสมือนที่มีน้ำหนักเบา
นี่คือความเข้าใจผิดหลักเมื่อคุณเริ่มต้น Docker ความเข้าใจผิดนี้เป็นที่เข้าใจได้ Docker ดูเหมือนเครื่องเสมือนจริง บางคนอาจเปรียบเทียบความแตกต่างระหว่างนักเทียบท่าและเครื่องเสมือนจริงในเว็บไซต์ Docker อย่างไรก็ตามนักเทียบท่าไม่ได้เป็นเครื่องเสมือนที่มีน้ำหนักเบา แต่เป็นคอนเทนเนอร์ Linux ที่ปรับปรุงแล้ว (LXC) นักเทียบท่าและเครื่องเสมือนนั้นแตกต่างกันอย่างสิ้นเชิง หากคุณใช้คอนเทนเนอร์ Docker เป็นเครื่องเสมือนที่มีน้ำหนักเบาคุณจะพบปัญหามากมาย
ก่อนที่จะใช้ Docker คุณต้องเข้าใจว่ามีความแตกต่างที่สำคัญมากมายระหว่างคอนเทนเนอร์ Docker และเครื่องเสมือน
การแยกทรัพยากร: Docker ไม่สามารถเข้าถึงระดับการแยกทรัพยากรที่เครื่องเสมือนสามารถให้ได้ ทรัพยากรของเครื่องเสมือนมีการแยกอย่างสูงและ Docker จำเป็นต้องใช้ทรัพยากรบางอย่างตั้งแต่เริ่มก่อตั้ง ทรัพยากรเหล่านี้ไม่สามารถแยกและป้องกันโดยนักเทียบท่าเช่นแคชหน้าและพูลเอนโทรปีเคอร์เนล (หมายเหตุ: สระว่ายน้ำเคอร์เนลเอนโทรปีเป็นที่น่าสนใจรวบรวมและเก็บบิตแบบสุ่มที่สร้างขึ้นโดยการดำเนินงานของระบบเครื่องจะใช้พูลนี้เมื่อจำเป็นต้องสุ่มเช่นที่เกี่ยวข้องกับรหัสผ่าน) หากคอนเทนเนอร์ Docker ใช้ทรัพยากรที่ใช้ร่วมกันเหล่านี้กระบวนการอื่น ๆ สามารถรอก่อนที่ทรัพยากรเหล่านี้จะถูกปล่อยออกมา
ค่าใช้จ่าย: คนส่วนใหญ่รู้ว่า CPU และ RAM ของเครื่องเสมือนสามารถให้ประสิทธิภาพเหมือนเครื่องทางกายภาพ แต่มีค่าใช้จ่าย IO เพิ่มเติมจำนวนมาก เนื่องจากระบบปฏิบัติการของแขกรับเชิญของเครื่องเสมือนถูกทอดทิ้งแพคเกจของ Docker จึงมีขนาดเล็กลงและต้องใช้ค่าใช้จ่ายที่เก็บน้อยกว่าเครื่องเสมือนจริง แต่นี่ไม่ได้หมายความว่านักเทียบท่าไม่มีปัญหาค่าใช้จ่าย คอนเทนเนอร์ Docker ยังคงต้องให้ความสนใจกับค่าใช้จ่ายของ IO แต่พวกเขาไม่ได้จริงจังเท่ากับเครื่องเสมือนจริง
การใช้เคอร์เนล: คอนเทนเนอร์ Docker และเครื่องเสมือนนั้นแตกต่างกันอย่างสิ้นเชิงในการใช้เคอร์เนล เครื่องเสมือนแต่ละเครื่องใช้เคอร์เนลหนึ่งตัว คอนเทนเนอร์ Docker แบ่งปันเมล็ดในตู้คอนเทนเนอร์ทั้งหมด เมล็ดที่ใช้ร่วมกันนำมาซึ่งผลกำไรบางอย่าง แต่ด้วยค่าใช้จ่ายของความพร้อมใช้งานสูงและความซ้ำซ้อน หากเคอร์เนลเกิดความผิดพลาดในเครื่องเสมือนจะได้รับผลกระทบเฉพาะเครื่องเสมือนในเคอร์เนลนี้ หากเคอร์เนลของคอนเทนเนอร์ Docker ขัดข้องคอนเทนเนอร์ทั้งหมดจะได้รับผลกระทบ
2. Docker ทำให้แอปพลิเคชันปรับขนาดได้
เนื่องจาก Docker สามารถปรับใช้รหัสบนเซิร์ฟเวอร์หลายเครื่องในเวลาอันสั้นโดยธรรมชาติบางคนจะคิดว่า Docker สามารถทำให้แอปพลิเคชันปรับขนาดได้เอง น่าเสียดายที่นี่ผิด รหัสเป็นรากฐานที่สำคัญของแอปพลิเคชันและ Docker ไม่ได้เขียนโค้ดใหม่ ความสามารถในการปรับขนาดของแอปพลิเคชันยังคงขึ้นอยู่กับโปรแกรมเมอร์ การใช้ Docker ไม่ได้ทำให้รหัสของคุณง่ายต่อการปรับขนาดโดยอัตโนมัติมันทำให้การปรับใช้ผ่านเซิร์ฟเวอร์ได้ง่ายขึ้น
3. นักเทียบท่าใช้กันอย่างแพร่หลายในสภาพแวดล้อมการผลิต
เนื่องจากนักเทียบท่ากำลังแกว่งอย่างเต็มที่หลายคนเชื่อว่านักเทียบท่าสามารถใช้ในสภาพแวดล้อมการผลิตขนาดใหญ่ อันที่จริงแล้วสิ่งนี้ไม่ถูกต้อง โปรดทราบว่านักเทียบท่ายังคงเป็นเทคโนโลยีใหม่ที่ยังไม่บรรลุนิติภาวะและเติบโตซึ่งหมายความว่ายังมีข้อบกพร่องและคุณสมบัติที่น่ารำคาญมากมายที่จะปรับปรุง มันเป็นความจริงที่คุณสนใจเทคโนโลยีใหม่ ๆ แต่เป็นการดีที่สุดที่จะหาสถานการณ์การใช้งานที่ถูกต้องและสิ่งที่ต้องให้ความสนใจ ตอนนี้ Docker ใช้งานง่ายกับสภาพแวดล้อมการพัฒนา การใช้ Docker สามารถสร้างสภาพแวดล้อมที่แตกต่างกันได้อย่างง่ายดาย (อย่างน้อยก็ทำให้ผู้คนรู้สึกว่าพวกเขาสามารถสร้างสภาพแวดล้อมที่แตกต่างกัน) ซึ่งมีประโยชน์มากสำหรับการพัฒนา
ในสภาพแวดล้อมการผลิตความไม่สมบูรณ์และความไม่สมบูรณ์ของ Docker ยัง จำกัด สถานการณ์การใช้งาน ตัวอย่างเช่น Docker ไม่สนับสนุนการตรวจสอบเครือข่ายและทรัพยากรโดยตรงสำหรับหลายเครื่องซึ่งทำให้แทบจะเป็นไปไม่ได้ที่จะใช้ในสภาพแวดล้อมการผลิต แน่นอนว่ามีหลายพื้นที่ที่มีศักยภาพเช่นการปรับใช้แพ็คเกจเดียวกันโดยตรงจากสภาพแวดล้อมการพัฒนาไปยังสภาพแวดล้อมการผลิต นอกจากนี้ยังมีคุณสมบัติรันไทม์ Docker บางอย่างที่มีประโยชน์สำหรับสภาพแวดล้อมการผลิต แต่โดยทั่วไปในสภาพแวดล้อมการผลิตปัจจุบันมีข้อได้เปรียบไม่มากไปกว่าข้อดี นี่ไม่ได้หมายความว่าไม่สามารถนำไปใช้กับสภาพแวดล้อมการผลิตได้สำเร็จ แต่ตอนนี้ไม่สามารถคาดหวังได้ว่าจะเติบโตและสมบูรณ์แบบในครั้งเดียว
4. Docker คือ Cross-Os
ความเข้าใจผิดอีกประการหนึ่งคือนักเทียบท่าทำงานในระบบปฏิบัติการและสภาพแวดล้อมใด ๆ สิ่งนี้อาจมาจากการเปรียบเทียบของคอนเทนเนอร์สำหรับการโหลดและขนถ่ายสินค้า แต่ความสัมพันธ์ระหว่างซอฟต์แวร์และระบบปฏิบัติการนั้นไม่ง่ายและตรงไปตรงมาตามตำแหน่งของเรือ
ในความเป็นจริง Docker เป็นเพียงเทคโนโลยีบน Linux นอกจากนี้ Docker ยังขึ้นอยู่กับคุณสมบัติเคอร์เนลที่เฉพาะเจาะจงและต้องมีเคอร์เนลเวอร์ชันล่าสุด ขึ้นอยู่กับความแตกต่างระหว่าง OSE ที่แตกต่างกันหากคุณไม่ได้ใช้คุณสมบัติทั่วไปต่ำที่สุดใน OSE คุณจะพบปัญหาที่ลำบากมากมาย ปัญหาเหล่านี้อาจมีอุบัติการณ์ 1% เท่านั้น แต่เมื่อคุณปรับใช้กับเซิร์ฟเวอร์หลายเครื่อง 1% ก็ถึงแก่ชีวิตได้เช่นกัน
แม้ว่า Docker จะทำงานบน Linux เท่านั้น แต่ก็สามารถใช้กับ OS X หรือ Windows ได้ การใช้ boot2docker จะเรียกใช้เครื่องเสมือน Linux บนเครื่อง OS X หรือ Windows ดังนั้น Docker สามารถทำงานในเครื่องเสมือนนี้ได้
5. Docker ช่วยเพิ่มความปลอดภัยของแอปพลิเคชัน
นอกจากนี้ยังเป็นความเข้าใจผิดที่ Docker สามารถปรับปรุงความปลอดภัยของรหัสและกระบวนการจัดส่ง นี่คือความแตกต่างระหว่างคอนเทนเนอร์จริงและคอนเทนเนอร์บนซอฟต์แวร์ Docker เป็นเทคโนโลยีคอนเทนเนอร์ที่เพิ่มวิธีการ orchestration อย่างไรก็ตามคอนเทนเนอร์ Linux มีช่องโหว่ด้านความปลอดภัยที่อาจถูกโจมตี Docker ไม่ได้เพิ่มเลเยอร์ความปลอดภัยหรือแพตช์ลงในช่องโหว่เหล่านี้ ไม่ใช่เสื้อกางเกงที่สามารถปกป้องแอปพลิเคชัน
จากมุมมองของ Java
นักพัฒนา Java บางคนเริ่มใช้ Docker คุณสมบัติของ Docker บางอย่างทำให้เราสามารถสร้างบริบทที่ปรับขนาดได้ง่ายขึ้น ซึ่งแตกต่างจาก Uber-jar, Docker สามารถช่วยคุณแพ็คเกจการพึ่งพาทั้งหมดของคุณ (รวมถึง JVM) ลงในภาพพร้อมปล่อย นี่เป็นสิ่งที่น่าสนใจที่สุดเกี่ยวกับนักเทียบท่าสำหรับนักพัฒนา อย่างไรก็ตามสิ่งนี้จะนำมาซึ่งอันตรายที่ซ่อนอยู่ โดยทั่วไปโปรแกรมเมอร์จำเป็นต้องตรวจสอบในรูปแบบที่แตกต่างกันและรหัสแบบโต้ตอบดีบั๊กเชื่อมต่อปรับแต่ง ... หากคุณใช้ Docker สิ่งเหล่านี้จะต้องทำงานเพิ่มเติม
ตัวอย่างเช่นเราต้องการใช้ JConsole ซึ่งอาศัยฟังก์ชั่น JMX เนื่องจาก JMX ต้องการเครือข่ายเพื่อใช้ RMI มันไม่ได้โดยตรงมากนักถ้าคุณใช้ Docker และคุณต้องการทักษะบางอย่างในการเปิดพอร์ตที่ต้องการ ในขั้นต้นเราค้นพบว่าปัญหาคือเมื่อเราต้องการสร้างแอปพลิเคชัน Docker สำหรับ Takipi เราต้องเรียกใช้โปรแกรมพื้นหลังนอก JVM ในคอนเทนเนอร์ การแก้ปัญหาโดยละเอียดเกี่ยวกับ GitHub
ปัญหาร้ายแรงอีกประการหนึ่งคือการปรับแต่งประสิทธิภาพของคอนเทนเนอร์ Docker นั้นค่อนข้างยาก เมื่อใช้คอนเทนเนอร์คุณไม่ทราบว่าแต่ละคอนเทนเนอร์แต่ละตัวจะจัดสรร หากคุณมีตู้คอนเทนเนอร์ 20 ตัวหน่วยความจำจะถูกจัดสรรให้กับพวกเขาในรูปแบบที่คุณไม่แน่ใจ หากคุณวางแผนที่จะปรับฮีปด้วยพารามิเตอร์ -xmx มันเป็นเรื่องยากเนื่องจากการประมวลผลของ JVM ในคอนเทนเนอร์ Docker ขึ้นอยู่กับความสามารถในการรับหน่วยความจำที่จัดสรรให้กับคอนเทนเนอร์โดยอัตโนมัติ การปรับแต่งประสิทธิภาพแทบจะเป็นไปไม่ได้ถ้าคุณไม่รู้ว่ามีการจัดสรรหน่วยความจำมากแค่ไหน
สรุปแล้ว
Docker เป็นเทคโนโลยีที่น่าสนใจมากและมีสถานการณ์การใช้งานจริงและมีประสิทธิภาพ ในฐานะที่เป็นเทคโนโลยีที่เกิดขึ้นใหม่มันยังใช้เวลานานในการแก้ไขคุณสมบัติที่ขาดหายไปและข้อบกพร่องที่รู้จัก อย่างไรก็ตามตอนนี้มีโฆษณามากมายในสาขานี้ แต่จำไว้ว่า hype ไม่ประสบความสำเร็จ ~
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!