Podman: Tổng quan chi tiết, ưu điểm, nhược điểm và cách cài đặt

0 0 0

Người đăng: Thái Thịnh

Theo Viblo Asia

Podman là một công cụ mã nguồn mở dùng để tạo, quản lý và chạy các container và pod theo chuẩn OCI trên các hệ điều hành Linux, macOS và Windows. Khác với Docker, Podman hoạt động không cần daemon (trình nền), chạy container trực tiếp dưới quyền người dùng, mang lại nhiều lợi ích về bảo mật và tính linh hoạt.

Ưu điểm của Podman

1. Hoạt động không cần Daemon

Podman không cần một dịch vụ nền trung tâm. Mỗi container chạy như một tiến trình con của người dùng, giúp giảm tài nguyên sử dụng và cải thiện bảo mật bằng cách loại bỏ điểm lỗi tập trung.

2. Hỗ trợ chạy không cần quyền Root

Podman cho phép chạy container mà không cần đặc quyền root. Điều này giảm đáng kể nguy cơ leo thang đặc quyền và rất phù hợp cho hệ thống đa người dùng hoặc môi trường có yêu cầu bảo mật cao.

3. Tương thích với Docker

Giao diện dòng lệnh (CLI) của Podman phần lớn tương thích với Docker, cho phép sử dụng hầu hết các lệnh và quy trình làm việc từ Docker mà không cần sửa đổi. Podman có thể build và chạy container từ Dockerfile và làm việc với image của Docker.

4. Hỗ trợ Pod và tích hợp Kubernetes

Podman hỗ trợ native cho pod — nhóm container chia sẻ tài nguyên, tương tự như trong Kubernetes. Điều này giúp dễ dàng chuyển khối lượng công việc sang môi trường Kubernetes.

5. Tích hợp với Systemd

Podman có thể tạo các file unit systemd cho container và pod, giúp dễ dàng quản lý vòng đời container và đảm bảo container khởi động cùng hệ thống.

6. Hiệu năng

Do không có daemon trung tâm, Podman tiêu tốn ít tài nguyên hơn và khởi động container nhanh hơn, đặc biệt hữu ích trong môi trường có nhiều container hoặc tài nguyên hạn chế.

Nhược điểm của Podman

1. Đường cong học tập

Podman giới thiệu các khái niệm như chế độ không root, cấu hình lưu trữ và mạng tùy chỉnh, có thể yêu cầu người dùng (đặc biệt là từ Docker) phải học thêm.

2. Hệ sinh thái nhỏ hơn

So với Docker, hệ sinh thái và các công cụ tích hợp của Podman còn hạn chế, gây khó khăn khi tìm giải pháp hoặc tích hợp với công cụ khác.

3. Hạn chế về mạng

Một số tính năng mạng nâng cao còn chưa hoàn thiện hoặc cần cấu hình thủ công, đặc biệt trong các tình huống phức tạp như định tuyến hoặc cân bằng tải.

4. Tính trưởng thành của tính năng

Các tính năng như orchestration (điều phối) và high availability (khả năng sẵn sàng cao) còn đang được hoàn thiện và có thể cần công cụ bổ sung hoặc cấu hình thủ công.

Cài đặt và thiết lập Podman

1. Trên Linux

Debian/Ubuntu:

sudo apt update && sudo apt upgrade -y
sudo apt install -y podman
podman --version

CentOS/RHEL:

sudo yum -y install podman
podman --version

2. Trên macOS

Dùng Homebrew:

brew install podman
podman machine init
podman machine start
podman info

Hoặc bạn có thể tải về từ trang chính thức của Podman hoặc sử dụng Podman Desktop nếu muốn trải nghiệm GUI. Vì container trên macOS chạy trong máy ảo nhẹ, bạn cần khởi tạo và khởi động máy Podman sau khi cài đặt.

Podman Desktop (giao diện GUI):

  • Tải file .dmg từ trang web chính thức Podman Desktop.
  • Kéo biểu tượng Podman Desktop vào thư mục Applications.
  • Mở Podman Desktop và làm theo hướng dẫn để cài Podman Engine nếu cần.

3. Trên Windows

  • Tải trình cài đặt từ trang chính thức hoặc GitHub của Podman.
  • Chạy trình cài và làm theo hướng dẫn.
  • Podman sử dụng WSL2 (Windows Subsystem for Linux v2) để chạy container.

Sau khi cài đặt, khởi tạo và khởi động Podman bằng:

 podman machine init podman machine start podman info

Bạn có thể sử dụng Podman từ PowerShell, CMD hoặc trong môi trường WSL.

