Hướng dẫn cho người mới bắt đầu cài đặt và sử dụng Podman trên AlmaLinux 9

theanh

Administrator
Nhân viên
Podman là một công cụ gốc Linux để triển khai các ứng dụng sử dụng các container và hình ảnh container của Sáng kiến chứa mở (OCI). Công cụ này hỗ trợ nhiều định dạng hình ảnh container, bao gồm hình ảnh Docker và hình ảnh container OCI. Ngoài ra, Podman còn hỗ trợ quản lý các pod và nhóm container.

Podman là một công cụ không có daemon, chạy như một dòng lệnh nhị phân duy nhất mà không cần dịch vụ. Công cụ này cung cấp một dòng lệnh tương tự như Docker, bạn có thể sử dụng một bí danh như 'alias docker=podman'.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và sử dụng Podman để thay thế cho Docker Engine trên máy chủ AlmaLinux 9. Bạn sẽ học cách sử dụng một số điều cơ bản của Podman để quản lý các ứng dụng container. Khi hoàn thành hướng dẫn này, bạn sẽ nắm rõ hơn về cách sử dụng Podman làm công cụ phối hợp vùng chứa cho quá trình phát triển cục bộ của mình.

Điều kiện tiên quyết​

Để bắt đầu sử dụng hướng dẫn này, bạn phải có những điều sau:
  • Máy chủ AlmaLinux 9 - Ví dụ này sử dụng máy chủ có tên máy chủ là 'AlmaLinux9'.
  • Người dùng không phải root có quyền quản trị viên sudo/root.

Cài đặt Podman​

Podman là công cụ phối hợp vùng chứa không cần daemon và mã nguồn mở để phát triển nhanh. Podman là ứng dụng gốc của Linux và cung cấp giao diện dòng lệnh tương tự như Docker.

Với Podman, bạn có thể tìm, chạy, chia sẻ và triển khai các ứng dụng bằng cách sử dụng các container OCI (Open Containers Initiative) và hình ảnh container.

Trên AlmaLinux, Podman có sẵn theo mặc định trên kho lưu trữ AppStream, bạn có thể cài đặt nó bằng trình quản lý gói DNF.

Chạy lệnh dnf sau để cài đặt Podman trên AlmaLinux của bạn máy chủ.
Mã:
sudo dnf install podman
Nhập y khi được nhắc, sau đó nhấn ENTER.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22481%22%3E%3C/svg%3E


Vì Podman không có daemon, bạn có thể chạy nó mà không cần khởi động bất kỳ daemon nào.

Chạy lệnh sau để kiểm tra phiên bản Podman và thông tin chi tiết thông tin về cài đặt của bạn.
Mã:
podman version
Dưới đây là đầu ra của phiên bản Podman hiện tại trong quá trình viết bài này:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22411%22%20height=%22211%22%3E%3C/svg%3E


Ngoài ra, bạn cũng có thể xác minh thông tin chi tiết về cài đặt Podman bằng cách sử dụng lệnh.
Mã:
podman info

Chạy Podman với tư cách là Người dùng không phải root​

Trong phần này, bạn sẽ thiết lập Podman cho người dùng không phải root. Bạn sẽ tạo một người dùng mới và đảm bảo rằng người dùng không phải root mới có thể thực thi và chạy các container bằng Podman.

Chạy lệnh sau để tạo một người dùng mới có tên là 'alice' và cấu hình mật khẩu cho người dùng đó. Nhập mật khẩu mới khi được nhắc, sau đó lặp lại.
Mã:
sudo useradd -m -s /bin/bash alice
sudo passwd alice
Bây giờ, hãy thêm người dùng mới 'alice' vào nhóm 'wheel'. Điều này cho phép người dùng mới thực thi 'sudo' và trở thành root.
Mã:
sudo usermod -aG wheel alice
Sau đó, chạy lệnh sau để bật chế độ chờ cho người dùng 'alice'. Điều này cho phép người dùng 'alice' chạy quy trình chứa trong một thời gian dài, ngay cả khi người dùng đã đăng xuất, quy trình vẫn sẽ chạy.
Mã:
sudo loginctl enable-linger alice
Tiếp theo, hãy đăng nhập với tư cách là người dùng mới 'alice' bằng lệnh bên dưới.
Mã:
su - alice

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22578%22%20height=%22298%22%3E%3C/svg%3E


