
Podman 是 libpod 库提供的一项实用工具。它可用于创建和维护容器。下面的教程将教你如何设置 Podman 以及使用 Podman 执行一些基本命令。
若您使用的是 Mac 或 Windows 电脑,则应遵循 Mac 和 Windows 教程来设置远程 Podman 客户端。
注意:代码示例旨在以非root用户身份运行,并在需要root权限提升时使用sudo命令。
有关安装或构建 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
注意:如果在ps命令后添加-a,Podman将显示所有容器。
你可以“检查”正在运行的容器,以获取其元数据和详细信息。我们甚至可以使用 inspect 子命令查看分配给容器的 IP 地址。由于容器是以无 root 模式运行的,因此不会分配 IP 地址,在 inspect 的输出中该值将显示为“none”。
podman inspect basic_httpd | grep IPAddress\": "SecondaryIPAddresses": null, "IPAddress": "",
由于我们没有容器的IP地址,我们可以使用 curl 来测试主机操作系统和容器之间的网络通信。以下命令应该会显示我们容器化的 httpd 服务器的索引页面。
curl http://localhost:8080
你也可以使用 Podman logs 查看容器的日志:
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" "-"
而且你可以使用 podman 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
为容器创建检查点会停止容器,同时将容器中所有进程的状态写入磁盘。通过这种方式,容器之后可以被恢复,并从检查点的确切时间点继续运行。此功能需要系统上安装CRIU 3.11或更高版本。该功能不支持无root权限模式;因此,如果你想尝试使用它,需要以root用户身份重新创建容器,使用相同的命令但要加上sudo。
要为容器创建检查点,请使用:
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
停止 httpd 容器:
podman stop <container_id>
你也可以使用ps子命令查看一个或多个容器的状态。在这种情况下,我们应该使用-a参数来列出所有容器。
podman ps -a
要移除 httpd 容器:
podman rm <container_id>
你可以通过运行 podman ps -a 来验证容器是否已删除。
有关如何在您的环境中设置和运行集成测试的更多信息,请查看《集成测试 README.md》。
有关 Podman 及其子命令的更多信息,请查看 README.md。
原文地址:https://github.com/containers/podman/blob/main/docs/tutorials/podman_tutorial.md