Podman là một công cụ chứa mã nguồn mở. Giống như Docker, Podman là giải pháp để tạo, chạy và quản lý các container. Nhưng Podman vượt xa Docker, sử dụng một quy trình daemonless an toàn để chạy các container ở chế độ không có gốc.

Để biết thêm thông tin về Podman là gì và so sánh với Docker như thế nào, bạn có thể tham khảo hướng dẫn Podman so với Docker của chúng tôi . Hướng dẫn này giúp bạn làm quen với những điều cơ bản của Podman và Docker, đồng thời so sánh và đối chiếu hai công cụ này.

Trong hướng dẫn này, bạn sẽ tìm hiểu mọi thứ cần thiết để cài đặt và bắt đầu sử dụng Podman trên hệ thống Linux của mình. Cuối cùng, bạn có thể chạy và quản lý container bằng Podman.

Trước khi bạn bắt đầu

  1. Làm quen với hướng dẫn Bắt đầu với Linode của chúng tôi và hoàn tất các bước để thiết lập tên máy chủ và múi giờ cho Linode của bạn.
  2. Hướng dẫn này sử dụng sudobất cứ nơi nào có thể. Hoàn thành các phần trong hướng dẫn Cách bảo mật máy chủ của chúng tôi để tạo tài khoản người dùng chuẩn, tăng cường quyền truy cập SSH và xóa các dịch vụ mạng không cần thiết.
  3. Cập nhật hệ thống của bạn.

Debian hoặc Ubuntu:

sudo apt update && sudo apt upgrade

AlmaLinux, CentOS Stream, Fedora hoặc Rocky Linux:

sudo dnf upgrade

Ghi chú: Hướng dẫn này được viết cho người dùng không phải root. Các lệnh yêu cầu quyền nâng cao được thêm tiền tố sudo. Nếu bạn không quen vớisudolệnh này, hãy xem hướng dẫn Người dùng và Nhóm .

Cách cài đặt Podman

1. Podman có sẵn thông qua trình quản lý gói mặc định trên hầu hết các bản phân phối Linux.

AlmaLinux, CentOS Stream, Fedora hoặc Rocky Linux:

sudo dnf install podman

Debian hoặc Ubuntu:

sudo apt install podman

Ghi chú: Podman chỉ khả dụng thông qua trình quản lý gói APT cho Debian 11 hoặc Ubuntu 20.10 trở lên.

2.Sau đó, hãy xác minh cài đặt của bạn bằng cách kiểm tra phiên bản Podman đã cài đặt:

podman -v

Đầu ra của bạn có thể khác với những gì hiển thị ở đây, nhưng bạn chỉ cần kiểm tra xem Podman đã được cài đặt thành công chưa:

podman version 4.1.1

Cấu hình Podman để sử dụng không cần root

Podman hoạt động bằng quyền root theo mặc định – ví dụ, sử dụng phần sudomở đầu cho lệnh. Tuy nhiên, Podman cũng có khả năng chạy ở chế độ không cần root, một tính năng hấp dẫn khi bạn muốn người dùng hạn chế thực hiện hành động container một cách an toàn.

Docker có thể cho phép bạn chạy lệnh với tư cách là người dùng bị giới hạn, nhưng daemon Docker vẫn chạy với tư cách là root. Đây là một vấn đề bảo mật tiềm ẩn với Docker, một vấn đề có thể cho phép người dùng bị giới hạn thực thi các lệnh đặc quyền thông qua daemon Docker.

Podman giải quyết vấn đề này bằng tùy chọn thiết lập hoàn toàn không cần root, trong đó các container hoạt động trong môi trường không cần root. Dưới đây, bạn có thể tìm thấy các bước để thiết lập phiên bản Podman của mình để sử dụng không cần root.

1.Cài đặt slirp4netnscác fuse-overlayfscông cụ để hỗ trợ hoạt động Podman không cần root của bạn.

AlmaLinux, CentOS Stream, Fedora hoặc Rocky Linux:

sudo dnf install slirp4netns fuse-overlayfs

Debian hoặc Ubuntu:

sudo apt install slirp4netns fuse-overlayfs

2.Thêm subuidsvà subgidsphạm vi cho người dùng giới hạn của bạn. Ví dụ này thực hiện như vậy đối với người dùng example-user. Nó cung cấp cho người dùng đó một UID phụ và GID phụ là 100000, mỗi UID phụ có một phạm vi 65535ID:

sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 example-user

Sau khi cài đặt Podman, mọi thứ đã sẵn sàng để bạn bắt đầu chạy container với nó. Các phần tiếp theo sẽ hướng dẫn bạn qua các tính năng chính của Podman để tìm Image container và chạy và quản lý container.