Chạy lệnh 'podman' bên dưới để chạy một vùng chứa mới với hình ảnh 'hello-world'.
Mã:
podman run hello-world
Nếu thành công, bạn sẽ nhận được kết quả như sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22532%22%20height=%22381%22%3E%3C/svg%3E


Cuối cùng, chạy lệnh 'podman' sau để xác minh danh sách các container đang chạy và đã thoát.
Mã:
podman ps -a
Nếu cấu hình thành công, bạn sẽ thấy container có hình ảnh cơ sở 'hello-world' với trạng thái 'Đã thoát'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2279%22%3E%3C/svg%3E

Tìm hình ảnh container​

Theo mặc định, Podman sẽ lấy hình ảnh container từ nhiều sổ đăng ký hình ảnh, chẳng hạn như sổ đăng ký hình ảnh Redhat, quay.io và cả DockerHub. Bạn có thể thêm nhiều sổ đăng ký hình ảnh container hơn vào cấu hình '/etc/containers/registries.conf'.

Ví dụ này sẽ sử dụng DockerHub làm sổ đăng ký container, vì vậy chúng ta hãy bắt đầu.

Chạy lệnh sau để tìm hình ảnh container mới chứa 'httpd'.
Mã:
podman search httpd
Dưới đây là đầu ra bạn sẽ nhận được trên thiết bị đầu cuối của mình:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22635%22%3E%3C/svg%3E


Bạn cũng có thể giới hạn đầu ra bằng cách sử dụng tùy chọn '--limit' như thế này.
Mã:
podman search httpd --limit 3
Điều này sẽ chỉ hiển thị ba hình ảnh container hàng đầu từ mỗi sổ đăng ký hình ảnh container.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22227%22%3E%3C/svg%3E


Cuối cùng, bạn cũng có thể sử dụng tùy chọn '--filter' như thế này.
Mã:
podman search httpd --filter=is-official
Điều này sẽ chỉ hiển thị cho bạn hình ảnh container chính thức.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22578%22%20height=%22121%22%3E%3C/svg%3E

Tải xuống hình ảnh​

Sau khi tìm thấy hình ảnh chứa, bước tiếp theo là tải xuống hình ảnh chứa từ sổ đăng ký.

Chạy lệnh sau để tải xuống hình ảnh 'httpd' có thẻ 'alpine'.
Mã:
podman pull httpd:alpine
Chọn sổ đăng ký hình ảnh mà bạn muốn sử dụng. Ví dụ này sẽ sử dụng DockerHub.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22489%22%20height=%22138%22%3E%3C/svg%3E


Sau khi chọn nguồn, quá trình tải xuống sẽ bắt đầu.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22608%22%20height=%22335%22%3E%3C/svg%3E


Sau khi hoàn tất, hãy chạy lệnh sau để kiểm tra các hình ảnh có sẵn trên AlmaLinux của bạn máy chủ.
Mã:
podman images
Tại thời điểm này, nếu thành công, bạn sẽ nhận được hai hình ảnh chứa, hình ảnh 'hello-world' từ quay.io và 'httpd' từ DockerHub.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22688%22%20height=%22139%22%3E%3C/svg%3E

Kiểm tra hình ảnh​

Kiểm tra hình ảnh là một công cụ mạnh mẽ để có được thông tin chi tiết về cách container sẽ bắt đầu. Trên Podman và Docker, bạn có thể kiểm tra hình ảnh bằng tùy chọn 'inspect'.

Chạy lệnh sau để có được thông tin chi tiết về hình ảnh 'httpd:alpine'.
Mã:
podman inspect docker.io/library/httpd:alpine
Điều này sẽ hiển thị cho bạn thông tin chi tiết về hình ảnh, chẳng hạn như ngày tạo, kích thước, thư mục làm việc mặc định, lệnh bắt đầu, cổng được hiển thị và nhiều thông tin khác.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22483%22%3E%3C/svg%3E


Bạn cũng có thể chỉ định phần nào bạn muốn kiểm tra bằng cách sử dụng tham số bổ sung như thế này.
Mã:
podman inspect --format "size: {{.Size}}" docker.io/library/httpd:alpine
podman inspect --format "ports: {{.Config.ExposedPorts}}" docker.io/library/httpd:alpine
podman inspect --format "workdir: {{.Config.WorkingDir}}" docker.io/library/httpd:alpine
Điều này sẽ hiển thị cho bạn kích thước của hình ảnh, cổng mặc định được hiển thị và thư mục làm việc mặc định.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22140%22%3E%3C/svg%3E

Chạy Container​

