2 คะแนน โดย GN⁺ 2025-03-25 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Quadlet เป็นเครื่องมือที่ช่วยให้สามารถรันคอนเทนเนอร์ Podman เป็นบริการของ systemd ได้ ซึ่งมีประโยชน์สำหรับการสตาร์ทคอนเทนเนอร์อัตโนมัติในเบื้องหลังหลังจากเซิร์ฟเวอร์รีบูต
  • เดิมทีใช้คำสั่ง podman generate systemd แต่ปัจจุบันแนะนำให้ย้ายมาใช้ Quadlet

วิธีเดิม

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

ปัญหา

  • วิธีเดิมมีความซับซ้อนและขาดความยืดหยุ่น
  • เมื่อเทียบกับความสะดวกของ Docker Compose แล้ว ยังต้องทำงานด้วยตนเองหลายอย่าง

Quadlet

  • เมื่อใช้ Quadlet สามารถสร้างไฟล์ .container เพื่อจัดการคอนเทนเนอร์ได้
  • ผ่านส่วน [Container] สามารถตั้งค่าอิมเมจ พอร์ต วอลุ่ม และตัวแปรแวดล้อมได้
  • ในส่วน [Service] สามารถตั้งค่านโยบายการรีสตาร์ทคอนเทนเนอร์ได้
  • ในส่วน [Install] สามารถตั้งค่าให้เริ่มทำงานอัตโนมัติเมื่อบูตได้

จุดที่ดีกว่า

  • สามารถจัดการการตั้งค่าทั้งหมดได้ในไฟล์เดียว และใช้ตัวเลือกทั้งหมดของ systemd ได้
  • การเขียนไฟล์คอนฟิกง่ายกว่าการเขียนสคริปต์
  • สามารถจัดการ dependency ได้ง่าย

Dependency

  • หากคอนเทนเนอร์แอปต้องพึ่งพาคอนเทนเนอร์ฐานข้อมูล สามารถตั้งค่า dependency ได้ในส่วน [Unit] ด้วยตัวเลือก Requires และ After

ไฟล์จะเยอะเกินไปไหม?

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

การอัปเดตอิมเมจ

  • หากใช้ตัวเลือก AutoUpdate=registry จะสามารถอัปเดตอิมเมจและรีสตาร์ทคอนเทนเนอร์ได้ด้วยคำสั่ง podman auto-update
  • การใช้แท็ก latest อาจมีความเสี่ยง จึงแนะนำให้ใช้แท็กเวอร์ชันที่เฉพาะเจาะจง

เกี่ยวกับ podman-compose

  • podman-compose เป็นสคริปต์ที่แปลงไฟล์ Compose ให้เป็น Podman และ systemd แต่ไม่เหมาะจะใช้เป็นทางเลือกระยะยาว
  • Quadlet สอดคล้องกับการออกแบบแบบไม่มี daemon ของ Podman มากกว่า

ข้อมูลเพิ่มเติม

  • หากต้องการความเข้าใจ Quadlet ให้ลึกขึ้น แนะนำให้อ่านหน้าคู่มือ podman-systemd.unit
  • Quadlet ไม่ได้จัดการแค่คอนเทนเนอร์เท่านั้น แต่ยังจัดการ pod, network และ volume ได้ด้วย
  • หากยังไม่คุ้นเคยกับการเขียนไฟล์ยูนิตของ systemd ควรดูหน้าคู่มือ systemd.unit และ systemd.service เพิ่มเติม
  • podlet เป็นเครื่องมือที่ช่วยสร้างไฟล์ Quadlet จากคำสั่ง Podman หรือไฟล์ Compose ได้

