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
- 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.
- Hướng dẫn này sử dụng
sudo
bấ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. - 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ớisudo
lệ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 sudo
mở đầ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 slirp4netns
các fuse-overlayfs
cô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 subuids
và subgids
phạ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 65535
ID:
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.conf
tệ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.conf
tệ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 pull
theo 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.io
sổ đă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 -t
cho phép bạn đặt thẻ hoặc tên cho hình ảnh – fedora-http-server
trong 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 build
hoạ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 buildah
lệnh trên container kết quả:
podman run buildah buildah -v
Có tùy -v
chọ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-server
ví 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 -p
chọn được đưa ra ở đây sẽ xuất bản cổng của container 80
tới cổng của máy cục bộ 8080
, trong khi --rm
tù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 ps
lệ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-server
container đượ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 -a
chọn vào lệnh:
podman ps -a
Đầu ra của lệnh này cũng bao gồm buildah
lệnh được thực hiện bằng cách sử dụng podman run
thê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 stop
và 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 ps
lệnh, như được hiển thị ở trên.
Ví dụ, bạn có thể dừng fedora-http-server
vùng chứa ở trên bằng:
podman stop daadb647b880
Nếu container này được chạy mà không có --rm
tù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 stop
và 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 commit
lệ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 --author
chọ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.
- Podman: Bắt đầu với Podman
- Nhà phát triển Red Hat: Podman Basics: Tài nguyên cho người mới bắt đầu và chuyên gia
- Nhà phát triển Red Hat: Podman và Buildah dành cho người dùng Docker
- phoenixNAP: Cài đặt Podman trên Ubuntu