

Podman là một container engine mã nguồn mở được sử dụng để tạo, chạy và quản lý container, image cũng như pod. Công cụ này được chú ý nhờ kiến trúc daemonless, khả năng chạy container ở chế độ rootless và giao diện dòng lệnh khá tương đồng với Docker. Vậy Podman là gì, hoạt động như thế nào và có thể thay thế Docker hay không?
Podman (Pod Manager) là một container engine mã nguồn mở cho phép người dùng quản lý pod, container và container image. Podman cung cấp giao diện dòng lệnh CLI với cú pháp gần giống Docker, vì vậy người đã quen sử dụng Docker có thể tiếp cận tương đối nhanh.
Podman hỗ trợ các tác vụ phổ biến như:
Một điểm đáng chú ý là Podman được thiết kế theo mô hình daemonless, nghĩa là không cần một daemon trung tâm luôn chạy để thực hiện phần lớn hoạt động quản lý container.
Bên cạnh đó, Podman hỗ trợ chạy container bằng tài khoản người dùng thông thường thông qua rootless mode. Khi hoạt động ở chế độ này, Podman tự động tạo user namespace cho người dùng để ánh xạ UID và GID giữa container với hệ điều hành host.

Về cơ bản, Podman đảm nhiệm nhiều công việc tương tự các container engine khác.
Developer và quản trị viên hệ thống có thể sử dụng Podman trong quá trình phát triển, kiểm thử và triển khai ứng dụng được đóng gói dưới dạng container.
Một số trường hợp sử dụng phổ biến gồm:
Podman có thể tải một image từ container registry rồi tạo container từ image đó.
Ví dụ:
podman pull nginx
podman run -d nginxContainer giúp đóng gói ứng dụng cùng các thư viện và dependency cần thiết, nhờ đó ứng dụng có thể được triển khai nhất quán giữa nhiều môi trường.
Podman cũng có khả năng xây dựng image từ Containerfile hoặc Dockerfile.
Ví dụ:
podman build -t my-app .Podman sử dụng Buildah trong quá trình tạo container image, đồng thời Podman và Buildah có thể sử dụng chung kho lưu trữ image.
Người dùng có thể kiểm tra container đang chạy bằng:
podman psKiểm tra toàn bộ container:
podman ps -aSau đó có thể start, stop, restart hoặc remove container tùy theo nhu cầu.
Một điểm khá đặc trưng của Podman là hỗ trợ khái niệm pod trực tiếp.
Pod là một nhóm gồm một hoặc nhiều container được tổ chức để hoạt động cùng nhau. Cách tiếp cận này khá quen thuộc đối với những người đang làm việc với Kubernetes.
Ví dụ, một ứng dụng có thể gồm container chạy web server và một container khác thực hiện tác vụ hỗ trợ. Hai container có thể được tổ chức trong cùng một pod để dễ quản lý.
Để sử dụng Podman hiệu quả, người dùng nên hiểu một số khái niệm cơ bản sau.
Container là một môi trường cô lập dùng để chạy ứng dụng cùng các dependency của nó.
So với máy ảo, container không cần mỗi instance phải có một hệ điều hành khách hoàn chỉnh mà có thể chia sẻ kernel của host.
Podman chịu trách nhiệm tạo, khởi động, dừng và quản lý vòng đời của những container này.
Container image là gói chứa các thành phần cần thiết để tạo một container như:
Từ một image, người dùng có thể tạo nhiều container khác nhau.
Pod là một nhóm container được tổ chức để có thể hoạt động cùng nhau. Podman hỗ trợ quản lý pod trực tiếp ngay từ CLI. Đây cũng là nguồn gốc của tên gọi Pod Manager.
Volume được dùng để lưu dữ liệu tách biệt khỏi vòng đời của container. Ví dụ, nếu một container database bị xóa và tạo lại, dữ liệu quan trọng có thể được giữ trong volume thay vì lưu trực tiếp trong filesystem tạm thời của container.
Podman cung cấp các chức năng quản lý network để các container có thể giao tiếp với nhau hoặc truy cập những tài nguyên bên ngoài.
Registry là nơi lưu trữ và phân phối container image.
Podman có thể làm việc với các registry sử dụng image theo chuẩn container phổ biến. Tài liệu Podman minh họa việc tìm kiếm, tải hoặc xuất bản image trên các registry như Docker Hub và Quay.