1 ความคิดเห็น

 
GN⁺ 2025-03-25
ความคิดเห็นจาก Hacker News
  • Quadlet เป็นทางเลือกแทน Docker Compose ที่มีประโยชน์สำหรับ "รันคอนเทนเนอร์ที่พึ่งพากันและกันในสภาพแวดล้อมที่คล้าย production" แต่มีประโยชน์น้อยกว่าสำหรับสภาพแวดล้อมการพัฒนา

    • Docker Compose ช่วยจัดการ dependency อย่างฐานข้อมูล, Redis, OpenSearch เป็นต้น ได้อย่างง่ายดาย
    • Quadlet ต้องวางไฟล์ไว้ใน ~/.config/containers/systemd จึงแยกออกจากโปรเจ็กต์ได้ยาก
    • นักพัฒนาจำนวนมากยังคงใช้ Docker และหากจะใช้ Podman ก็ต้องเพิ่มการตั้งค่าด้วยตนเอง
    • จำเป็นต้องมีทางเลือกแทน Docker Compose สำหรับการพัฒนา แต่ Quadlet ไม่เหมาะกับงานนี้
  • หลังจากได้รู้จัก Quadlet ก็ได้สร้างโฮมแล็บโดยอิงกับ Atomic OS และ rootless Quadlet และขอแนะนำอย่างมาก

    • สามารถใช้ systemd socket activation ได้ ทำให้เปิดใช้งาน Traefik อัตโนมัติได้
    • นี่เป็นวิธีเดียวในการคง source IP ไว้ในการตั้งค่าแบบ rootless
  • Quadlet เป็นหนึ่งในเครื่องมือที่ดีที่สุดจากฝั่ง Podman และแนะนำสำหรับผู้ที่สนใจงานแบบคอนเทนเนอร์

    • สะดวกเพราะสามารถจัดการคอนเทนเนอร์เหมือนเป็น system service
    • หากใช้ Quadlet แทน Docker จะได้การตั้งค่าที่สะอาดกว่า
    • ในสภาพแวดล้อมการพัฒนาแบบโลคัล มันไม่ใช่ทางเลือกแทน Docker Compose และทีม Podman เองก็ไม่ได้สนใจเรื่องนี้มากนัก
  • หลายคนยังลังเลที่จะย้ายจาก Docker ไป Podman เพราะความสะดวกของ Docker Compose

    • Quadlet ทำให้สามารถใช้ Podman เป็นทางเลือกแทน Docker Compose ได้
    • จะไม่คิดถึง Docker อีก และยังได้ประโยชน์จากความปลอดภัยของการรันคอนเทนเนอร์แบบ rootless
  • มีการกล่าวถึงว่า Podman-Compose "ไม่ได้รับการดูแลรักษา" แต่ Podlet ก็อยู่ในสภาพคล้ายกัน

    • Podlet ไม่รองรับฟีเจอร์หลายอย่างของ Docker Compose และไม่รองรับการซ้อนหลายไฟล์ yaml
  • ความที่ upstream ของ Podman ไม่มี repository สำหรับ Debian/Ubuntu ทำให้ไม่สะดวก

    • สุดท้ายจึงกลับไปใช้ Docker Compose
  • ได้เริ่มรันคอนเทนเนอร์ Podman ภายใต้ systemd/quadlet โดยใช้ openSUSE MicroOS และตอนนี้พอใจกับการตั้งค่าปัจจุบัน

    • Podman Compose ใช้งานไม่สะดวก และ Quadlet เป็นตัวเลือกที่ดีกว่า
  • ชอบการผสานรวมระหว่าง systemd กับ Podman

    • Docker Compose ยังแข่งขันได้อยู่ และ Quadlet อาจทำให้ไดเรกทอรีโปรเจ็กต์ซับซ้อนขึ้น
  • น่าสนใจที่ Quadlet ขึ้นมาหน้าแรกของ Hacker News

    • ใช้ Kubernetes YAML จึงพกพาได้สูง
  • Quadlet ทำให้สามารถใช้คอนเทนเนอร์เหมือน system service ทั่วไปได้

    • UX ของคอนเทนเนอร์แบบ rootless ไม่ค่อยเข้ากับแนวคิดนี้
    • อยากให้สามารถรัน rootless Quadlet ภายใน system session ได้