Nhận một Image

Podman cung cấp một số phương pháp để lấy hình ảnh container, bạn có thể làm theo bên dưới. Các phần này cũng cung cấp cho bạn một vài hình ảnh để bắt đầu và được sử dụng trong các phần sau cho các ví dụ khác.

Tìm kiếm Image

Có lẽ cách đơn giản nhất để bắt đầu với một container là tìm một hình ảnh hiện có trong sổ đăng ký. Với lệnh Podman search, bạn có thể tìm thấy các hình ảnh phù hợp trong bất kỳ sổ đăng ký container nào bạn đã thiết lập.

Ghi chú

Podman có thể đi kèm một số sổ đăng ký được cấu hình theo mặc định. Tuy nhiên, trên một số hệ thống, trước tiên có thể cần phải cấu hình các sổ đăng ký này theo cách thủ công. Bạn có thể thực hiện việc này bằng cách mở /etc/containers/registries.conftệp bằng trình soạn thảo văn bản ưa thích của mình và thêm một dòng như sau vào cuối:

unqualified-search-registries=['registry.access.redhat.com', 'registry.fedoraproject.org', 'docker.io', 'quay.io']

Bạn có thể thay thế các sổ đăng ký được liệt kê ở đây bằng những sổ đăng ký mà bạn muốn tìm kiếm hình ảnh container.

GitHub của Podman cũng có một registries.conftệp ở đây mà bạn có thể sử dụng làm tài liệu tham khảo ban đầu.

Ví dụ này tìm kiếm hình ảnh phù hợp với thuật ngữ buildah:

podman search buildah

Hãy nhớ rằng các kết quả khớp của bạn có thể khác nhau tùy thuộc vào sổ đăng ký mà phiên bản Podman của bạn được cấu hình:

NAME                                                            DESCRIPTION
registry.access.redhat.com/ubi8/buildah                         Containerized version of Buildah
registry.access.redhat.com/ubi9/buildah                         rhcc_registry.access.redhat.com_ubi9/buildah
registry.redhat.io/rhel8/buildah                                Containerized version of Buildah
registry.redhat.io/rhel9/buildah                                rhcc_registry.access.redhat.com_rhel9/builda...
[...]

Tải xuống Image

Sau khi tìm kiếm trong sổ đăng ký, bạn có thể sử dụng Podman để tải xuống hoặc kéo một hình ảnh cụ thể. Điều này có thể thực hiện được bằng lệnh Podman pulltheo sau là tên của hình ảnh chứa:

podman pull buildah

Như kết quả tìm kiếm cho thấy, có thể có nhiều sổ đăng ký khớp với một hình ảnh chứa nhất định:

Resolved "buildah" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Trying to pull quay.io/buildah/stable:latest...
Getting image source signatures
[...]

Nhưng bạn cũng có thể cụ thể hơn. Bạn có thể chỉ định toàn bộ tên hình ảnh, cùng với đường dẫn đăng ký, để kéo từ một vị trí cụ thể.

Ví dụ, ví dụ tiếp theo này sẽ kéo hình ảnh Buildah từ docker.iosổ đăng ký:

podman pull docker.io/buildah/buildah

Như bạn có thể thấy, nó đã bỏ qua phần giải quyết bí danh tên ngắn và kéo hình ảnh Buildah trực tiếp từ nguồn đã chỉ định:

Trying to pull docker.io/buildah/buildah:latest...
Getting image source signatures
[...]

Xây dựng Image

Giống như Docker, Podman cũng cung cấp cho bạn khả năng tạo ảnh container từ tệp. Thông thường, quy trình xây dựng này sử dụng định dạng Dockerfile, mặc dù Podman cũng hỗ trợ định dạng Containerfile.

Bạn có thể tìm hiểu thêm về cách tạo Dockerfile trong hướng dẫn Cách sử dụng Dockerfile để xây dựng Docker Image của chúng tôi . Hướng dẫn này cũng bao gồm các liên kết đến các hướng dẫn khác có nội dung chi tiết hơn về Dockerfile.

Nhưng hiện tại, để xem khả năng xây dựng của Podman đang hoạt động, bạn có thể sử dụng Dockerfile sau:

# Base on the most recently released Fedora
FROM fedora:latest
MAINTAINER ipbabble email buildahboy@redhat.com # not a real email

# Install updates and httpd
RUN echo "Updating all fedora packages"; dnf -y update; dnf -y clean all
RUN echo "Installing httpd"; dnf -y install httpd && dnf -y clean all

# Expose the default httpd port 80
EXPOSE 80