Trong phần này, bạn sẽ học cách chạy container bằng Podman.

Nhập lệnh sau để chạy một container mới có tên là 'httpd', hiển thị cổng 8080 trên máy chủ và sử dụng hình ảnh 'httpd:alpine'. Ngoài ra, tham số '--rm' sẽ tự động xóa vùng chứa khi vùng chứa dừng lại.
Mã:
podman run -it --rm -d -p 8080:80 --name httpd docker.io/library/httpd:alpine
Nếu thành công, bạn sẽ nhận được chuỗi ngẫu nhiên và số của id vùng chứa mới.

Kiểm tra vùng chứa đang chạy bằng lệnh sau. Bạn sẽ nhận được container 'httpd' có trạng thái 'Up' và sử dụng cổng 8080 trên máy chủ.
Mã:
podman ps

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22127%22%3E%3C/svg%3E


Tiếp theo, bạn có thể kiểm tra container 'httpd' bằng lệnh curl bên dưới. Hãy đảm bảo thay thế địa chỉ IP trong ví dụ bên dưới bằng địa chỉ IP máy chủ của bạn.
Mã:
curl http://192.168.5.20:8080/
Nếu thành công, bạn sẽ nhận được kết quả như sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22511%22%20height=%22119%22%3E%3C/svg%3E