Đây là một trong những điểm khác biệt dễ nhận thấy nhất giữa Podman và mô hình Docker Engine truyền thống.
Việc không phụ thuộc daemon trung tâm giúp kiến trúc quản lý container của Podman đơn giản theo hướng mỗi câu lệnh có thể trực tiếp xử lý tài nguyên liên quan.
Phần lớn câu lệnh Podman có thể thực thi bằng tài khoản người dùng thông thường mà không cần bổ sung đặc quyền root.
Rootless đặc biệt hữu ích trong những môi trường muốn hạn chế việc cấp quyền cao cho developer hoặc tiến trình container.
Podman làm việc với container và container image theo các chuẩn OCI. Nhờ đó, image được xây dựng hoặc sử dụng trong hệ sinh thái container phổ biến có khả năng tương thích tốt giữa nhiều công cụ khác nhau.
Podman có khả năng làm việc tốt với systemd trên Linux.
Hiện Podman hỗ trợ Quadlet, cho phép khai báo container, pod, volume và network dưới dạng cấu hình systemd để hệ thống quản lý chúng như các service.
Tính năng này phù hợp với những môi trường Linux Server sử dụng systemd để quản lý service.
Podman và Docker đều có thể thực hiện nhiều tác vụ quản lý container tương tự nhau, nhưng kiến trúc và hệ sinh thái của hai nền tảng có một số điểm khác biệt.
Tiêu chí | Podman | Docker |
| Kiến trúc | Daemonless | Chủ yếu dựa trên Docker daemon |
| Rootless | Hỗ trợ trực tiếp | Có hỗ trợ rootless mode |
| Quản lý container | Có | Có |
| Quản lý image | Có | Có |
| Pod | Hỗ trợ trực tiếp | Không phải mô hình quản lý chính |
| OCI | Hỗ trợ | Hỗ trợ |
| CLI | Tương đồng Docker CLI | Docker CLI |
| systemd | Tích hợp tốt, hỗ trợ Quadlet | Có thể tích hợp |
| Hệ sinh thái | Tập trung mạnh vào Linux/container tools | Rộng và phổ biến |
| Docker Desktop | Không | Có |
| Podman Desktop | Có | Không |
Điểm khác biệt lớn nhất vẫn nằm ở kiến trúc.
Docker Engine thông thường sử dụng dockerd làm daemon để quản lý container. Docker CLI gửi yêu cầu đến daemon để thực thi.
Podman lại được thiết kế theo kiến trúc daemonless.
Tuy nhiên, không nên kết luận rằng Podman luôn an toàn hơn Docker chỉ vì không có daemon. Mức độ bảo mật thực tế còn phụ thuộc vào cấu hình host, quyền người dùng, container image, network, secrets, kernel và nhiều thành phần khác.

Podman cũng không phải lựa chọn tối ưu cho mọi trường hợp.
Người mới có thể bắt đầu với các lệnh phổ biến sau.
Kiểm tra phiên bản:
podman --versionTải một image:
podman pull nginxXem các image đã tải:
podman imagesChạy container:
podman run -d nginxXem container đang chạy:
podman psXem toàn bộ container:
podman ps -aDừng container:
podman stop <container-name>Xóa container:
podman rm <container-name>Xóa image:
podman rmi <image-name>
Những câu lệnh này khá giống Docker nên người đã sử dụng Docker thường không mất quá nhiều thời gian để làm quen.
Podman đáng cân nhắc trong các trường hợp:
Ngược lại, Docker có thể phù hợp hơn nếu doanh nghiệp đang sử dụng sâu hệ sinh thái Docker, phụ thuộc nhiều vào Docker Desktop hoặc có hệ thống CI/CD và công cụ nội bộ đã được chuẩn hóa hoàn toàn theo Docker.
Việc lựa chọn nên dựa trên kiến trúc hệ thống, khả năng tương thích và yêu cầu vận hành thay vì chỉ so sánh một vài tính năng riêng lẻ.

Không. Podman và Docker là hai công cụ khác nhau, nhưng đều có thể thực hiện nhiều tác vụ như build image, pull image, chạy và quản lý container.
Podman có thể thay thế Docker trong nhiều workload, đặc biệt trên Linux. Tuy nhiên, các hệ thống phụ thuộc Docker Desktop, Compose hoặc những công cụ tích hợp cụ thể vẫn cần kiểm thử trước khi chuyển đổi.
Có. Podman làm việc với các container image theo chuẩn phổ biến của hệ sinh thái OCI và có thể tải image từ những container registry như Docker Hub.
Không bắt buộc. Podman hỗ trợ rootless mode, cho phép người dùng thông thường chạy nhiều tác vụ container mà không cần quyền root.
Có. Podman có thể build container image từ Dockerfile hoặc Containerfile.
Podman và Kubernetes đều sử dụng khái niệm pod, tuy nhiên Podman không phải là nền tảng orchestration thay thế Kubernetes. Podman tập trung vào việc tạo và quản lý container, image và pod trên hệ thống, trong khi Kubernetes giải quyết bài toán điều phối container ở quy mô lớn.
Podman là container engine mã nguồn mở cho phép xây dựng, chạy và quản lý container, image cũng như pod. Hai đặc điểm nổi bật của Podman là kiến trúc daemonless và khả năng chạy container rootless, đồng thời CLI tương đồng với Docker giúp người dùng dễ tiếp cận.
