Giới thiệu

Docker là công cụ dùng để quản lý và tương tác với containers, chắc không quá xa lạ với hầu hết các developer. Tuy nhiên, trong lĩnh vực quản lý containers còn có nhiều công cụ khác có thể thay thế Docker, và Podman là một trong những lựa chọn nổi bật nhất.

Trong bài viết này, chúng ta sẽ tìm hiểu về Podman - một công cụ mã nguồn mở được phát triển bởi RedHat, có khả năng thay thế Docker trong nhiều tình huống với những ưu điểm riêng biệt.

Tại sao cần một công cụ thay thế Docker?

Docker được ra mắt vào năm 2013 là phiên bản mã nguồn mở hoàn toàn miễn phí. Tuy nhiên, trong năm 2022, Docker đã không còn hoàn toàn miễn phí nữa mà đi kèm với một số phiên bản như Personal, Pro, Team, Business. Nếu sử dụng bản miễn phí, bạn sẽ bị giới hạn một số tính năng, ví dụ như “image pull rate limit”.

Đa số người dùng đều có thói quen tìm kiếm các giải pháp thay thế miễn phí khi một công cụ từng miễn phí bắt đầu có các giới hạn hoặc yêu cầu trả phí. Đó là lý do tại sao Podman trở thành một lựa chọn hấp dẫn.

Podman là gì?

Podman (Pod Manager) là một công cụ mã nguồn mở được phát triển bởi RedHat, dùng để quản lý, xây dựng và chạy containers. Nó được thiết kế để tương thích với Docker API, cho phép người dùng dễ dàng chuyển đổi từ Docker sang Podman mà không cần thay đổi nhiều trong workflow hiện tại.

Nếu bạn đã quen thuộc với Kubernetes, bạn sẽ thấy Podman còn có lợi thế hơn nữa, vì RedHat đã thiết kế Podman để làm việc tốt với Kubernetes. Do đó, nếu bạn đang sử dụng Kubernetes, Podman có thể là lựa chọn tốt hơn so với Docker.

Những ưu điểm của Podman so với Docker

  1. Kiến trúc không cần daemon: Khác với Docker sử dụng một daemon chạy với quyền root, Podman chạy containers mà không cần daemon. Điều này giúp giảm thiểu rủi ro bảo mật và tăng tính ổn định.

  2. Chạy containers không cần quyền root: Podman cho phép chạy containers mà không cần quyền root, giúp tăng cường bảo mật.

  3. Hỗ trợ Pod: Podman hỗ trợ khái niệm “pod” giống như Kubernetes, cho phép bạn chạy nhiều containers trong cùng một namespace.

  4. Tương thích với Docker: Podman có thể sử dụng hầu hết các lệnh Docker, giúp việc chuyển đổi trở nên dễ dàng.

  5. Hoàn toàn miễn phí và mã nguồn mở: Không có giới hạn về số lượng images hay containers như Docker.

Cài đặt Podman

Cài đặt Podman khá đơn giản trên các hệ điều hành phổ biến:

MacOS:

brew install podman
podman machine init
podman machine start
podman info

CentOS:

sudo yum -y install podman

Nếu bạn sử dụng CentOS 7, cần thêm vài lệnh sau dưới quyền root:

sudo -s
echo "user.max_user_namespaces=10000" > /etc/sysctl.d/42-rootless.conf
sysctl --system

Ubuntu 20.10 trở lên:

sudo apt-get -y update
sudo apt-get -y install podman

Windows:

Đối với Windows, bạn có thể tham khảo hướng dẫn chi tiết tại Podman for Windows guide.

Sử dụng Podman cơ bản

Nếu bạn đã quen thuộc với Docker, việc sử dụng Podman sẽ rất đơn giản vì Podman hỗ trợ hầu hết các lệnh của Docker. Trên Linux, bạn thậm chí có thể thêm alias docker=podman vào file ~/.bashrc để sử dụng các lệnh Docker với Podman.

Tìm kiếm images:

sudo podman search httpd --filter=is-official

Pull images:

Cách pull image của Podman hơi khác một chút so với Docker. Bạn cần chỉ định tên của registry khi pull, nếu không mặc định nó sẽ pull từ registry registry.access.redhat.com:

# Pull từ Docker Hub
sudo podman pull docker.io/library/httpd

Kiểm tra images đã pull:

sudo podman images

Chạy container:

sudo podman run -d -p 8080:80 docker.io/library/httpd

Kiểm tra container đang chạy:

sudo podman ps

Kết quả:

CONTAINER ID  IMAGE                           COMMAND           CREATED         STATUS             PORTS                 NAMES
d7c79f9f2916  docker.io/library/httpd:latest  httpd-foreground  14 seconds ago  Up 13 seconds ago  0.0.0.0:8080->80/tcp  magical_khorana

Kiểm tra logs của container:

sudo podman logs -f d7c79f9f2916

Dừng và xóa container:

sudo podman stop d7c79f9f2916
sudo podman rm d7c79f9f2916

Xây dựng Container Image với Podman

Cú pháp file build của Podman cũng giống y hệt Docker, chỉ khác là với Docker thì tên mặc định của file build là Dockerfile, còn với Podman là Containerfile. Tuy nhiên, Podman vẫn có thể sử dụng file Dockerfile nếu bạn muốn.

Ví dụ, để build một container image cho ứng dụng Go:

  1. Tạo một file Containerfile với nội dung:
FROM golang:1.19-alpine AS builder

WORKDIR /app
COPY . .
RUN go build -o main .

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]
  1. Build image:
podman build -t my-go-app .
  1. Chạy container từ image vừa build:
podman run -d -p 8080:8080 my-go-app

Podman Compose - Thay thế cho Docker Compose

Podman cũng có một công cụ tương tự như Docker Compose, gọi là Podman Compose, cho phép bạn định nghĩa và quản lý nhiều containers cùng lúc:

  1. Cài đặt Podman Compose:
pip3 install podman-compose
  1. Sử dụng file docker-compose.yml hiện có:
podman-compose up -d

Hoặc bạn có thể sử dụng podman play kube để chạy các file YAML định dạng Kubernetes:

podman play kube pod.yaml

Podman và Kubernetes

Một trong những ưu điểm lớn của Podman là khả năng tích hợp tốt với Kubernetes. Bạn có thể tạo file YAML Kubernetes từ containers đang chạy:

podman generate kube my-container > my-container.yaml

Và sau đó chạy file này trên Kubernetes hoặc với Podman:

podman play kube my-container.yaml

Chuyển đổi từ Docker sang Podman

Nếu bạn đang cân nhắc việc chuyển đổi từ Docker sang Podman, đây là một số bước cơ bản:

  1. Cài đặt Podman theo hướng dẫn ở trên.

  2. (Tùy chọn) Tạo alias để sử dụng lệnh docker với Podman:

echo "alias docker=podman" >> ~/.bashrc
source ~/.bashrc
  1. Pull lại các images từ Docker Hub hoặc registry khác:
podman pull docker.io/your-image:tag
  1. Chạy lại các containers với Podman.

  2. Nếu bạn sử dụng Docker Compose, hãy cài đặt Podman Compose và sử dụng file docker-compose.yml hiện có.

Kết luận

Podman là một công cụ mạnh mẽ và linh hoạt để quản lý containers, cung cấp nhiều tính năng tương tự như Docker nhưng với một số ưu điểm về bảo mật và kiến trúc. Nếu bạn đang tìm kiếm một giải pháp thay thế cho Docker, đặc biệt là trong môi trường doanh nghiệp hoặc khi làm việc với Kubernetes, Podman là một lựa chọn đáng cân nhắc.

Với khả năng tương thích cao với Docker, việc chuyển đổi từ Docker sang Podman cũng không quá phức tạp, cho phép bạn tiếp tục sử dụng hầu hết các workflow và kiến thức hiện có về containers.

Hãy thử nghiệm Podman trong dự án tiếp theo của bạn và khám phá những lợi ích mà nó mang lại!