ทำไมคุณควรใช้ Docker และคอนเทนเนอร์

หนังสือที่ตีพิมพ์ในปี 1981 ชื่อ  Nailing Jelly to a Treeอธิบายถึงซอฟต์แวร์ว่า "คลุมเครือและยากที่จะยึดเกาะได้แน่นหนา" นั่นเป็นเรื่องจริงในปี 1981 และไม่น้อยกว่าเกือบสี่ทศวรรษที่ผ่านมา ซอฟต์แวร์ไม่ว่าจะเป็นแอปพลิเคชันที่คุณซื้อหรือที่คุณสร้างขึ้นเองยังคงใช้งานได้ยากจัดการยากและใช้งานยาก

Docker container เป็นวิธีการจับซอฟต์แวร์ คุณสามารถใช้ Docker เพื่อสรุปแอปพลิเคชันในลักษณะที่มีปัญหาในการปรับใช้และรันไทม์ - วิธีการแสดงบนเครือข่ายวิธีจัดการการใช้พื้นที่เก็บข้อมูลและหน่วยความจำและ I / O วิธีควบคุมสิทธิ์การเข้าถึง - ได้รับการจัดการ ภายนอกแอปพลิเคชันเองและในลักษณะที่สอดคล้องกันในแอป "คอนเทนเนอร์" ทั้งหมด คุณสามารถเรียกใช้คอนเทนเนอร์ Docker ของคุณบนโฮสต์ที่เข้ากันได้กับ OS (Linux หรือ Windows) ที่ติดตั้งรันไทม์ Docker

Docker มีประโยชน์อื่น ๆ อีกมากมายนอกเหนือจากการห่อหุ้มการแยกการพกพาและการควบคุมที่สะดวกสบายนี้ คอนเทนเนอร์ Docker มีขนาดเล็ก (เมกะไบต์) พวกเขาเริ่มทันที พวกเขามีกลไกในตัวสำหรับการกำหนดเวอร์ชันและการนำส่วนประกอบกลับมาใช้ใหม่ สามารถแชร์ได้อย่างง่ายดายผ่าน Docker Hub สาธารณะหรือที่เก็บส่วนตัว

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

ก่อนคอนเทนเนอร์ Docker

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

จากนั้นการจำลองเสมือนก็เข้ามา แพลตฟอร์มเวอร์ชวลไลเซชัน (หรือที่เรียกว่า“ ไฮเปอร์ไวเซอร์”) อนุญาตให้เครื่องเสมือนหลายเครื่องแชร์ระบบทางกายภาพเดียวเครื่องเสมือนแต่ละเครื่องเลียนแบบพฤติกรรมของระบบทั้งหมดพร้อมด้วยระบบปฏิบัติการพื้นที่จัดเก็บและ I / O ของตัวเองในลักษณะแยกกัน . ตอนนี้ IT สามารถตอบสนองต่อการเปลี่ยนแปลงความต้องการทางธุรกิจได้อย่างมีประสิทธิภาพมากขึ้นเนื่องจาก VM สามารถโคลนคัดลอกโยกย้ายและหมุนขึ้นหรือลงเพื่อตอบสนองความต้องการหรืออนุรักษ์ทรัพยากร

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

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

ประโยชน์ของ Docker container

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

ประโยชน์ของคอนเทนเนอร์ Docker มีอยู่ในหลายที่ ข้อดีที่สำคัญบางประการของ Docker และ container มีดังนี้

Docker ช่วยให้สามารถใช้ทรัพยากรระบบได้อย่างมีประสิทธิภาพมากขึ้น

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

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

Docker ช่วยให้รอบการส่งมอบซอฟต์แวร์เร็วขึ้น

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

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

Docker ช่วยให้สามารถพกพาแอปพลิเคชันได้

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

นักเทียบท่าส่องสำหรับสถาปัตยกรรมไมโครเซอร์วิส

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

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

ไม่จำเป็นต้องใช้คอนเทนเนอร์ในการติดตั้งไมโครเซอร์วิส แต่เหมาะอย่างยิ่งกับวิธีการไมโครเซอร์วิสและกระบวนการพัฒนาที่คล่องตัวโดยทั่วไป

ปัญหาคอนเทนเนอร์ Docker ไม่สามารถแก้ไขได้

สิ่งแรกที่ควรทราบเกี่ยวกับคอนเทนเนอร์คือคำแนะนำเดียวกับที่ใช้กับเทคโนโลยีซอฟต์แวร์ใด ๆ : นี่ไม่ใช่กระสุนเงิน Docker container ด้วยตัวเองไม่สามารถแก้ทุกปัญหาได้ โดยเฉพาะอย่างยิ่ง:

Docker จะไม่แก้ไขปัญหาด้านความปลอดภัยของคุณ

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

Docker ไม่ได้เปลี่ยนแอปพลิเคชันให้เป็นไมโครเซอร์วิสอย่างน่าอัศจรรย์

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

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

Docker ไม่ได้ใช้แทนเครื่องเสมือน

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

กรณีสำหรับคอนเทนเนอร์ Docker

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