แนวทางปฏิบัติที่ดีในการสร้างคอนเทนเนอร์ที่บูตได้
(developers.redhat.com)- Image mode ของ Red Hat Enterprise Linux(RHEL) ช่วยทำให้กระบวนการสร้าง ปรับใช้ และจัดการ RHEL ในรูปแบบคอนเทนเนอร์ที่บูตได้ง่ายขึ้น
- นักพัฒนา ผู้ปฏิบัติการ และผู้ให้บริการโซลูชันสามารถใช้เครื่องมือและเทคนิคแบบคอนเทนเนอร์เนทีฟชุดเดียวกันเพื่อจัดการทั้งแอปพลิเคชันและระบบปฏิบัติการพื้นฐานได้
การสร้างคอนเทนเนอร์ที่บูตได้ vs. คอนเทนเนอร์แอปพลิเคชัน
- เช่นเดียวกับคอนเทนเนอร์แอปพลิเคชันทั่วไป คอนเทนเนอร์ที่บูตได้สามารถสร้างได้ด้วยเทคโนโลยีคอนเทนเนอร์ที่มีอยู่แล้ว เช่น Podman, Docker หรือ buildkit
- อิมเมจสามารถจัดเก็บไว้ในคอนเทนเนอร์รีจิสทรี เช่น Quay.io, Docker Hub, GitHub Container Registry หรือรีจิสทรีคอนเทนเนอร์ภายในองค์กร
- คอนเทนเนอร์ที่บูตได้เป็นวิวัฒนาการตามธรรมชาติของเทคโนโลยีคอนเทนเนอร์ โดยมอบเวิร์กโฟลว์และประสบการณ์ใช้งานแบบคอนเทนเนอร์เนทีฟที่ครอบคลุม ซึ่งรวมถึงทั้งระบบปฏิบัติการทั้งหมดและ Linux kernel
การใช้ Containerfile
- Containerfile(หรือที่เรียกว่า Dockerfile) มีข้อมูลทั้งหมดที่จำเป็นต่อการสร้างคอนเทนเนอร์อิมเมจ ซึ่งรวมถึงเบสอิมเมจ คำสั่งติดตั้งแพ็กเกจซอฟต์แวร์ และการคัดลอกไฟล์จาก Git repository
- เวิร์กโฟลว์และเครื่องมือสำหรับสร้างคอนเทนเนอร์ที่บูตได้นั้นโดยพื้นฐานแล้วเหมือนกับคอนเทนเนอร์แอปพลิเคชัน
- อย่างไรก็ตาม มีแนวทางปฏิบัติที่ดีบางประการที่ควรใช้เมื่อสร้างคอนเทนเนอร์ที่บูตได้
แนวทางปฏิบัติที่ดีสำหรับการ lint
- แนะนำให้รันคำสั่ง
bootc container lintเป็นขั้นตอนสุดท้ายของ Containerfile - คำสั่งนี้จะทำการตรวจสอบหลายอย่างภายในคอนเทนเนอร์อิมเมจ และจะรายงานข้อผิดพลาดหากพบปัญหา
- ตัวอย่างเช่น ตรวจสอบว่ามีเคอร์เนลหลายตัวอยู่ใน
/usr/lib/modulesหรือไม่ ตรวจสอบไวยากรณ์ของไฟล์ใน/usr/lib/bootc/kargs.dและตรวจสอบความเรียบร้อย(hygiene) ของ/etcและ/usr/etc
GitHub Actions และพื้นที่ดิสก์
- เมื่อใช้ GitHub Actions เพื่อสร้างคอนเทนเนอร์ อาจพบปัญหาเกี่ยวกับพื้นที่ดิสก์เนื่องจากขนาดของอิมเมจคอนเทนเนอร์ที่บูตได้
- เพื่อแก้ปัญหานี้ สามารถเพิ่มขั้นตอนลบไดเรกทอรี
/opt/hostedtoolcacheในไฟล์เวิร์กโฟลว์เพื่อเพิ่มพื้นที่ว่างบนดิสก์
ทำความเข้าใจ /var
/varเป็นไดเรกทอรีสำหรับข้อมูลและสถานะภายในเครื่องที่คงอยู่และเปลี่ยนแปลงได้ และแม้ระหว่างการอัปเดต เนื้อหา/varของคอนเทนเนอร์อิมเมจก็จะไม่เปลี่ยนแปลง- ดังนั้น หากแอปพลิเคชันเขียนข้อมูลลงใน
/varควรย้ายไปยังไดเรกทอรีอื่น เช่น/usr/shareเพื่อหลีกเลี่ยงปัญหาการเมานต์แบบอ่านอย่างเดียว
การใช้คำสั่ง useradd
- หากมีการเรียก
useraddในสคริปต์แพ็กเกจ อาจเกิด state drift ได้เมื่อ/etc/passwdถูกแก้ไขภายในเครื่อง - เพื่อหลีกเลี่ยงปัญหานี้ สามารถพิจารณาใช้ตัวเลือก
DynamicUser=yesของsystemdเพื่อสร้างผู้ใช้แบบไดนามิก - อย่างไรก็ตาม ในกรณีที่ซับซ้อน การเปลี่ยนไปใช้
DynamicUser=yesอาจทำได้ยาก และในกรณีนั้นแนะนำให้ใช้systemd-sysusersเพื่อสร้างผู้ใช้
การฝังคอนเทนเนอร์ด้วย Quadlet
- การรันเวิร์กโหลดแบบคอนเทนเนอร์ภายใต้
systemdเป็นวิธีที่เรียบง่ายแต่ทรงพลังสำหรับการปรับใช้ที่เชื่อถือได้ - Podman มีเครื่องมือชื่อ Quadlet สำหรับการทำงานร่วมกับ
systemdซึ่งช่วยให้สามารถจัดการเวิร์กโหลดแบบคอนเทนเนอร์ได้ในเชิงประกาศ - Quadlet ทำงานร่วมกับ image mode ได้อย่างสมบูรณ์ และสามารถใช้อิมเมจที่ผูกกันอย่างมีตรรกะเพื่อนำเข้าอิมเมจคอนเทนเนอร์แอปพลิเคชันล่วงหน้าในช่วงบูตได้
สรุป
- การใช้ image mode ทำให้เกิดการเปลี่ยนกระบวนทัศน์ในการทำงานของโฮสต์ RHEL
- สามารถสร้าง ปรับใช้ และจัดการระบบปฏิบัติการด้วยเครื่องมือแบบ cloud-native และจะต้องดูแล OS แบบ immutable ที่ส่วนใหญ่ของระบบถูกเมานต์เป็นแบบอ่านอย่างเดียว
ยังไม่มีความคิดเห็น