使用 Podman 和 Skopeo 管理容器

Red Hat Enterprise LinuxBeginner
立即练习

介绍

作为一名使用 Red Hat Enterprise Linux (RHEL) 的系统管理员,管理容器化应用是一项基本技能。在本挑战中,你将使用命令行工具 podmanskopeo 来执行核心的容器管理任务。你将练习从公共仓库拉取镜像、将其作为容器运行、检查其配置,并将镜像复制到本地仓库。

拉取并运行容器镜像

你的第一个任务是从公共仓库下载一个容器镜像并在本地系统中运行它。你将使用 nginx Web 服务器镜像,这是演示容器功能的常用选择。

任务

  • 使用 podman 命令从 docker.io 仓库拉取最新的 nginx 容器镜像。
  • 基于 nginx 镜像运行一个容器,并验证其是否正常运行。

要求

  • nginx 容器必须命名为 my-nginx
  • 容器必须在后台运行(分离模式)。
  • 容器的 80 端口必须映射到本地机器的 8080 端口。

示例

成功运行容器后,你可以测试其可访问性。执行 curl 命令应返回 Nginx 的默认欢迎页面。

$ curl http://localhost:8080

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>
✨ 查看解决方案并练习

检查容器

运行容器后,你经常需要获取有关其配置、网络设置和挂载卷的详细信息。podman inspect 命令以结构化的 JSON 格式提供这些信息。

任务

  • 检查正在运行的 my-nginx 容器。
  • 将检查结果的输出重定向到一个文件。

要求

  • 使用 podman inspect 命令获取 my-nginx 容器的详细信息。
  • 将 JSON 输出保存到 ~/project/containers/ 目录中名为 nginx-inspect.json 的文件中。

示例

nginx-inspect.json 文件将包含一个庞大的 JSON 数组,其中记录了容器的所有配置细节。你可以使用 catless 命令查看其内容。

$ cat ~/project/containers/nginx-inspect.json
[
    {
        "Id": "a933dd...c8e",
        "Created": "2023-10-27T10:30:00.123456789Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
...
✨ 查看解决方案并练习

使用 Skopeo 复制容器镜像

skopeo 是一个功能强大的工具,用于在不同类型的存储之间移动容器镜像,例如公共仓库、本地存储和私有仓库。在此步骤中,你将把 nginx 镜像复制到运行在本地机器上的本地容器仓库中。

默认情况下,Podman 和 Skopeo 不会将镜像推送到不安全(HTTP)的仓库。你必须先使用现代的 v2 仓库配置格式,将系统配置为信任该本地仓库。

任务

  • 配置你的系统,允许将镜像推送到位于 localhost:5000 的不安全本地仓库。
  • 使用 skopeonginx:latest 镜像从 docker.io 复制到你的本地仓库。
  • 从本地仓库将镜像拉取到 Podman 的本地存储中,以验证复制是否成功。

要求

  • 编辑 /etc/containers/registries.conf 文件,使用 v2 格式将 localhost:5000 配置为不安全仓库。你需要 sudo 权限来执行此操作。
  • 使用 skopeo copy 复制 docker.io/library/nginx:latest 镜像。
  • 镜像在本地仓库中的目标位置应为 localhost:5000/my-local-nginx:latest
  • 复制完成后,使用 podman pull 获取 localhost:5000/my-local-nginx:latest
✨ 查看解决方案并练习

总结

通过本次挑战,你掌握了在 Red Hat Enterprise Linux 系统上管理容器的核心技能。你成功使用 podman 拉取了镜像,将其作为具有端口映射的命名容器运行,并检查了其详细配置。此外,你还练习了一项关键的实战任务:配置不安全仓库,并使用 skopeo 将镜像从公共源复制到私有的本地仓库。这些命令是任何在现代容器化环境中工作的系统管理员必备的基础工具。