# Run the httpd
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]

Đặt những nội dung này vào một tệp có tên là Dockerfile. Sau đó, làm việc từ cùng thư mục lưu trữ tệp, bạn có thể sử dụng lệnh Podman sau để xây dựng một hình ảnh từ tệp:

podman build -t fedora-http-server .

Tùy chọn này -tcho phép bạn đặt thẻ hoặc tên cho hình ảnh – fedora-http-servertrong trường hợp này. Ở .cuối lệnh sẽ chỉ định thư mục mà Dockerfile có thể được tìm thấy, trong đó a .biểu thị thư mục hiện tại.

Tiếp tục đọc phần bên dưới có tiêu đề Chạy ảnh container để biết cách bạn có thể chạy container từ ảnh được tạo như minh họa ở trên.

Lệnh của Podman buildhoạt động khá giống với Docker, nhưng thực chất là một tập hợp con của chức năng xây dựng trong Buildah. Trên thực tế, Podman sử dụng một phần mã nguồn của Buildah để triển khai chức năng xây dựng của nó.

Buildah cung cấp nhiều tính năng hơn và khả năng kiểm soát chi tiết hơn khi xây dựng container. Vì lý do đó, nhiều người coi Podman và Buildah là các công cụ bổ sung. Buildah cung cấp một công cụ mạnh mẽ để tạo hình ảnh container từ cả tệp container (ví dụ Dockerfiles) và từ đầu. Sau đó, Podman xuất sắc trong việc chạy và quản lý các container kết quả.

Bạn có thể tìm hiểu thêm về Buildah, bao gồm các bước thiết lập và sử dụng, trong hướng dẫn Cách sử dụng Buildah để xây dựng hình ảnh container OCI của chúng tôi .

Liệt kê Image địa phương

Khi bạn có một hoặc nhiều hình ảnh cục bộ trên hệ thống của mình, bạn có thể xem chúng bằng lệnh Podman images. Lệnh này cung cấp cho bạn danh sách các hình ảnh đã được tạo hoặc tải xuống hệ thống của bạn:

podman images

Thực hiện theo hai phần trên — về việc tải xuống và sau đó xây dựng hình ảnh container — bạn có thể mong đợi kết quả tương tự như sau:

REPOSITORY                         TAG         IMAGE ID      CREATED       SIZE
localhost/fedora-http-server       latest      f6f5a66c8a4d  2 hours ago   328 MB
quay.io/buildah/stable             latest      eef9e8be5fea  2 hours ago  358 MB
registry.fedoraproject.org/fedora  latest      3a66698e6040  2 hours ago  169 MB

Chạy một Image container

Sau khi tải xuống hoặc tạo xong hình ảnh, bạn có thể bắt đầu sử dụng Podman để chạy container.

Quá trình này có thể khá đơn giản với lệnh Podman run, lệnh này chỉ lấy tên của hình ảnh để chạy container.

Sau đây là một ví dụ sử dụng hình ảnh Buildah đã tải xuống ở trên. Ví dụ này chạy hình ảnh Buildah, cụ thể là thực thi buildahlệnh trên container kết quả:

podman run buildah buildah -v

Có tùy -vchọn để xuất phiên bản của ứng dụng:

buildah version 1.26.2 (image-spec 1.0.2-dev, runtime-spec 1.0.2-dev)

Hoạt động của container có thể trở nên phức tạp hơn từ đó và Podman có rất nhiều tính năng để hỗ trợ nhiều nhu cầu khác nhau khi chạy container.

Hãy lấy fedora-http-serverví dụ được tạo từ Dockerfile ở trên. Ví dụ này chạy máy chủ HTTP trên cổng của container 80. Lệnh sau đây minh họa cách Podman cho phép bạn kiểm soát cách container đó hoạt động.

Lệnh chạy container, tự động khởi động máy chủ HTTP. Tùy -pchọn được đưa ra ở đây sẽ xuất bản cổng của container 80tới cổng của máy cục bộ 8080, trong khi --rmtùy chọn tự động dừng container khi nó chạy xong — một giải pháp phù hợp cho một thử nghiệm nhanh.

podman run -p 8080:80 --rm fedora-http-server

Bây giờ, trên máy đang chạy hình ảnh, hãy sử dụng lệnh cURL để xác minh rằng trang web mặc định đang được phục vụ trên cổng 8080:

curl localhost:8080

Bạn sẽ thấy mã HTML của Trang kiểm tra máy chủ HTTP Fedora:

