ความก้าวหน้าล่าสุดในเทคโนโลยีคอนเทนเนอร์ได้แสดงให้เห็นวิธีการเปิดใช้งานการรองรับ BuildKit ใน Podman ผ่าน Docker Compose CLI แต่การตอบสนองของชุมชนเผยให้เห็นการเปลี่ยนแปลงที่ลึกซึ้งยิ่งขึ้นไปสู่โซลูชันดั้งเดิมของ Podman ในขณะที่นักพัฒนาต้องต่อสู้กับความเข้ากันได้ของ Docker Compose ที่จำกัดใน Podman วิธีแก้ไขใหม่และแนวทางทางเลือกกำลังเปลี่ยนรูปแบบการปรับใช้แอปพลิเคชันคอนเทนเนอร์
ความท้าทายเดิมเกิดจากตัวเลือก Docker Compose สองแบบของ Podman ที่มีข้อจำกัดสำคัญ Docker Compose CLI อย่างเป็นทางการขาดการรองรับ BuildKit เมื่อเชื่อมต่อกับ Podman และขาดฟีเจอร์เช่น additional contexts ในขณะเดียวกัน podman-compose แม้จะรองรับ BuildKit แต่ขาดฟีเจอร์สำคัญอื่นๆ รวมถึง reset, configs และ service referencing ใน additional contexts
ตัวเลือกความเข้ากันได้ของ Podman Docker Compose:
วิธีการ | รองรับ BuildKit | คุณสมบัติที่ขาดหายไป | ความซับซ้อน |
---|---|---|---|
Official Docker Compose CLI | ไม่รองรับ | Additional contexts | ต่ำ |
podman-compose | รองรับ | Reset, configs, service referencing | ปานกลาง |
Direct CLI + BuildKit | รองรับ | ไม่มี (ใช้วิธีแก้ไขปัญหา) | สูง |
Quadlets (Native) | ไม่เกี่ยวข้อง | คุณสมบัติเฉพาะของ Docker Compose | ปานกลาง |
ความก้าวหน้าในการรวม BuildKit
วิธีการใหม่ช่วยให้ Docker Compose CLI ทำงานกับ Podman โดยใช้ BuildKit ผ่านการข้าม podman-compose wrapper โดยสิ้นเชิง วิธีนี้เกี่ยวข้องกับการสร้าง Docker context โดยตรงที่ชี้ไปยัง Podman socket และเปิดใช้งาน BuildKit ผ่าน systemd services แนวทางนี้ประสบความสำเร็จในการเปิดใช้งานฟีเจอร์การสร้างขั้นสูงที่ไม่สามารถใช้ได้ใน Podman environments ก่อนหน้านี้
อย่างไรก็ตาม โซลูชันนี้นำความซับซ้อนมาด้วยการต้องการ BuildKit daemon ซึ่งขัดแย้งกับปรัชญาไร้ daemon ของ Podman เพื่อแก้ไขปัญหานี้ นักพัฒนาได้สร้างเครื่องมือเช่น Bakah ที่แปลงโครงการ Docker Compose เป็นคำอธิบายการสร้างแบบ JSON ทำให้สามารถสร้างได้โดยไม่ต้องใช้ daemon ถาวร
คำสั่งการติดตั้งสำหรับการรวม BuildKit:
## ติดตั้งแพ็กเกจที่จำเป็น (Arch Linux)
pacman -S docker-compose docker-buildx buildkit
## เริ่ม Podman socket
systemctl --user start podman.socket
## สร้าง Docker context สำหรับ Podman
docker context create podman --docker host=unix://$XDG_RUNTIME_DIR/podman/podman.sock
docker context use podman
## ทางเลือก: ใช้บริการ BuildKit ของระบบ
systemctl --user start buildkit.service
docker buildx create --name local unix://$XDG_RUNTIME_DIR/buildkit/rootless
docker buildx use local
ชุมชนสนับสนุน Quadlets
แม้จะมีความสำเร็จทางเทคนิคเหล่านี้ ชุมชนยังคงสนับสนุนระบบ Quadlet ดั้งเดิมของ Podman มากกว่าเลเยอร์ความเข้ากันได้ของ Docker Compose Quadlets ให้การรวม systemd สำหรับการจัดการคอนเทนเนอร์ โดยเสนอแนวทางที่เป็นธรรมชาติของแพลตฟอร์มมากกว่าการพยายามจำลอง Docker workflows
Podman compose เป็นความพยายามที่จะดึงดูดผู้ใช้ Docker โดยการนำไอเดียที่ไม่ดีมาใช้ แทนที่จะทำเช่นนั้น ให้เรียนรู้วิธีการสร้าง 'quadlets' แล้วคุณจะไม่อยากแตะต้อง docker อีกเลย
สมาชิกชุมชนหลายคนรายงานประสบการณ์ที่เหนือกว่ากับ Quadlets เมื่อเปรียบเทียบกับทางเลือก Docker Compose การรวม systemd ช่วยให้คอนเทนเนอร์สามารถจัดการได้เหมือนกับ system service อื่นๆ โดยให้ความน่าเชื่อถือที่ดีกว่าและการบำรุงรักษาที่ง่ายกว่าสำหรับการปรับใช้ในการผลิต
ปัญหาความเข้ากันได้ที่ยังคงอยู่
การอภิปรายเผยให้เห็นความผิดหวังที่ยังคงอยู่กับความเข้ากันได้ของ Docker Compose ใน Podman การแก้ไขข้อบกพร่องล่าสุดแก้ไขปัญหาสำคัญเช่นการจัดการ dependency ที่ไม่เหมาะสมในการปิด service และการขาดการรองรับสำหรับการสร้างแบบ URL-based ปัญหาเหล่านี้ซึ่งบางอย่างมีอยู่เป็นปีก่อนที่จะได้รับการแก้ไข เน้นย้ำถึงความท้าทายในการรักษาความเข้ากันได้ระหว่าง container ecosystems ที่แตกต่างกัน
ผู้ใช้รายงานว่าแม้ว่า Podman จะเสนอการรองรับ rootless container ที่ยอดเยี่ยมเมื่อเปรียบเทียบกับการตั้งค่า rootless ที่เป็นแบบแมนนวลมากกว่าของ Docker แต่เส้นโค้งการเรียนรู้และปัญหาความเข้ากันได้อาจเป็นอุปสรรคสำคัญสำหรับทีมที่เปลี่ยนจาก Docker workflows
บทสรุป
ชุมชนคอนเทนเนอร์ดูเหมือนจะแบ่งออกระหว่างโซลูชันความเข้ากันได้เชิงปฏิบัติและการใช้เครื่องมือดั้งเดิม ในขณะที่วิธีแก้ไขทางเทคนิคขณะนี้เปิดใช้งานฟีเจอร์ BuildKit ขั้นสูงใน Podman แนวโน้มที่กว้างขึ้นแสดงให้เห็นว่าการยอมรับโซลูชันดั้งเดิมของ Podman เช่น Quadlets อาจให้ประโยชน์ระยะยาวที่ดีกว่าการรักษาความเข้ากันได้ของ Docker Compose สำหรับองค์กรที่พิจารณาการเปลี่ยนแปลง การเลือกระหว่าง Docker workflows ที่คุ้นเคยและแนวทางรวม systemd ของ Podman น่าจะขึ้นอยู่กับความต้องการการปรับใช้เฉพาะของพวกเขาและความเต็มใจที่จะใช้เครื่องมือใหม่
อ้างอิง: Using Podman, Compose and BuildKit