跳到主要内容

Podman的基本设置和使用

Podman是libpod库提供的一个实用工具,可以用来创建和维护容器。以下教程将教您如何设置Podman并执行一些基本的Podman命令。

如果您在Mac或Windows PC上运行,请按照Mac和Windows教程来设置远程Podman客户端。

注意:代码示例旨在以非root用户身份运行,并在需要root权限时使用sudo

安装Podman

要安装或构建Podman,请参阅安装说明

熟悉Podman

运行示例容器

这个示例容器将运行一个非常基本的httpd服务器(名为basic_httpd),它只提供其索引页面。

podman run --name basic_httpd -dt -p 8080:80/tcp docker.io/nginx

因为容器以分离模式运行,这在podman run命令中用-d表示,所以Podman在容器运行后将打印容器ID。请注意,我们使用端口转发来访问HTTP服务器。成功运行至少需要slirp4netns v0.3.0。

列出正在运行的容器

Podman的ps命令用于列出正在创建和运行的容器。

podman ps

通过这个命令,您可以查看当前正在运行的容器列表,包括它们的ID、名称、镜像、状态、创建时间等信息。如果您想查看包括已停止的容器在内的所有容器,可以使用podman ps -a命令。

停止并删除容器

如果您想停止并删除之前运行的basic_httpd容器,可以使用以下命令:

podman stop basic_httpd
podman rm basic_httpd

首先,podman stop命令会停止正在运行的容器。然后,podman rm命令会删除指定的容器。请注意,如果容器正在运行,您需要首先停止它才能删除。

Podman提供了许多其他有用的命令和功能,比如拉取镜像、构建镜像、执行容器内命令等。熟悉这些命令将帮助您更有效地使用Podman来管理和运行容器。

此外,Podman还支持多种存储后端和网络选项,允许您根据需要自定义容器的存储和网络设置。您可以通过查阅Podman的官方文档来了解更多高级功能和配置选项。

总之,Podman是一个强大的容器管理工具,它可以帮助您轻松创建、管理和运行容器。通过熟悉其基本命令和选项,您将能够更有效地使用Podman来构建和部署容器化应用程序。

注意:如果在ps命令后面添加-a,Podman将显示所有容器。

检查正在运行的容器

您可以“检查”正在运行的容器以获取其元数据和详细信息。我们甚至可以使用inspect子命令来查看分配给容器的IP地址。由于容器以无根模式运行,因此不会分配IP地址,并且inspect命令的输出中该值将列为“none”。

podman inspect basic_httpd | grep IPAddress\":
"SecondaryIPAddresses": null,
"IPAddress": "",

测试httpd服务器

由于我们没有容器的IP地址,因此可以使用curl测试主机操作系统与容器之间的网络通信。以下命令应显示我们容器化httpd服务器的索引页面。

curl http://localhost:8080

查看容器的日志

您还可以使用Podman查看容器的日志:

podman logs <container_id>
10.88.0.1 - - [07/Feb/2018:15:22:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"

查看容器的进程ID

您还可以使用top命令观察容器中的httpd进程ID。

podman top <container_id>
UID PID PPID C STIME TTY TIME CMD
0 31873 31863 0 09:21 ? 00:00:00 nginx: master process nginx -g daemon off;
101 31889 31873 0 09:21 ? 00:00:00 nginx: worker process

在这里,您可以看到容器内运行的nginx主进程和工作进程的PID。这有助于了解容器内部的进程情况,以及它们之间的父子关系。

容器检查点

检查点是一个将容器状态写入磁盘的过程,同时停止容器内所有进程的运行。通过这种方式,容器可以在之后被恢复,并从检查点开始继续运行,就好像时间从未停止一样。这个特性需要系统上安装有CRIU 3.11或更高版本。

请注意,这个特性在无根模式下是不支持的。因此,如果你想尝试它,你需要以root身份重新创建你的容器,使用相同的命令但加上sudo。

要创建容器的检查点,请使用:

console
sudo podman container checkpoint <container_id>

恢复容器

恢复容器只对之前已经创建过检查点的容器有效。恢复的容器将继续从它被检查点的时刻开始运行。 要恢复容器,请使用:

sudo podman container restore <container_id>

恢复后,容器将像检查点之前一样再次响应请求。

curl http://<IP_address>:8080

迁移容器

要从一个主机实时迁移到另一个主机,首先在源系统的迁移源上创建容器的检查点,然后将其传输到目标系统,最后在目标系统上恢复它。在传输检查点时,可以指定一个输出文件。

在源系统上:

sudo podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz  
scp /tmp/checkpoint.tar.gz <destination_system>:/tmp

在目标系统上:

sudo podman container restore -i /tmp/checkpoint.tar.gz

恢复后,容器将像检查点之前一样再次响应请求。此时,容器将继续在目标系统上运行。

curl http://<IP_address>:8080

请注意,在迁移过程中,确保目标系统上已安装并配置好Podman和所有必要的依赖项,以便能够成功地恢复容器。此外,由于网络配置和存储挂载等可能因环境而异,所以在迁移之前,请确保源系统和目标系统的环境尽可能一致,以避免潜在的问题。

停止容器

要停止httpd容器,请使用以下命令:

podman stop <container_id>

您还可以使用ps子命令来检查一个或多个容器的状态。在这种情况下,我们应该使用-a参数来列出所有容器。

podman ps -a

删除容器

要删除httpd容器,请使用以下命令:

podman rm <container_id>

您可以通过运行podman ps -a来验证容器是否已被删除。

集成测试

关于如何在您的环境中设置和运行集成测试的更多信息,请查看Integration Tests的README.md

更多信息

要了解更多关于Podman及其子命令的信息,请查看README.md页面上的asciiart演示。