<!doctype html>
<html>
  <head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <title>Test Page for the HTTP Server on Fedora</title>
    <style type="text/css">
      /*<![CDATA[*/

      html {
        height: 100%;
        width: 100%;
      }
        body {
[...]

Quản lý Container và Image

Podman ưu tiên chạy và quản lý container hiệu quả. Do đó, nó đi kèm với nhiều lệnh để theo dõi và vận hành container của bạn.

Các phần tiếp theo sẽ hướng dẫn một số thao tác hữu ích nhất của Podman và có thể giúp bạn tận dụng tối đa các thùng chứa của mình.

Danh sách Container

Những người làm việc với container thường có thể để một hoặc hai container, đôi khi là nhiều container chạy ẩn.

Để theo dõi các container này, bạn có thể sử dụng pslệnh Podman. Lệnh này liệt kê các container đang chạy trên hệ thống của bạn.

Ví dụ, nếu bạn đang trong quá trình chạy fedora-http-servercontainer được hiển thị ở trên, bạn có thể mong đợi những điều sau:

podman ps
CONTAINER ID  IMAGE                                COMMAND               CREATED        STATUS            PORTS                 NAMES
daadb647b880  localhost/fedora-http-server:latest  /usr/sbin/httpd -...  8 seconds ago  Up 8 seconds ago  0.0.0.0:8080->80/tcp  suspicious_goodall

Và nếu bạn muốn liệt kê tất cả các container, không chỉ những container đang chạy, bạn có thể thêm tùy -achọn vào lệnh:

podman ps -a

Đầu ra của lệnh này cũng bao gồm buildahlệnh được thực hiện bằng cách sử dụng podman runthêm ở trên:

CONTAINER ID  IMAGE                                COMMAND               CREATED             STATUS                     PORTS                 NAMES
db71818eda38  quay.io/buildah/stable:latest        buildah -v            12 minutes ago      Exited (0) 12 minutes ago                        exciting_kowalevski
daadb647b880  localhost/fedora-http-server:latest  /usr/sbin/httpd -...  About a minute ago  Up About a minute ago      0.0.0.0:8080->80/tcp  suspicious_goodall

Bắt đầu và dừng Container

Podman có thể kiểm soát riêng thời điểm dừng và khởi động container, sử dụng lệnh stopvà start, tương ứng. Mỗi lệnh này lấy ID container hoặc tên container làm đối số, cả hai đều có thể tìm thấy bằng pslệnh, như được hiển thị ở trên.

Ví dụ, bạn có thể dừng fedora-http-servervùng chứa ở trên bằng:

podman stop daadb647b880

Nếu container này được chạy mà không có --rmtùy chọn tự động xóa container khi nó ngừng chạy, bạn có thể khởi động lại container chỉ bằng cách:

podman start daadb647b880

Đối với bất kỳ lệnh nào, bạn có thể thay thế tên vùng chứa bằng ID của nó, như sau:

podman stop suspicious_goodall

Xóa một Container

Bạn có thể xóa thủ công một container bằng lệnh Podman rm, giống như lệnh stopvà start, lệnh này sẽ lấy ID hoặc tên container làm đối số.

podman rm daadb647b880

Tạo một Image từ một container

Podman có thể render một container thành một hình ảnh bằng commitlệnh. Lệnh này có thể được sử dụng để tạo thủ công một hình ảnh container đã cập nhật sau khi các thành phần đã được thêm vào, xóa khỏi hoặc sửa đổi trên một container.

Giống như các lệnh liên quan đến container khác, lệnh này lấy ID hoặc tên container làm đối số. Thực hành tốt nhất là bao gồm tên tác giả cùng với commit, thông qua tùy --authorchọn:

podman commit --author "Example User" daadb647b880

Như đã lưu ý trong phần trên về việc tạo hình ảnh bằng Podman, Buildah có xu hướng cung cấp nhiều tính năng và khả năng kiểm soát hơn khi tạo hình ảnh chứa. Nhưng Podman chắc chắn có khả năng trong nhiều trường hợp và có thể đủ để đáp ứng nhu cầu của bạn.

Phần kết luận

Podman không chỉ cung cấp một giải pháp thay thế đơn giản cho Docker mà còn là một công cụ chứa mạnh mẽ với sức nặng của các hoạt động an toàn, không cần root. Và với hướng dẫn này, bạn có những gì bạn cần để bắt đầu sử dụng Podman để chạy và quản lý các container của mình.

Tiếp tục tìm hiểu về các công cụ hiệu quả để làm việc với container thông qua các liên kết trên Podman, Buildah và Dockerfiles được cung cấp trong hướng dẫn này. Tiếp tục trau dồi kiến ​​thức về Podman của bạn thông qua các liên kết được cung cấp ở cuối hướng dẫn này.

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.