‫สวัสดี หรือฉันควรพูดว่า วาฬคัม สู่อนาคตของการจัดการซอฟต์แวร์ด้วย Docker
‫และเครื่องมือคอนเทนเนอร์
‫วิดีโอนี้เกี่ยวกับ Docker โดยเฉพาะ
‫มีเครื่องมือมากมายในช่วงหลายปีที่ผ่านมา แต่วิดีโอนี้เกี่ยวกับสามนวัตกรรมหลักที่เริ่มต้น
‫นักเทียบท่าวิวัฒนาการของซอฟต์แวร์ทั้งหมดในปี 2013 ซึ่งหลักๆ แล้วมีสามสิ่ง
‫อิมเมจ Docker รีจิสตรี Docker นั้น ‫แล้วก็คอนเทนเนอร์ Docker
‫พวกเราส่วนใหญ่เมื่อนึกถึง Docker เรานึกถึงคอนเทนเนอร์
‫แต่นวัตกรรมทั้งสามนี้ไปด้วยกัน เหมือนขนมปังและเนยและพวกเขาเรียกมันว่า
‫Docker build ship run
‫นั่นคือสามขั้นตอน
‫เพื่อนำก่อนหน้านี้ไม่บรรจุ ซอฟต์แวร์, แปลงเป็นอิมเมจ Docker, วางไว้บนรีจิสตรี,
‫รับ ไปยังทุกที่ที่คุณต้องการเรียกใช้
‫แล้วสุดท้ายก็สร้าง ‫ภาชนะจากมัน
‫ในความเป็นจริง CNCF หรือ Cloud Native Computing Foundation ซึ่งมีเครื่องมือมากมายที่เราจะพูดถึง
‫เกี่ยวกับวิดีโอทั้งหมดของฉัน
‫ผลิตภัณฑ์และเครื่องมือเหล่านั้นและ เวิร์กโฟลว์สร้างสมมติฐาน
‫ในกรณีส่วนใหญ่ คุณกำลังใช้ a เวิร์กโฟลว์คอนเทนเนอร์ของ build ship run
‫มาทำลายสิ่งเหล่านี้กันและ ‫ว่าทั้งสามเป็นอย่างไร
‫ขึ้นภาพคอนเทนเนอร์ก่อน
‫และฉันชอบคิดว่ามันเป็นสากล โปรแกรมทำแพ็คเกจ และเรามีตัวจัดการแพ็คเกจมากมายตลอดหลายปีที่ผ่านมา
‫อันที่จริงฉันนับไม่ถ้วน และฉันก็อยู่มาระยะหนึ่งแล้ว ในบรรดาผู้จัดการแพ็คเกจทั้งหมด
‫แต่ก็ไม่เคยมีอะไรที่ ฉันจำได้ นั่นคือข้าม OS ข้ามแพลตฟอร์ม และแอปพลิเคชัน
‫ภาษาไม่เชื่อเรื่องพระเจ้า หมายถึง มันจะวิ่งไปทุกที่ และมันทำงานบนอะไรก็ได้
‫เช่น ตราบใดที่ยังใช้ Linux หรือ Windows
‫ทีนี้มาดูอย่างรวดเร็วของ a Dockerfile ซึ่งเป็นสูตรหรือชุดคำสั่งในการทำคอนเทนเนอร์
‫image, Docker image และ container image เป็นคำเดียวกันสำหรับสิ่งเดียวกัน
‫อันที่จริงแล้ว สเปคของภาพ Docker ได้รับความนิยมอย่างมาก จนปัจจุบันเป็นมาตรฐานที่เรียกว่ามาตรฐานภาพ
‫OCI
‫ดังนั้นคุณจึงเห็นชุดคำสั่งและทุกๆ Dockerfile ต้องการ FROM ในการเริ่มต้น เราสามารถเริ่มจากภาพของคนอื่นได้
‫เราสามารถมีภาพมากมายจากหลาย ๆ คน FROM ดังนั้นเราจะพูดถึงความซับซ้อนในภายหลัง
‫แต่เราจะเริ่มต้นด้วย Python ที่นี่และเราพยายามหาทางลง
‫อันที่จริงเราเริ่มต้นด้วยสิ่งเหล่านี้เป็น เลเยอร์แต่ละคำสั่งเหล่านี้ใน
‫Dockerfile ซึ่งบางครั้งเรียกว่า บทที่มีตัวพิมพ์ใหญ่
‫รวมถึง, จาก, แล้วก็ RUN และทำงานลงเพราะประมวลผลจาก
‫บนลงล่างจะสร้างเลเยอร์
‫ซึ่งถูกย้ายไปรอบ ๆ เซิร์ฟเวอร์ เนื่องจาก tarball และภายในเลเยอร์เหล่านั้นเป็นไฟล์
‫ไดเร็กทอรี และ สิทธิ์ของไฟล์ และในบางครั้ง ข้อมูลเมตาที่เราจะได้รับในภายหลัง
‫เมื่อฉันเริ่มสร้างภาพนี้ มัน จะเริ่มบรรทัดแรกนั้นแล้วไปหาอิมเมจ
‫Python จาก Docker Hub หรือ ไหนๆก็บอกให้เอารูปมา
‫และนั่นรวมถึงแค่ Python ‫ไบนารีและไลบรารีของมัน
‫ไม่มีไดรเวอร์โฮสต์ หรือเคอร์เนลลินุกซ์ หรืออะไรก็ตามที่ไม่ใช่สิ่งที่ไพธอนต้องการรัน
‫หาก Python ต้องการ OpenSSL นั่นคือ ‫รวมอยู่ในเลเยอร์ของภาพนั้น
‫จากนั้นเราก็ไปต่อที่ ‫บรรทัดถัดไปของ Dockerfile
‫นั่นคือคำสั่ง PIP สำหรับ a โปรแกรมติดตั้งการพึ่งพา Python และกำลังติดตั้งขวด
‫นั่นจะเป็นการเริ่มเลเยอร์ใหม่ ที่เพิ่มขวดเหมือนกับที่คุณทำกับคำสั่งติดตั้ง
‫PIP ปกติ
‫ในความเป็นจริงสิ่งที่เกิดขึ้นใน พื้นหลังคือเรากำลังดำเนินการคอนเทนเนอร์ขนาดเล็กอย่างรวดเร็วสำหรับแต่ละสิ่งเหล่านี้
‫เลเยอร์ รันคำสั่งหรือทำสิ่งที่คุณต้องทำภายใน เลเยอร์เหล่านั้นแล้วจัดเก็บไว้เป็นตำแหน่งเฉพาะของตนเอง
‫บนโฮสต์ Linux นั่นคือการสร้างสิ่งนี้
‫เรากำลังซ้อนเลเยอร์ไว้ที่นี่
‫แล้วเราไปต่อกันที่ ‫บรรทัดคำสั่ง COPY
‫WORKDIR มีเพียง a การเปลี่ยนแปลงข้อมูลเมตาก็เพียงแค่เปลี่ยนตำแหน่งในระบบไฟล์
‫ไม่ใช่เรื่องใหญ่.
‫คำสั่ง COPY จะคัดลอกซอร์สโค้ดของเรา จากโฮสต์ที่เรากำลังสร้างในเลเยอร์ของตัวเอง
‫ซ้อนกันบนชั้นอื่นๆ
‫สิ่งเหล่านี้รวมกันเป็นภาพ ‫โดยใช้คำสั่งสร้าง Docker
‫นี่เป็นหนึ่งในสิ่งเหล่านั้นเกี่ยวกับ Docker ที่ใช้งานง่ายมากเพราะเราต้องการแค่
‫Docker build ที่เรียบง่ายนี้เท่านั้น คำสั่งให้นำสิ่งต่าง ๆ ที่ซับซ้อนที่เกิดขึ้นใน Dockerfile
‫แล้วเปิดใช้งาน เป็นภาพเดียวที่เป็นเพียงแอปพลิเคชันของเราและเป็นเพียงการพึ่งพา
‫ที่ต้องการและไม่มีอะไรอื่น
‫นั่นคือส่วนแรก ‫ของการสร้างเรือวิ่ง
‫เป็น Docker build.
‫ต่อไปเรามาพูดถึง Registry กัน
‫รีจิสทรี Docker มีไว้สำหรับ ‫การกระจายแอปพลิเคชัน
‫ทุกระบบบรรจุภัณฑ์ของแอพพลิเคชั่นมี วิธีในการรับแพ็คเกจเหล่านั้นและการลงทะเบียน
‫Docker ก็ไม่ต่างกัน
‫ตอนนี้เรียกกันง่ายๆ ว่า ข้อมูลจำเพาะการแจกจ่าย OCI
‫หรือข้อกำหนดรีจิสทรีของ OCI
‫จึงเป็นมาตรฐานอีกครั้งใน อุตสาหกรรมทั้งหมดสำหรับวิธีการย้ายอิมเมจคอนเทนเนอร์ไปรอบๆ
‫และมีอยู่ทุกที่
‫ทุกคลาวด์มีหนึ่ง
‫Docker Hub เป็นค่าเริ่มต้นและ ‫น่าจะเป็นที่นิยมมากที่สุด
‫GitHub มีหนึ่งรายการ
‫Bitbucket, GitLab พวกเขาทั้งหมด มีรีจิสตรี้อิมเมจเป็นของตัวเอง และคุณสามารถรันไดเร็กทอรีของคุณเองได้
‫น่าจะมีไม่ต่ำกว่าสิบตัว โครงการโอเพ่นซอร์สฟรีและซอฟต์แวร์แบบชำระเงินที่ให้คุณ
‫เก็บอิมเมจ Docker ของคุณไว้
‫มาดูรายละเอียดวิธีการทำงานกัน
‫อันดับแรก.
‫เรามีภาพลักษณ์ที่เราเพิ่งสร้างขึ้น และรูปภาพนั้นมีแฮช SHA ที่ไม่ซ้ำกันซึ่งระบุเลเยอร์เหล่านั้นทั้งหมด
‫กันในแบบที่เราสามารถรับประกันได้ว่าถ้าเราดูแฮชสองอย่าง ระบบต่างๆ
‫เราจึงมั่นใจได้ว่าเป็นไฟล์เดียวกัน ข้อมูลเมตาเดียวกันกับที่เราเพิ่งสร้างขึ้น
‫เลเยอร์ภาพเหล่านั้นไปด้วยกัน ‫และแจกจ่ายตัวเอง
‫เราสามารถใช้บางอย่างเช่น Docker ดันเพื่อนำเลเยอร์รูปภาพเหล่านั้นและดันขึ้นไปยังรีจิสตรี
‫คุณสามารถใช้หนึ่งในหลาย ๆ รีจิสตรีเช่น บอกแล้ว แต่พอมีแล้ว
‫ไปเครื่องอื่นแล้วทำ Docker pull ซึ่งจะดึงสำเนาที่เหมือนกันของรูปภาพนั้นลงบนเครื่องนั้น
‫เหมือนที่เราได้สร้างไว้ ‫ในเครื่องแรก
‫และนี่คือหนึ่งในหลักการสำคัญ ของ Docker คือเราสามารถเอาซอฟต์แวร์ที่เราสร้างมาไว้ในเครื่องเดียวได้
‫ด้วยการพึ่งพาทั้งหมดและเรียกใช้ด้วยวิธีเดียวกันบนระบบอื่น ที่อาจเป็นการกระจาย
‫Linux หรือ Windows ที่แตกต่างกันโดยสิ้นเชิง
‫หากคุณใช้ Linux และคุณสร้าง a อิมเมจ Linux ซึ่งต้องทำงานบน Linux เนื่องจากใช้งานไบนารีของ
‫Linux ถ้า คุณสร้างมันขึ้นมาบน CentOS และคุณรันมันบน Ubuntu มันจะเป็นอย่างนั้นจริงๆ
‫แอปพลิเคชันและการอ้างอิงเดียวกัน โดยไม่คำนึงถึงการกระจายนั้น
‫ในที่สุด เราก็มาถึง Docker ‫คอนเทนเนอร์เอง เมื่อเราทำตามขั้นตอนทั้งหมดในการสร้าง
‫.แล้ว ภาพ วางไว้ในตำแหน่งที่เราสามารถเข้าถึงได้จากเซิร์ฟเวอร์ของเราและ
‫แล้วดาวน์โหลดลงในเซิร์ฟเวอร์ของเรา
‫เราสามารถเรียกใช้ได้
‫ลองนึกภาพว่าเรามี ‫เซิร์ฟเวอร์ที่ใช้ Linux
‫อาจใช้ Windows แต่ใน ‫ในกรณีนี้ เราจะเน้นที่ลินุกซ์เท่านั้น
‫มันจะมี Docker ‫ทำงานในพื้นหลัง
‫ที่รู้จักกันในชื่อ Docker Engine และ เครื่องยนต์ในเครื่องเดียวนี้จะประสานหรือจัดการความแตกต่างทั้งหมด
‫สิ่งที่ต้องเกิดขึ้นเพื่อดาวน์โหลดภาพ ให้ตรวจสอบว่าเป็น สิ่งที่ตั้งใจจะดาวน์โหลดแล้วเรียกใช้ในที่สุด
‫แล้วเราก็ได้ภาพมา เราก็แค่ ดาวน์โหลดด้วย Docker pull จากนั้นเราจะเรียกใช้คำสั่ง
‫ไม่สำคัญเท่า คุณเรียนรู้คำสั่ง แต่มันเป็นคำสั่งเรียกใช้
‫Docker
‫นี่คือส่วนการวิ่งของ build ship run
‫และในกรณีนี้เรากำลังดำเนินการอยู่ ‫แอป Python ในคอนเทนเนอร์ของตัวเอง
‫คอนเทนเนอร์นั้นเรียกว่าเนมสเปซ
‫นั่นคือคุณสมบัติของลินุกซ์ที่ ป้องกันไม่ให้แอปพลิเคชันที่ทำงานในคอนเทนเนอร์นี้มองเห็น
‫ระบบปฏิบัติการที่เหลือ
‫มันได้รับระบบไฟล์เปล่าของตัวเอง และจะรวมเฉพาะไฟล์ที่อยู่ในภาพที่เราเพิ่งสร้างขึ้น
‫จะได้รับที่อยู่ IP ของตัวเองและของตัวเอง ‫NIC เสมือนและรายการกระบวนการของตัวเอง
‫และโดยทั่วไปดูเหมือนว่า ‫ระบบของตัวเองภายในนั้น
‫จากนั้น ถ้าเราเรียกใช้ Docker นั้น ให้เรียกใช้ คำสั่งอีกครั้งด้วยชื่อรูปภาพหรือแฮชของรูปภาพ
‫จากนั้นเราจะได้ค่าที่เหมือนกัน คอนเทนเนอร์วิ่งเคียงข้างกัน
‫ตอนนี้ทั้งสองกระบวนการคือ ‫แยกออกจากกัน
‫ดังนั้นแอป Python ในคอนเทนเนอร์จึงไม่สามารถทำได้ ‫ดูแอป Python ในคอนเทนเนอร์ที่สอง
‫และถ้าคุณเปลี่ยนไฟล์ใน คอนเทนเนอร์ที่สอง คอนเทนเนอร์หนึ่งจะไม่เห็นไฟล์นั้นโดยค่าเริ่มต้น
‫ถ้าเราเพิ่มเซิร์ฟเวอร์ที่สองด้วย a อินสแตนซ์ที่สองของ Docker Engine ที่ทำงานและทำสิ่งเดียวกัน
‫เรา อาจมีการตั้งค่าที่พร้อมใช้งานสูงโดยแอปพลิเคชันของเราทำงานหลายครั้ง เพื่อความซ้ำซ้อนหรือประสิทธิภาพที่ดีขึ้นหรือเหตุผลของเราอาจเป็น สำหรับการทำงานมากกว่าหนึ่งของพวกเขา
‫พวกเขาจะเหมือนกันจาก มุมมองของระบบไฟล์
‫การอนุญาต และข้อมูลเมตา
‫ตอนนี้ยังมีอีกมากที่เราทำได้ เรียนรู้เกี่ยวกับสิ่งนี้ซึ่งเป็นสาเหตุที่หลักสูตรที่ฉันมีตอนนี้นานมาก
‫แต่นี่ยังเป็นสาม สิ่งต่าง ๆ ที่ยังไม่เปลี่ยนแปลงหลังจาก Docker กำหนดแนวความคิดไว้เป็นครั้งแรก
‫แนวคิดในการสร้างเรือเดินสมุทรคือ หนึ่งในหลักการสำคัญของคอนเทนเนอร์
‫และ Kubernetes, Helm
‫คุณตั้งชื่อโปรเจ็กต์ในคลาวด์เนทีฟ ระบบนิเวศ และอาจถือว่าคุณมีเวิร์กโฟลว์ประเภทนี้สำหรับ
‫นำแอปของคุณออกจากมือนักพัฒนา เข้าสู่ระบบทดสอบ และ จากนั้นในที่สุดก็เข้าสู่เซิร์ฟเวอร์ที่ใช้งานจริง
‫มันเหมือนกันสามขั้นตอน
‫หวังว่ามันจะเริ่ม จมลงในเพียงเล็กน้อยที่คุณได้รับว่าทำไมถึงเป็นกุญแจสามดอกนี้
‫ส่วนประกอบ แม้กระทั่งทุกวันนี้ หลายปีหลังจากทั้งหมดนี้ถูกประดิษฐ์ขึ้น
‫มาดูกันว่าจะเป็นอย่างไรต่อไป