Cấu hình cơ bản Podman

Podman có thể được tùy chỉnh thông qua các file cấu hình và biến môi trường.

Các file cấu hình chính:

  • containers.conf: Thiết lập mặc định toàn hệ thống (runtime, mạng, giới hạn tài nguyên).
  • storage.conf: Cấu hình driver và tuỳ chọn lưu trữ.
  • registries.conf: Danh sách registry container dùng để pull/push image.
  • policy.json: Chính sách xác minh chữ ký image.

Biến môi trường thường dùng:

  • CONTAINERS_CONF: Đường dẫn tới containers.conf
  • CONTAINERS_REGISTRIES_CONF: Đường dẫn tới registries.conf
  • CONTAINERS_STORAGE_CONF: Đường dẫn tới storage.conf
  • CONTAINER_HOST: URL dịch vụ Podman từ xa (ví dụ: unix:///run/user/$UID/podman/podman.sock)
  • TMPDIR: Thư mục lưu tạm image
  • XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_RUNTIME_DIR: Kiểm soát nơi lưu cấu hình, image và dữ liệu runtime (rất quan trọng ở chế độ không root)

Ví dụ: Tạo và quản lý Pod

Tạo một pod trống:

podman pod create --name demo-pod

Liệt kê các pod:

podman pod ls

Liệt kê container trong pod:

podman ps -a --pod

Thêm container vào pod:

podman run -dt --pod demo-pod nginx

Bảng so sánh Podman và Docker

image.png

Kết luận

Podman là một lựa chọn mạnh mẽ thay thế cho Docker, với ưu điểm về bảo mật, hỗ trợ không cần root, và khả năng tích hợp pod/Kubernetes native. Mặc dù hệ sinh thái của Podman còn đang phát triển và một số tính năng nâng cao chưa hoàn thiện, nó vẫn là công cụ phù hợp cho lập trình viên và quản trị viên cần một công cụ container hiện đại, linh hoạt và an toàn. Việc cài đặt đơn giản trên tất cả nền tảng lớn, có cả CLI và GUI. Cấu hình dễ tùy biến giúp Podman phù hợp với nhiều trường hợp sử dụng khác nhau.

Bình luận

Bài viết tương tự

Hướng dẫn finetune mô hình LLM đơn giản và miễn phí với Unsloth

Chào mừng các bạn đến với bài viết hướng dẫn chi tiết cách finetune (tinh chỉnh) một mô hình ngôn ngữ lớn (LLM) một cách đơn giản và hoàn toàn miễn phí sử dụng thư viện Unsloth. Trong bài viết này, ch

0 0 0

SERIES INDEX NÂNG CAO - BÀI 1: PHÂN TÍCH NHỮNG SAI LẦM PHỔ BIẾN KHI SỬ DỤNG INDEX TRONG MYSQL

Nếu anh em thấy hay thì ủng hộ tôi 1 follow + 1 upvote + 1 bookmark + 1 comment cho bài viết này tại Mayfest 2025 nhé. Còn nếu bài viết chưa hữu ích thì tôi cũng hi vọng anh em để lại những góp ý thẳn

0 0 0

"Hack" Não Số Lớn Với Digit DP!

Xin chào anh em, những chiến binh thuật toán kiên cường. Phản ứng đầu tiên của nhiều anh em (có cả tôi): "Ối dào, dễ! Quất cái for từ 1 đến 101810^{18}1018 rồi check thôi!".

0 0 0

So Sánh StatelessWidget và StatefulWidget & Các Widget Nâng Cao

Chào mọi người! Hôm nay chúng ta sẽ tiếp tục hành trình khám phá Flutter và đến với bài học về StatelessWidget và StatefulWidget. Trong bài này, mình sẽ giúp các bạn phân biệt sự khác nhau giữa hai lo

0 0 0

React Lifecycle & Hooks Cơ Bản

React cung cấp các phương thức lifecycle và hooks để quản lý các giai đoạn khác nhau trong vòng đời của component. Việc hiểu rõ các phương thức này giúp bạn có thể tối ưu hóa ứng dụng React của mình.

0 0 0

Kafka Fundamental - Bài 4: Consumers, Deserialization, Consumer Groups & Consumer Offsets

Xin chào, lại là mình - Đức Phúc, anh chàng hơn 6 năm trong nghề vẫn nghèo technical nhưng thích viết Blog để chia sẻ kiến thức bản thân học được trong quá trình “cơm áo gạo tiền” đây. Các bạn có thể

0 0 0