Người dùng Podman tìm ra cách khắc phục để hỗ trợ BuildKit, nhưng cộng đồng khuyến khích Quadlets như một giải pháp thay thế tốt hơn

Nhóm Cộng đồng BigGo
Người dùng Podman tìm ra cách khắc phục để hỗ trợ BuildKit, nhưng cộng đồng khuyến khích Quadlets như một giải pháp thay thế tốt hơn

Một bước đột phá gần đây trong công nghệ container đã cho thấy cách kích hoạt hỗ trợ BuildKit trong Podman thông qua Docker Compose CLI, nhưng phản ứng của cộng đồng cho thấy một sự chuyển dịch sâu sắc hơn hướng tới các giải pháp Podman gốc. Trong khi các nhà phát triển đã gặp khó khăn với khả năng tương thích Docker Compose hạn chế của Podman, các cách khắc phục mới và phương pháp thay thế đang định hình lại cách triển khai các ứng dụng được đóng gói trong container.

Thách thức ban đầu xuất phát từ việc cả hai tùy chọn Docker Compose của Podman đều có những hạn chế đáng kể. Docker Compose CLI chính thức thiếu hỗ trợ BuildKit khi kết nối với Podman, thiếu các tính năng như ngữ cảnh bổ sung. Trong khi đó, podman-compose, mặc dù hỗ trợ BuildKit, lại thiếu các tính năng thiết yếu khác bao gồm reset, configs và tham chiếu service trong các ngữ cảnh bổ sung.

Tùy chọn tương thích Podman Docker Compose:

Phương pháp Hỗ trợ BuildKit Tính năng thiếu Độ phức tạp
Official Docker Compose CLI Không Ngữ cảnh bổ sung Thấp
podman-compose Reset, configs, tham chiếu dịch vụ Trung bình
Direct CLI + BuildKit Không có (với các giải pháp thay thế) Cao
Quadlets (Native) N/A Tính năng đặc thù của Docker Compose Trung bình

Bước đột phá tích hợp BuildKit

Một phương pháp mới cho phép Docker Compose CLI hoạt động với Podman sử dụng BuildKit bằng cách bỏ qua hoàn toàn wrapper podman-compose. Điều này bao gồm việc tạo một ngữ cảnh Docker trực tiếp trỏ đến socket Podman và kích hoạt BuildKit thông qua các dịch vụ systemd. Phương pháp này thành công trong việc kích hoạt các tính năng build nâng cao mà trước đây không có sẵn trong môi trường Podman.

Tuy nhiên, giải pháp này tạo ra sự phức tạp bằng cách yêu cầu một daemon BuildKit, điều này mâu thuẫn với triết lý không daemon của Podman. Để giải quyết vấn đề này, các nhà phát triển đã tạo ra các công cụ như Bakah để chuyển đổi các dự án Docker Compose thành mô tả build JSON, cho phép build mà không cần daemon liên tục.

Lệnh Thiết Lập cho Tích Hợp BuildKit:

## Cài đặt các gói cần thiết (Arch Linux)
pacman -S docker-compose docker-buildx buildkit

## Khởi động Podman socket
systemctl --user start podman.socket

## Tạo Docker context cho Podman
docker context create podman --docker host=unix://$XDG_RUNTIME_DIR/podman/podman.sock
docker context use podman

## Tùy chọn: Sử dụng dịch vụ BuildKit hệ thống
systemctl --user start buildkit.service
docker buildx create --name local unix://$XDG_RUNTIME_DIR/buildkit/rootless
docker buildx use local

Cộng đồng ủng hộ Quadlets

Bất chấp những thành tựu kỹ thuật này, cộng đồng ủng hộ mạnh mẽ hệ thống Quadlet gốc của Podman hơn là các lớp tương thích Docker Compose. Quadlets cung cấp tích hợp systemd cho quản lý container, mang lại một phương pháp gốc của nền tảng hơn là cố gắng sao chép các quy trình làm việc của Docker.

Podman compose là một nỗ lực để thu hút người dùng Docker bằng cách chuyển đổi một ý tưởng tồi. Thay vì vậy, hãy học cách tạo 'quadlets' và bạn sẽ không bao giờ muốn chạm vào docker nữa.

Nhiều thành viên cộng đồng báo cáo trải nghiệm vượt trội với Quadlets so với các lựa chọn thay thế Docker Compose. Tích hợp systemd cho phép các container được quản lý như bất kỳ dịch vụ hệ thống nào khác, cung cấp độ tin cậy tốt hơn và bảo trì dễ dàng hơn cho các triển khai sản xuất.

Các vấn đề tương thích dai dẳng

Cuộc thảo luận tiết lộ những thất vọng liên tục với khả năng tương thích Docker Compose của Podman. Các bản sửa lỗi gần đây đã giải quyết các vấn đề quan trọng như xử lý phụ thuộc không đúng cách trong việc tắt dịch vụ và thiếu hỗ trợ cho các build dựa trên URL. Những vấn đề này, một số tồn tại trong nhiều năm trước khi được giải quyết, làm nổi bật những thách thức trong việc duy trì tương thích giữa các hệ sinh thái container khác nhau.

Người dùng báo cáo rằng trong khi Podman cung cấp hỗ trợ container rootless xuất sắc so với thiết lập rootless thủ công hơn của Docker, đường cong học tập và các vấn đề tương thích có thể là những rào cản đáng kể cho các nhóm chuyển đổi từ quy trình làm việc Docker.

Kết luận

Cộng đồng container dường như bị chia rẽ giữa các giải pháp tương thích thực dụng và việc áp dụng công cụ gốc. Trong khi các cách khắc phục kỹ thuật hiện tại cho phép các tính năng BuildKit nâng cao trong Podman, xu hướng rộng lớn hơn cho thấy rằng việc áp dụng các giải pháp gốc Podman như Quadlets có thể mang lại lợi ích dài hạn tốt hơn so với việc duy trì tương thích Docker Compose. Đối với các tổ chức đang xem xét việc chuyển đổi, sự lựa chọn giữa quy trình làm việc Docker quen thuộc và phương pháp systemd tích hợp của Podman có thể sẽ phụ thuộc vào yêu cầu triển khai cụ thể của họ và sự sẵn sàng áp dụng công cụ mới.

Tham khảo: Using Podman, Compose and BuildKit