คู่มือคอนเทนเนอร์ Linux: ข้อมูลเบื้องต้นเกี่ยวกับคอนเทนเนอร์

คอนเทนเนอร์เป็นคำศัพท์ที่ได้รับความนิยมมานานหลายปี... แต่พวกเขาคืออะไรกันแน่?

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

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

คอนเทนเนอร์เป็นเครื่องเสมือนหรือไม่

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

ไฮเปอร์ไวเซอร์มักจะทำงานเป็นระบบปฏิบัติการของตัวเอง (เรียกว่าไฮเปอร์ไวเซอร์ประเภท 1) หรือภายในขอบเขตของระบบปฏิบัติการอื่น เช่น Windows หรือ Ubuntu (ไฮเปอร์ไวเซอร์ประเภท 2) ความรับผิดชอบของไฮเปอร์ไวเซอร์คือการนำเสนอระบบปฏิบัติการของแขกด้วยฮาร์ดแวร์จำลองที่จำเป็นในการรัน ระบบปฏิบัติการเต็มรูปแบบสามารถทำงานบนสุดได้ ซึ่งรวมถึงทุกอย่างตั้งแต่ CPU และ RAM จำลองไปจนถึงบัสข้อมูล ดิสก์ไดรฟ์ หรืออะแดปเตอร์เครือข่าย การจำลองนี้มีราคาแพงในการคำนวณ ดังนั้นเครื่องเสมือนจึงมักมีค่าใช้จ่ายจำนวนมาก

แล้วภาชนะคืออะไร?

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

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

การใช้คอนเทนเนอร์มีข้อดีอะไรบ้าง

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

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

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

การติดตั้งนักเทียบท่า

นั่นเป็นทฤษฎีมากมาย ดังนั้นเรามาลงมือปฏิบัติกันดีกว่า เพื่อแสดงวิธีตั้งค่าคอนเทนเนอร์ เราจะติดตั้ง Docker ใน Ubuntu 23.10 และใช้เพื่อเรียกใช้คอนเทนเนอร์ Hello World แบบง่ายๆ ขั้นตอนของเราได้รับการทดสอบบนเครื่องเสมือน แต่คุณสามารถบูตดูอัลบูทจากพีซี Windows ของคุณหรือใช้ แล็ปท็อปที่ยอดเยี่ยมสำหรับ Linux.

นักเทียบท่าได้กลายเป็นเครื่องมือในการจัดเก็บคอนเทนเนอร์อย่างรวดเร็ว แม้ว่าจะมีเครื่องมืออื่นๆ อยู่ แต่ Docker ก็ได้รับการยอมรับอย่างกว้างขวางและเหมาะสำหรับทุกแอปพลิเคชันยกเว้นแอปพลิเคชันที่มีความต้องการมากที่สุด มี เอกสารเกี่ยวกับวิธีการต่างๆ ในการติดตั้ง Dockerแต่เราจะใช้สคริปต์การติดตั้งแบบสะดวก คำสั่งนี้จะดาวน์โหลดสคริปต์จาก get.docker.com ไปยังเครื่องของคุณ:

$ curl -fsSL https://get.docker.com -o get-docker.sh

จากนั้นคุณสามารถเรียกใช้สคริปต์นี้เพื่อติดตั้ง Docker คุณสามารถตรวจสอบว่าติดตั้ง Docker อย่างถูกต้องโดยตรวจสอบเวอร์ชันด้วย:

$ sudo sh ./get-docker.sh

ตามด้วยการตรวจสอบเวอร์ชันด้วย:

$ sudo docker version

คุณสามารถตรวจสอบได้ว่าบริการนักเทียบท่าทำงานในพื้นหลังด้วย:

$ sudo systemctl status docker

ควรระบุว่า "ใช้งานอยู่ (กำลังทำงาน)" เป็นข้อความสีเขียว ตามที่ไฮไลต์ไว้ในภาพหน้าจอด้านล่าง ควรพิมพ์เวอร์ชันของกลไก Docker โดยไม่มีข้อผิดพลาด

เรียกใช้ตัวอย่างง่ายๆ

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

$ sudo docker pull hello-world

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

$ sudo docker images

ตอนนี้คุณจะเห็นการดาวน์โหลด Hello-World แล้ว โปรดสังเกตขนาดที่เล็กมาก (13Kb ในเครื่องทดสอบของเรา) รวมถึงแท็กด้วย แท็กของรูปภาพเป็นเวอร์ชันที่มีประสิทธิภาพ ตามค่าเริ่มต้น Docker จะดาวน์โหลดรูปภาพเวอร์ชันล่าสุด เรียกใช้คอนเทนเนอร์ตามอิมเมจนี้โดยใช้:

$ sudo docker run hello-world: latest

สิ่งนี้จะแสดงผลการเล่นสวัสดีชาวโลกของ Dockers ซึ่งทำงานจากโปรแกรม C ขนาดเล็กมาก (ซึ่งคุณสามารถตรวจสอบได้ GitHub).

ยินดีด้วย; คุณใช้งานคอนเทนเนอร์แรกแล้ว! ในกรณีนี้ โปรแกรมได้เอาท์พุตผลลัพธ์และเสร็จสิ้นการดำเนินการแล้ว ขณะนี้คอนเทนเนอร์ใช้งานไม่ได้และไม่ทำงานอีกต่อไป

วิธีเก็บภาชนะให้คงอยู่

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

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

$ sudo docker pull nginx

เราได้เพิ่ม -พี ตั้งค่าสถานะที่นี่เพื่อกำหนดค่าการส่งต่อพอร์ตจากคอนเทนเนอร์ไปยังระบบปฏิบัติการโฮสต์ พอร์ต 80 ใช้สำหรับการรับส่งข้อมูล HTTP (เช่น เว็บ) ที่ไม่ได้เข้ารหัส สิ่งนี้จะช่วยให้คุณเข้าถึงคอนเทนเนอร์จากเครื่องโฮสต์ของคุณได้:

$ sudo docker run -p 80:80 nginx

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

ขณะนี้คอนเทนเนอร์ Nginx กำลังทำงานอยู่ภายในเอ็นจิ้นคอนเทนเนอร์ของคุณ ในขณะที่ Nginx ทำงานในโหมดเชื่อมต่อ มันจะทำงานต่อไปตราบใดที่ยังเปิดอยู่ คุณสามารถออกจากคอนเทนเนอร์ Nginx ได้โดยกด Ctrl + C ในเทอร์มินัลของคุณ

วิธีรันคอนเทนเนอร์ในเบื้องหลัง

หากต้องการเรียกใช้ Nginx ในเบื้องหลัง เราจะเพิ่มแฟล็กอื่น -d, สำหรับโหมดแยก การดำเนินการนี้จะเริ่มต้นคอนเทนเนอร์ที่แยกออกจากเทอร์มินัลของคุณ ซึ่งหมายความว่าคอนเทนเนอร์นั้นอยู่ในพื้นหลัง ตัวอย่างเช่น:

$ sudo docker run -d -p 80:80 nginx

คุณสามารถแสดงรายการคอนเทนเนอร์ที่ทำงานอยู่บนระบบได้ สังเกตว่าคอนเทนเนอร์ Nginx ของคุณทำงานอย่างไรในพื้นหลังและได้รับการกำหนด ID แล้ว

$ sudo docker ps

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

$ sudo docker kill 

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

ดำน้ำลึกด้วยคอนเทนเนอร์

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