Podman là một nền tảng container mã nguồn mở và miễn phí được xây dựng để phát triển, quản lý và triển khai các container và pod trên môi trường Linux. Redhat đã phát triển Podman vào năm 2018. Đây là một công cụ container hóa hoạt động khác với Docker. Podman không phụ thuộc vào daemon để hoạt động, không giống như Docker sử dụng Docker CLI và daemon Docker. Phụ thuộc vào daemon dẫn đến một điểm lỗi duy nhất.
Podman được thiết kế theo tiêu chuẩn OCI (Sáng kiến container mở) cho phép Podman tương tác trực tiếp với kernel, container và image. Nó cũng an toàn hơn Docker vì không yêu cầu quyền truy cập root. Podman có thể được sử dụng để thay thế Docker vì cả hai đều tuân thủ OCI.
Bài viết này sẽ chỉ cho bạn cách cài đặt Podman và sử dụng nó để tạo và quản lý hình ảnh và vùng chứa.
Cài đặt Podman bằng lệnh dnf module.
Kiểm tra phiên bản Podman để xem nó đã được cài đặt đúng chưa.
Trong đầu ra, bạn sẽ thấy tên của sổ đăng ký mà hình ảnh đến từ đó và mô tả về hình ảnh.
Để tải xuống hình ảnh, hãy sử dụng một trong các lệnh sau.
Bạn có thể xem các hình ảnh đã tải xuống thông qua lệnh sau.
Chúng ta có thể sử dụng cùng một hình ảnh để khởi chạy một container khác có tên khác.
Chúng ta có thể khởi chạy số lượng container không giới hạn bằng cùng một hình ảnh.
Dừng container đang chạy.
Kiểm tra xem container đã dừng chưa.
Để liệt kê tất cả các container, bao gồm cả các container đã dừng, bạn cần sử dụng cờ -a.
Kiểm tra xem nó đã khởi động chưa.
Xóa container.
Bạn có thể xóa một container đang chạy bằng cách sử dụng cờ --force.
Sử dụng lệnh sau để giết container.
Lệnh trên sử dụng tùy chọn SIGNAL 9 (SIGKILL) để giết container.
Để giết tất cả các container, hãy sử dụng cờ --all hoặc -a và để chỉ giết container mới nhất, hãy sử dụng cờ --latest hoặc -l.
Bạn có thể xóa nhiều hình ảnh bằng cách phân tách chúng bằng dấu phẩy.
Để xóa tất cả hình ảnh trên hệ thống của bạn, hãy sử dụng cờ -a.
Bạn có thể giới hạn nhật ký ở 5 dòng cuối cùng bằng cách sử dụng tùy chọn --tail.
Theo mặc định, bạn sẽ không nhận được bất kỳ dấu thời gian nào trên nhật ký. Sử dụng cờ -t để thêm dấu thời gian vào nhật ký của bạn.
Lệnh mặc định sẽ in ra một đầu ra dài ở định dạng JSON. Để lọc đầu ra, bạn cần sử dụng tùy chọn --format. Để tìm hiểu thời điểm container được khởi động, hãy chạy lệnh sau.
Để tạo một Pod, hãy sử dụng lệnh sau.
Thêm các Container vào pod mới tạo.
Bây giờ bạn có thể quản lý các container bằng các lệnh một dòng đơn giản.
Podman được thiết kế theo tiêu chuẩn OCI (Sáng kiến container mở) cho phép Podman tương tác trực tiếp với kernel, container và image. Nó cũng an toàn hơn Docker vì không yêu cầu quyền truy cập root. Podman có thể được sử dụng để thay thế Docker vì cả hai đều tuân thủ OCI.
Bài viết này sẽ chỉ cho bạn cách cài đặt Podman và sử dụng nó để tạo và quản lý hình ảnh và vùng chứa.
Điều kiện tiên quyết
-
Máy chủ chạy Rocky Linux
-
Người dùng không dùng sudo có quyền root.
-
Đảm bảo máy chủ được cập nhật.
Mã:$ sudo dnf update
Cài đặt Podman
Podman được bao gồm trong mô-đun container-tools, cùng với Buildah và Skopeo. Nó cũng có sẵn trong kho lưu trữ AppStream cho Rocky Linux 8. Chúng tôi sẽ sử dụng phương pháp module.Cài đặt Podman bằng lệnh dnf module.
Mã:
$ sudo dnf module install container-tools
Mã:
$ podman --versionpodman version 3.2.3
Tìm kiếm và tải xuống hình ảnh container
Để tìm kiếm hình ảnh của Nginx, hãy sử dụng lệnh sau.
Mã:
$ podman search nginx
Trong đầu ra, bạn sẽ thấy tên của sổ đăng ký mà hình ảnh đến từ đó và mô tả về hình ảnh.
Để tải xuống hình ảnh, hãy sử dụng một trong các lệnh sau.
Mã:
$ podman pull docker.io/library/nginxHOẶC$ podman pull nginx
Mã:
$ podman imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/library/nginx mới nhất f8f4ffc8092c 3 ngày trước 138 MB
Chạy Container
Sử dụng lệnh sau để chạy container bằng hình ảnh Nginx. Chúng tôi đã đặt tên cho container là webserver.
Mã:
$ podman run -d --name webserver nginx
Mã:
$ podman run -d --name webserver2 nginx
Liệt kê và dừng các container
Để liệt kê tất cả các container đang chạy, hãy sử dụng lệnh sau.
Mã:
$ podman psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 giây trước Đã lên 31 giây trước webserver35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 giây trước Lên 3 giây trước webserver2
Mã:
$ podman stop webserverwebserver
Mã:
$ podman psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... Khoảng một phút trước Lên Khoảng một phút trước webserver2
Mã:
$ podman ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS TÊN19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 phút trước Đã thoát (0) 35 giây trước webserver35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... Khoảng một phút trước Đã lên Khoảng một phút trước webserver2
Khởi động một Container đã dừng
Sử dụng lệnh sau để khởi động một container đã dừng.
Mã:
$ podman start webserverwebserver
Mã:
$ podman psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS TÊN19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 phút trước Đã lên 16 giây trước webserver35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 phút trước Đã lên 2 phút trước webserver2
Xóa Container
Bạn cần dừng một container trước khi xóa nó.
Mã:
$ podman stop webserver2
Mã:
$ podman rm webserver2
Mã:
$ podman rm webserver2 --force35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Kill Container
Dừng và Giết một Container là hai việc khác nhau nhưng cuối cùng đều đạt được cùng một mục đích. Sự khác biệt là việc Dừng một container sẽ tắt container một cách bình thường trong khi Giết một container sẽ kết thúc container một cách cưỡng bức, dẫn đến mất dữ liệu.Sử dụng lệnh sau để giết container.
Mã:
$ podman kill -s 9 webserver2
Để giết tất cả các container, hãy sử dụng cờ --all hoặc -a và để chỉ giết container mới nhất, hãy sử dụng cờ --latest hoặc -l.
Xóa hình ảnh
Bạn có thể xóa hình ảnh bằng lệnh rmi.
Mã:
$ podman rmi registry.redhat.io/rhel8/rsyslog
Mã:
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Mã:
$ podman rmi -a
Xem Nhật ký Container
Để xem nhật ký container, hãy sử dụng lệnh sau.
Mã:
$ podman logs webserver/docker-entrypoint.sh: /docker-entrypoint.d/ không trống, sẽ cố gắng thực hiện cấu hình/docker-entrypoint.sh: Đang tìm kiếm các tập lệnh shell trong /docker-entrypoint.d//docker-entrypoint.sh: Đang khởi chạy /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh10-listen-on-ipv6-by-default.sh: info: Nhận tổng kiểm tra của /etc/nginx/conf.d/default.conf10-listen-on-ipv6-by-default.sh: info: Đã bật lắng nghe trên IPv6 trong /etc/nginx/conf.d/default.conf/docker-entrypoint.sh: Đang khởi chạy /docker-entrypoint.d/20-envsubst-on-templates.sh/docker-entrypoint.sh: Đang khởi chạy /docker-entrypoint.d/30-tune-worker-processes.sh/docker-entrypoint.sh: Cấu hình hoàn tất; sẵn sàng để khởi động......
Mã:
$ podman logs --tail=5 webserver2021/10/05 10:13:52 [thông báo] 1#1: được xây dựng bởi gcc 8.3.0 (Debian 8.3.0-6)2021/10/05 10:13:52 [thông báo] 1#1: HĐH: Linux 4.18.0-305.19.1.el8_4.x86_642021/10/05 10:13:52 [thông báo] 1#1: getrlimit(RLIMIT_NOFILE): 262144:2621442021/10/05 10:13:52 [thông báo] 1#1: bắt đầu quy trình công nhân2021/10/05 10:13:52 [thông báo] 1#1: bắt đầu quy trình công nhân 23
Mã:
$ podman logs -t webserver2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ không trống, sẽ cố gắng thực hiện cấu hình2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Đang tìm kiếm tập lệnh shell trong /docker-entrypoint.d/2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Đang khởi chạy /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Nhận tổng kiểm tra của /etc/nginx/conf.d/default.conf2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Đã bật lắng nghe trên IPv6 trong /etc/nginx/conf.d/default.conf.....
Kiểm tra Container
Kiểm tra một container sẽ in thông tin về container đó.
Mã:
$ podman inspect webserver[ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423,....
Mã:
$ podman inspect webserver --format '{{.State.StartedAt}}'2021-10-05 10:13:52.794806322 +0000 UTC
Truy cập Container Shell
Bạn có thể truy cập dấu nhắc Shell của bất kỳ container nào bằng tùy chọn exec.
Mã:
$ podman exec -it webserver2 /bin/bash
Pods
Podman có một tính năng độc đáo mà Docker không có. Podman có thể tạo Pods từ các container hoạt động cùng nhau. Tính năng này cho phép bạn quản lý nhiều container cùng lúc.Để tạo một Pod, hãy sử dụng lệnh sau.
Mã:
$ podman pod create --name mypod
Mã:
$ podman run --pod mypod --name myimage1 image:latest$ podman run --pod mypod --name myimage2 diff-image:latest
Mã:
$ podman kill mypod # Giết tất cả các container$ podman restart mypod # Khởi động lại tất cả các container$ podman stop mypod # Dừng tất cả các container$ podman pod ps # Liệt kê tất cả các pod$ podman pod top mypod # Hiển thị các tiến trình đang chạy trong một pod$ podman pod inspect mypod # Kiểm tra một Pod$ podman pod rm mypod # Xóa pod