Ngoài ra, bạn cũng có thể truy cập vào vùng chứa 'httpd' thông qua trình duyệt web. Mở trình duyệt web của bạn và truy cập địa chỉ IP của máy chủ theo sau là cổng container 8080 (ví dụ: http://192.168.5.20:8080/).

Nếu thành công, bạn sẽ nhận được trang index.html mặc định từ container 'httpd' như thế này:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22499%22%20height=%22129%22%3E%3C/svg%3E

Kiểm tra Nhật ký Container​

Khi container 'httpd' đã hoạt động, bây giờ bạn sẽ kiểm tra nhật ký từ container. Biết điều này sẽ hữu ích cho việc gỡ lỗi ứng dụng của bạn.

Để hiển thị tất cả các bản ghi từ vùng chứa 'httpd', hãy chạy lệnh sau.
Mã:
podman logs httpd
Đây là một ví dụ về các bản ghi từ vùng chứa 'httpd'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22113%22%3E%3C/svg%3E


Tiếp theo, bạn có thể giảm đầu ra nhật ký bằng cách sử dụng tham số '--tail' như thế này.
Mã:
podman logs --tail 20 httpd
Trong ví dụ này, tham số 'tail 20' sẽ hiển thị cho bạn 20 dòng nhật ký mới nhất từ container 'httpd'.

Dừng Container​

Bây giờ, nếu bạn muốn dừng container, chỉ cần chạy lệnh `podman stop`.

Chạy lệnh sau để dừng container 'httpd'.
Mã:
podman stop httpd
Sau khi container 'httpd' dừng, hãy chạy lệnh bên dưới để kiểm tra danh sách các container khả dụng trên hệ thống.
Mã:
podman ps
podman ps -a
Vùng chứa 'httpd' sẽ tự động bị xóa sau khi vùng chứa bị dừng. Điều này là do bạn chạy container với tham số '--rm'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22145%22%3E%3C/svg%3E

Chạy container với Custom Volume​

Trong ví dụ này, bạn sẽ chạy một container mới với custom volume. Thao tác này sẽ gắn thư mục cục bộ trên máy chủ vào container.

Tạo một thư mục 'data' mới trong thư mục home của người dùng alice. Sau đó, tạo tệp 'index.html mới bên trong thư mục 'data' bằng trình chỉnh sửa nano.
Mã:
mkdir -p ~/data/
nano ~/data/index.html
Chèn tập lệnh HTML sau.
Mã:
 Welcome to Container Nginx


 [HEADING=2]Hello from httpd container - Managed with Podman[/HEADING]
Lưu và đóng tệp.

Bây giờ, hãy thực thi lệnh sau để chạy một vùng chứa mới 'httpd' với ổ đĩa tùy chỉnh của thư mục 'data', sẽ được gắn vào thư mục '/usr/local/apache2/htdocs' trên container.
Mã:
podman run --privileged=true -it --rm -d -p 8080:80 --name httpd -v ~/data:/usr/local/apache2/htdocs docker.io/library/httpd:alpine
Ngoài ra, container này đang chạy với tham số bổ sung '--privileged=true'. Đây là để thử nghiệm, nhưng container vẫn sẽ được chạy với tư cách là người dùng 'alice' chứ không phải người dùng root. Tìm hiểu thêm thông tin về cờ đặc quyền trên Podman.

Tiếp theo, chạy lệnh sau để kiểm tra vùng chứa đang chạy trên hệ thống của bạn.
Mã:
podman ps
Nếu thành công, bạn sẽ thấy vùng chứa mới 'httpd' có trạng thái 'Up' và cổng 8080 được hiển thị trên máy chủ.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22102%22%3E%3C/svg%3E


Chạy lệnh curl bên dưới để xác minh vùng chứa mới 'httpd'.
Mã:
curl http://192.168.5.21:8080/
Bạn sẽ nhận được kết quả đầu ra của tập lệnh index.html mà bạn đã tạo trước đó.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22598%22%20height=%22283%22%3E%3C/svg%3E


Từ trình duyệt web trên http://192.168.5.21:8080/, bạn sẽ thấy trang tùy chỉnh như thế này:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22659%22%20height=%22157%22%3E%3C/svg%3E

Đăng nhập vào Container​

Khi container 'httpd' đang chạy, bạn có thể truy cập container thông qua shell bằng cách sử dụng lệnh 'podman exec'.

Đăng nhập vào container 'httpd' bằng lệnh sau. Lệnh này sẽ thực thi shell '/bin/sh' trên container 'httpd' và đính kèm nó vào phiên hiện tại của bạn.
Mã:
podman exec -it httpd /bin/sh
Sau khi đăng nhập, bạn sẽ ở trong thư mục 'WorkingDir'. Trong ví dụ này, WorkingDir mặc định là thư mục '/usr/local/apache2'.

Bây giờ hãy chạy lệnh sau trên vùng chứa 'httpd'. Kiểm tra người dùng hiện tại, địa chỉ IP cục bộ của vùng chứa và cổng mặc định cho vùng chứa.
Mã:
id

ip a
route -n
Bạn có thể có đầu ra với địa chỉ IP và cổng khác, nhưng phải tương tự như sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22560%22%3E%3C/svg%3E

Chạy và quản lý Pod​

Trong Podman, bạn có thể tạo và chạy Pod. Pod là một wrapper cho các container, nghĩa là nhiều container có thể chạy trên một Pod duy nhất. Giống như trong Kubernetes, Pod là thực thể nhỏ nhất mà ứng dụng của bạn đang chạy.

Với Podman, bạn có thể tạo và chạy Pod, ngay cả khi không có Kubernetes.

Chạy lệnh sau để tạo một pod httpdTest mới với hình ảnh 'httpd:alpine' và hiển thị cổng 9090 trên máy chủ.
Mã:
podman run -dt --pod new:httpdTest -p 9090:80 docker.io/library/httpd:alpine
Nếu thành công, bạn sẽ nhận được chuỗi ngẫu nhiên và số ID Pod.

Bây giờ hãy chạy lệnh sau để kiểm tra Pod đang chạy trên hệ thống.
Mã:
podman pod ls
Bạn sẽ thấy Pod 'httpdTest' có trạng thái 'Đang chạy' và 2 vùng chứa.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22165%22%3E%3C/svg%3E


Bây giờ bạn có thể sử dụng tùy chọn 'kiểm tra' trên pod như thế này.
Mã:
podman pod inspect httpdTest
Bạn sẽ nhận được thông tin chi tiết về pod httpdTest.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22618%22%3E%3C/svg%3E


Bạn cũng có thể kiểm tra số lượng container chạy trong pod bao gồm tên container bằng cách sử dụng lệnh sau lệnh.
Mã:
podman pod inspect --format="containers: {{.NumContainers}}" httpdTest
podman pod inspect --format "{{.Containers}}" httpdTest
Bạn sẽ nhận được kết quả như sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2284%22%3E%3C/svg%3E


Cuối cùng, hãy chạy lệnh sau để truy cập pod httpdTest, đang chạy trên cổng 9090 trên máy chủ. Nếu thành công, bạn sẽ nhận được các container trang index.html mặc định chạy trên pod httpdTest.
Mã:
curl http://192.168.5.21:9090/

Kết luận​

Xin chúc mừng! Bây giờ bạn đã cài đặt Podman trên AlmaLinux 9. Bạn cũng đã học được cách sử dụng cơ bản của Podman để quản lý hình ảnh và container. Ngoài ra, bạn cũng đã học được cách tạo và chạy Pod bằng Podman.
 
Back
Bên trên