- 1 1. Giới thiệu
- 2 2. Podman là gì?
- 3 3. Cách cài đặt Podman trên Ubuntu
- 4 4. Tổng quan về Dockerfile và cách dùng với Podman
- 5 5. Thực hành: Tạo container dựa trên Ubuntu
- 6 6. Những tính năng hữu ích và mẹo với Podman
- 7 7. Hướng dẫn chuyển đổi từ Docker sang Podman
- 8 8. Câu hỏi thường gặp (FAQ)
- 8.1 Q1. Sự khác biệt chính giữa Podman và Docker là gì?
- 8.2 Q2. Dockerfile và Containerfile khác gì nhau?
- 8.3 Q3. Có thể dùng Docker Compose với Podman không?
- 8.4 Q4. Podman có hoạt động ổn định trên Ubuntu không?
- 8.5 Q5. Dùng rootless mode có bị hạn chế gì không?
- 8.6 Q6. Podman pull image có giống Docker Hub không?
- 8.7 Q7. Podman dùng cho production được không?
- 9 Liên kết tham khảo
1. Giới thiệu
Sự phát triển của công nghệ container và lý do được quan tâm
Gần đây, công nghệ container ngày càng trở nên quan trọng trong phát triển và vận hành ứng dụng. Đặc biệt, việc đồng nhất môi trường phát triển với môi trường production giúp đảm bảo tính nhất quán khi chạy ứng dụng, điều này nhận được sự ủng hộ lớn từ nhiều kỹ sư.
Trong số đó, Docker là công cụ tiêu biểu, nhưng gần đây Podman đang thu hút sự chú ý như một lựa chọn thay thế. Podman cung cấp CLI (giao diện dòng lệnh) gần như giống hệt Docker, đồng thời nổi bật với tính năng không cần daemon, nhẹ và không cần quyền root (rootless).
Tại sao chọn “Podman + Dockerfile + Ubuntu”?
Bài viết này kết hợp ba yếu tố: Podman, Dockerfile và Ubuntu để giải thích cách vận hành container hiện đại trên môi trường Linux.
- Ubuntu là bản phân phối Linux phổ biến, dễ sử dụng cho cả người mới và chuyên gia,
- Dockerfile như bản thiết kế để xây dựng image container,
- Và Podman là công cụ thế hệ mới giúp quản lý container linh hoạt và bảo mật hơn.
Đặc biệt, cùng với ý thức bảo mật ngày càng cao, việc sử dụng Podman trên Ubuntu với Dockerfile đang được áp dụng rộng rãi trong cả phát triển cá nhân và doanh nghiệp.
Mục đích và đối tượng của bài viết
Mục tiêu của bài viết là hướng dẫn chi tiết từng bước tạo container thực tế bằng cách build Dockerfile với Podman trên Ubuntu.
Đối tượng đọc giả được giả định gồm:
- Người có kinh nghiệm Docker, muốn tìm hiểu về Podman
- Người dùng Ubuntu muốn vận hành container an toàn
- Kỹ sư muốn áp dụng công nghệ container vào công việc
- Người mới muốn thử viết Dockerfile và build bằng Podman
Bài viết sẽ bao gồm hướng dẫn cơ bản, mẹo phòng tránh lỗi, điểm khác biệt với Docker và cách di chuyển từ Docker sang Podman.
2. Podman là gì?
Tổng quan cơ bản về Podman
Podman (Pod Manager) là công cụ quản lý container thế hệ mới do cộng đồng dẫn đầu bởi Red Hat phát triển. Giống như Docker, Podman xây dựng, chạy và quản lý container tuân thủ chuẩn OCI (Open Container Initiative), tuy nhiên thiết kế và kiến trúc có nhiều điểm khác biệt lớn.
Điểm nổi bật nhất là Podman không cần daemon. Nhờ đó, bạn có thể vận hành linh hoạt và an toàn hơn. Ngoài ra, Podman hỗ trợ chế độ rootless, cho phép người dùng thông thường vận hành container mà không cần nâng quyền. CLI cũng tương thích cao, phần lớn lệnh giống với Docker.
Những đặc điểm chính của Podman
Một số đặc điểm tiêu biểu của Podman như sau:
Cấu trúc không cần daemon
Podman không có tiến trình daemon chạy nền để quản lý container, giúp tiết kiệm tài nguyên và không chạy các tiến trình không cần thiết.
Hỗ trợ rootless (người dùng không đặc quyền)
Podman cho phép người dùng thông thường khởi động và quản lý container. Điều này phù hợp cho môi trường nhiều người dùng hoặc server, giảm thiểu rủi ro bảo mật đáng kể.
CLI tương thích với Docker
Podman sử dụng hệ lệnh gần giống hệt với Docker. Ví dụ, các lệnh Docker sau có thể sử dụng tương tự trên Podman:
podman build -t myimage .
podman run -it myimage bash
Do đó, người đã quen Docker sẽ chuyển sang Podman mà không gặp trở ngại.
Tính năng pod (Pod)
Podman áp dụng khái niệm “Pod” của Kubernetes, cho phép quản lý nhiều container như một đơn vị logic duy nhất. Nhờ đó, tương thích tốt với Kubernetes, dễ dàng chuyển đổi môi trường phát triển sang cloud.
Tương thích với Ubuntu
Podman chủ yếu được sử dụng trên Fedora, RHEL, nhưng hoạt động ổn định trên Ubuntu. Bạn có thể cài đặt từ kho chính thức và cấu hình đơn giản. Đặc biệt từ Ubuntu 20.04 LTS trở đi, các gói Podman được hoàn thiện tốt, giúp cài đặt dễ dàng.
3. Cách cài đặt Podman trên Ubuntu
Lưu ý trước khi cài đặt
Khi cài đặt Podman trên Ubuntu, trước tiên hãy kiểm tra phiên bản Ubuntu bạn đang sử dụng. Podman được khuyến nghị chạy trên Ubuntu 20.04 LTS trở lên. Các bản cũ có thể thiếu gói trong kho chính thức.
Dùng lệnh sau để kiểm tra phiên bản Ubuntu:
lsb_release -a
Bạn cần quyền sudo để cài đặt Podman. Ngay cả khi dùng chế độ rootless, bạn vẫn cần quyền quản trị trong quá trình cài đặt, hãy chuẩn bị sẵn tài khoản sudo.
Các bước cài đặt Podman (kho chính thức Ubuntu)
Trên Ubuntu 20.04, 22.04 trở lên, bạn có thể cài đặt Podman dễ dàng bằng APT.
sudo apt update
sudo apt install -y podman
Sau khi cài xong, hãy xác nhận phiên bản để đảm bảo cài đặt thành công:
podman --version
Cài đặt bản mới nhất (thêm PPA chính thức)
Gói Podman trong kho tiêu chuẩn thường không phải bản mới nhất. Nếu muốn dùng tính năng mới, hãy thêm PPA (Personal Package Archive) chính thức như sau:
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman
Với cách này, bạn có thể dùng bản Podman mới nhất tương tự như các hệ Red Hat/Fedora.
Kiểm tra cơ bản sau cài đặt
Sau khi cài đặt, hãy thử chạy lệnh sau để kiểm tra:
podman info
Lệnh này cho biết phiên bản, cấu hình và tính năng hỗ trợ (ví dụ rootless).
Tiếp theo, kiểm tra khả năng chạy container Alpine Linux chính thức:
podman run --rm -it alpine sh
Nếu shell khởi động thành công, nghĩa là Podman đã hoạt động ổn định.
4. Tổng quan về Dockerfile và cách dùng với Podman
Dockerfile là gì?
Dockerfile là bản thiết kế để xây dựng image container. Được viết dưới dạng file text, mô tả image nền, các gói sẽ cài đặt, file cần copy, lệnh cần chạy…
Dựa trên file này, các công cụ container như Podman hoặc Docker sẽ tự động xây dựng môi trường nhất quán.
Một số lệnh tiêu biểu:
FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]
Như vậy, image Ubuntu gốc sẽ được cài thêm curl, copy script vào và đặt script đó làm lệnh thực thi mặc định.
Cách sử dụng Dockerfile với Podman
Với Podman, bạn hoàn toàn có thể build image từ Dockerfile. Cách sử dụng tương tự Docker.
1. Chuẩn bị thư mục làm việc
Chuẩn bị file theo cấu trúc sau:
project/
├── Dockerfile
└── app.sh
app.sh
là script đơn giản như sau:
#!/bin/bash
echo "Hello from Podman container!"
Cấp quyền thực thi cho script:
chmod +x app.sh
2. Build với Podman
Ở thư mục có Dockerfile, chạy:
podman build -t mypodmanapp .
Lệnh này sẽ tạo image tên mypodmanapp
.
3. Kiểm tra kết quả build
Kiểm tra image vừa tạo:
podman images
4. Khởi động container từ image vừa build
Chạy container từ image vừa build:
podman run --rm mypodmanapp
Nếu cấu hình đúng, sẽ xuất hiện: Hello from Podman container!
Sự khác biệt với Containerfile
Podman cho phép dùng file tên Containerfile với cú pháp giống Dockerfile. Đây là xu hướng dùng tên trung lập, không phụ thuộc Docker. Tuy nhiên, cách viết và hoạt động không khác biệt. Bạn có thể dùng Dockerfile
hoặc Containerfile
đều được.
podman build -f Containerfile -t myimage .
Dùng option -f
để chỉ định tên file bất kỳ.
5. Thực hành: Tạo container dựa trên Ubuntu
Tạo Dockerfile dựa trên Ubuntu
Bây giờ, hãy tạo Dockerfile dựa trên Ubuntu và build/run image với Podman từng bước.
Trước tiên, tạo Dockerfile
như sau:
FROM ubuntu:22.04
RUN apt update && apt install -y curl && apt clean
COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh
CMD ["/usr/local/bin/hello.sh"]
Dockerfile này thực hiện:
- Dùng image Ubuntu 22.04 chính thức
- Cài package
curl
- Copy
hello.sh
từ host vào container - Đặt
hello.sh
làm script thực thi mặc định
Tiếp theo, tạo script hello.sh
như sau:
#!/bin/bash
echo "Xin chào từ Podman container!"
Đừng quên cấp quyền thực thi:
chmod +x hello.sh
Các bước build image với Podman
Sau khi đã có file, build bằng lệnh:
podman build -t ubuntu-hello .
-t ubuntu-hello
là gán tên tag cho image, .
là chỉ thư mục chứa Dockerfile.
Nếu thành công, image mới sẽ được lưu local.
podman images
Kiểm tra danh sách image đã build.
Chạy và kiểm tra image vừa build
Để chạy container từ image mới, dùng lệnh:
podman run --rm ubuntu-hello
Kết quả ví dụ:
Xin chào từ Podman container!
Thêm option --rm
để tự động xóa container sau khi chạy, phù hợp để test.
Lưu ý: Khởi động container dạng tương tác
Nếu muốn thao tác bên trong container, có thể dùng option -it
để vào Bash:
podman run -it ubuntu-hello bash
Cách này giúp tạo môi trường phát triển dựa trên Ubuntu nhẹ nhàng.
6. Những tính năng hữu ích và mẹo với Podman
Điểm mạnh của Podman: Linh hoạt & bảo mật
Podman giữ được tính tương thích với Docker, đồng thời bổ sung nhiều tính năng linh hoạt và an toàn hơn. Sau đây là một số tính năng và mẹo hữu ích khi sử dụng.
Chế độ rootless: Vận hành an toàn
Điểm mạnh lớn của Podman là chế độ rootless, cho phép người dùng thông thường khởi động, dừng và quản lý container mà không cần quyền quản trị.
Ví dụ, chạy Podman mà không cần sudo:
podman run -it ubuntu bash
Khi đó, mọi thao tác bị giới hạn trong thư mục home của user, giảm tối đa ảnh hưởng đến hệ thống. Đặc biệt hữu ích trên server chia sẻ hoặc môi trường phát triển.
Tích hợp systemd: Tự động khởi động container
Podman hỗ trợ tích hợp trực tiếp với systemd, giúp container có thể khởi động cùng hệ thống Linux.
Ví dụ, tạo unit file cho container:
podman generate systemd --name mycontainer --files --restart-policy=always
Unit file sẽ được tạo ở ~/.config/systemd/user/
. Sau đó, kích hoạt với lệnh:
systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service
Nhờ vậy, container sẽ tự động khởi động sau khi server reboot.
Quản lý nhiều container với podman-compose
Bên cạnh vận hành một container, Podman còn hỗ trợ quản lý nhiều container cùng lúc với podman-compose, thao tác tương tự Docker Compose.
Cài đặt podman-compose bằng pip:
pip install podman-compose
Vì tương thích tốt với docker-compose.yml
, bạn có thể tái sử dụng dự án sẵn có.
Khởi động project multi-container đơn giản với:
podman-compose up -d
Nhờ đó, bạn vẫn tận dụng được khả năng tái hiện môi trường phát triển nhanh chóng với Podman.
Một số lệnh và mẹo hữu ích khác
Dọn dẹp image và container không dùng tới
podman system prune -a
Lệnh này giúp xóa image, container và file tạm không còn dùng, giải phóng dung lượng.
Thiết lập hoàn thiện tự động lệnh (bash/zsh)
Cài gói sau để có hoàn thiện lệnh giống docker:
sudo apt install podman-docker
Giúp thao tác với podman hiệu quả hơn nhờ tự động hoàn thiện lệnh.
7. Hướng dẫn chuyển đổi từ Docker sang Podman
Vì sao nên chuyển sang Podman?
Docker đã là tiêu chuẩn cho container nhiều năm, nhưng gần đây ngày càng nhiều môi trường chuyển sang Podman vì nhẹ, bảo mật cao. Đặc biệt, RHEL và Fedora đã chuyển mặc định sang Podman thay cho Docker, nên nhu cầu chuyển đổi ngày càng tăng.
Mục này sẽ giải thích cụ thể các bước chuyển đổi từ Docker sang Podman và các điểm cần lưu ý.
Tương thích lệnh giữa Docker và Podman
Podman có độ tương thích lệnh cao với Docker, bạn có thể chuyển đổi lệnh gần như không thay đổi như sau:
Docker | Podman |
---|---|
docker build -t myapp . | podman build -t myapp . |
docker run -it myapp | podman run -it myapp |
docker images | podman images |
docker ps | podman ps |
Nhờ vậy, bạn có thể chuyển đổi mà không cần học lại CLI mới.
podman-docker: Tương thích hoàn toàn với lệnh docker
Nếu dự án hoặc script CI/CD cũ đang dùng lệnh “docker”, bạn có thể cài podman-docker
để tự động chuyển lệnh docker sang podman.
sudo apt install podman-docker
Sau khi cài, lệnh docker
sẽ thực chất gọi podman bên dưới:
which docker
# → /usr/bin/docker → symbolic link tới podman
Nhờ đó, các script Docker cũ vẫn chạy được mà không cần sửa.
podman-compose thay thế docker-compose
Với các dự án dùng nhiều container qua Docker Compose, chỉ cần cài podman-compose
để thực hiện thao tác tương tự.
Tuy tương thích tốt, nhưng một số tính năng hoặc hành vi vẫn khác biệt, lưu ý các điểm sau:
- Một số option như
depends_on
chưa hỗ trợ hoặc khác với Docker - Cách ghi log và kiểm tra tình trạng có thể khác
Nếu dự án không quá phức tạp, bạn có thể chuyển đổi khá dễ dàng.
Chuyển image/volume từ Docker sang Podman
Khi chuyển image từ Docker sang Podman, image local của Docker sẽ không tự nhận bởi Podman. Cần làm như sau để chuyển đổi:
Cách 1: Pull lại image bằng Podman
podman pull ubuntu:22.04
Cách 2: Export từ Docker → Import vào Podman
# Xuất image từ Docker
docker save myimage > myimage.tar
# Import vào Podman
podman load < myimage.tar
Như vậy, bạn có thể dùng image Docker cũ với Podman.
Các điểm cần lưu ý khác
- Khác biệt về rootless: Docker cần quyền root, Podman mặc định hỗ trợ rootless
- Khác biệt về cấu trúc daemon: Podman không dùng daemon nên quản lý tiến trình khác với Docker
- Vị trí lưu log, data cũng khác, cần kiểm tra cấu hình khi chuyển đổi
8. Câu hỏi thường gặp (FAQ)
Q1. Sự khác biệt chính giữa Podman và Docker là gì?
A1. Điểm lớn nhất là Podman không cần daemon (không có tiến trình chạy nền). Nhờ đó, Podman nhẹ và bảo mật hơn. Ngoài ra, Podman hỗ trợ chế độ rootless cho phép user thường quản lý container mà không cần nâng quyền. CLI rất giống Docker.
Q2. Dockerfile và Containerfile khác gì nhau?
A2. Không có khác biệt chức năng nào. Cả hai đều là file mô tả build image container, cú pháp y hệt nhau. Containerfile chỉ là tên trung lập không dính tới Docker, thường được ưu tiên dùng cho các dự án chuẩn OCI, nhưng thực tế dùng Dockerfile cũng không sao.
Q3. Có thể dùng Docker Compose với Podman không?
A3. Không hỗ trợ trực tiếp, nhưng bạn có thể dùng podman-compose
(viết bằng Python) để chạy các file docker-compose.yml
trên môi trường Podman.
Lưu ý một số option như depends_on
có thể chưa đầy đủ, nên nếu cấu hình phức tạp cần kiểm tra kỹ trước.
Q4. Podman có hoạt động ổn định trên Ubuntu không?
A4. Có, từ Ubuntu 20.04 LTS trở lên hoạt động rất ổn định. Podman có sẵn trên kho chính thức Ubuntu, chỉ cần dùng apt
là cài được. Nếu muốn dùng bản mới hơn, có thể thêm PPA.
Q5. Dùng rootless mode có bị hạn chế gì không?
A5. Khi chạy rootless, một số thao tác đặc quyền (ví dụ dùng port nhỏ hơn 1024) bị hạn chế. Tuy nhiên có thể dùng port forwarding để xử lý. Đa số trường hợp thực tế rootless vẫn đáp ứng tốt.
Q6. Podman pull image có giống Docker Hub không?
A6. Đúng vậy, Podman mặc định lấy image từ Docker Hub. Tuy nhiên đôi lúc bạn cần ghi rõ tên registry như docker.io/library/ubuntu
.
podman pull docker.io/library/ubuntu
Podman còn hỗ trợ nhiều registry khác như Quay.io, GitHub Container Registry, v.v.
Q7. Podman dùng cho production được không?
A7. Có, Podman hỗ trợ tốt các yếu tố cần cho production như tương thích Kubernetes, tích hợp systemd. Đặc biệt môi trường yêu cầu bảo mật cao, Podman có thể phù hợp hơn Docker. Trên Red Hat Enterprise Linux, Fedora, Podman đã là mặc định và có nhiều dự án lớn sử dụng.