前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Podman 从入门到精通

Podman 从入门到精通

作者头像
我的小碗汤
发布2023-03-19 17:47:35
2.2K0
发布2023-03-19 17:47:35
举报
文章被收录于专栏:我的小碗汤我的小碗汤

1. 前言

在本文中,我们将了解 PodmanPod Manager的缩写)、它的功能和用法。

2. Podman

Podman 是一个开源的容器管理工具,用于开发、管理和运行OCI容器。让我们来看看与其他容器管理工具相比, Podman 的一些优势,

  • Podman 创建的镜像与其他容器管理工具兼容。Podman 创建的镜像遵循 OCI 标准,因此可以推送到其他容器注册中心,如 Docker Hub
  • 它可以作为普通用户运行,无需 root 权限。 当以非 root 用户身份运行时,Podman 创建一个用户命名空间,在其中获取 root 权限。这允许它挂载文件系统并设置所需的容器
  • 它提供了管理 pod 的能力。 与其他容器运行时工具不同,Podman 允许用户管理 pod(一个或多个为一组一起运行的容器)。用户可以对 Pod 执行创建、列出、检查等操作

但是,Podman 有一定的局限性:

  • 它仅在基于 Linux 的系统上运行。 目前,Podman 仅在基于 Linux 的操作系统上运行,并且没有针对 Windows 和 macOS 的包装器。
  • 没有 Docker Compose 的替代品。 Podman 不支持在本地管理多个容器,类似于 Docker Compose 所做的。作为 podman-compose 项目的一部分,正在开发使用 Podman 后端的 Docker Compose 实现,但这仍在进行中。

3. 与 Docker 的比较

现在我们已经了解了 Podman 是什么,以及它的优点和局限性,让我们将它与使用最广泛的容器管理工具之一的 Docker 进行比较。

3.1 命令行界面 (CLI)

Podman 提供了 Docker 客户端公开的相同命令集。换句话说,这两个实用程序的命令之间存在一对一的映射。

但是,像podman pspodman images这样的命令不会显示使用 Docker 创建的容器或镜像。这是因为 Podman 的本地存储库是/var/lib/containers,而不是 Docker 维护的/var/lib/docker

3.2. 容器模型

Docker 对容器使用客户端-服务器架构,而 Podman 使用 Linux 进程中常见的传统 fork-exec 模型。使用 Podman 创建的容器是父 Podman 进程的子进程。这就是为什么当同时为 Docker 和 Podman 运行 version 命令时,Docker 列出了客户端和服务器的版本,而 Podman 只列出了它的版本。

docker version 的示例输出:

代码语言:javascript
复制
Client:
 Version:       17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:11:19 2017
 OS/Arch:       linux/amd64

Server:
 Engine:
  Version:      17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:        Wed Dec 27 20:09:53 2017
  OS/Arch:      linux/amd64
  Experimental: false

podman version 的示例输出:

代码语言:javascript
复制
Version:       0.3.2-dev
Go Version:    go1.9.4
Git Commit:    "4f4a78abb40fa0e8407e8a55d5a67a2650d8fd96"
Built:         Mon Mar  5 11:10:35 2018
OS/Arch:       linux/amd64

由于 Podman 本身作为进程运行,因此它不需要任何后台守护进程。与 Podman 不同,Docker 需要一个守护进程 Docker daemon 来协调客户端和服务器之间的 API 请求

3.3. 无需 Root

如前所述,Podman 不需要 root 访问权限来运行其命令。另一方面,Docker 依赖于守护进程,需要 root 权限或要求用户成为docker 的一部分才能在没有 root 权限的情况下运行 Docker 命令。

代码语言:javascript
复制
$ sudo usermod -aG docker $USER

4. 安装使用

让我们从安装 Podman开始。podman info命令显示 Podman 系统信息并帮助检查安装状态。

代码语言:javascript
复制
$ podman info

此命令显示与主机相关的信息,例如内核版本、已使用和可用的交换空间,以及与 Podman 相关的信息,例如它有权将镜像拉取和推送到的注册表、它使用的存储驱动程序、存储位置等:

代码语言:javascript
复制
host:
  MemFree: 546578432
  MemTotal: 1040318464
  SwapFree: 4216320000
  SwapTotal: 4216320000
  arch: amd64
  cpus: 2
  hostname: base-xenial
  kernel: 4.4.0-116-generic
  os: linux
  uptime: 1m 2.64s
insecure registries:
  registries: []
registries:
  registries:
  - docker.io
  - registry.fedoraproject.org
  - registry.access.redhat.com
store:
  ContainerStore:
    number: 0
  GraphDriverName: overlay
  GraphOptions: null
  GraphRoot: /var/lib/containers/storage
  GraphStatus:
    Backing Filesystem: extfs
    Native Overlay Diff: "true"
    Supports d_type: "true"
  ImageStore:
    number: 0
  RunRoot: /var/run/containers/storage

让我们看一下一些基本的 Podman 命令。

4.1. 创建镜像

首先,我们将看看使用 Podman 创建镜像。让我们首先创建一个包含以下内容的 Dockerfile

代码语言:javascript
复制
FROM centos:latest
RUN yum -y install httpd
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
EXPOSE 80

现在让我们使用 build 命令创建镜像:

代码语言:javascript
复制
$ podman build .

在这里,我们首先拉取 CentOS 的基本镜像,在其上安装 Apache,然后将其作为前台进程运行,并暴露端口 80。我们可以通过运行这个镜像并将暴露的端口映射到主机端口来访问 Apache 服务器。

build 命令递归地传递上下文目录中可用的所有文件夹。当没有指定目录时,当前工作目录默认成为构建上下文。因此,建议不要在上下文目录中包含创建镜像不需要的文件和文件夹

4.2. 列出可用镜像

podman images命令列出所有可用的镜像。它还支持过滤镜像的各种选项

代码语言:javascript
复制
$ podman images

此命令列出本地存储库中可用的所有镜像。它包含有关从哪个存储库中提取镜像、标签、其镜像 ID、创建时间和大小的信息。

代码语言:javascript
复制
REPOSITORY                 TAG      IMAGE ID         CREATED         SIZE
docker.io/library/centos   latest  0f3e07c0138f    2 months ago      227MB
<none>                     <none   49030e844ce7   27 seconds ago     277MB

4.3. 运行镜像

podman run 命令创建指定镜像的容器,然后运行它。让我们运行上面创建的 CentOS 镜像

代码语言:javascript
复制
$ podman run  -p 80:80 -dit centos

此命令首先检查是否有可用于 CentOS 的本地镜像。如果镜像不在本地,它会尝试从配置的注册表中拉取镜像。如果镜像不存在于注册表中,则会显示有关无法找到镜像的错误。

上面的 run 命令指定将容器暴露的 80 端口映射到主机的 80 端口,-dit 标志指定以分离和交互模式运行容器。创建的容器的 id 将作为输出。

4.4. 删除镜像

podman rmi 命令删除本地存储库中存在的镜像。可以通过在输入中提供以空格分隔的 ID 来删除多个镜像。指定 -a 标志会删除所有镜像

代码语言:javascript
复制
$ podman rmi 785188cd988c

4.5. 列出容器

可以使用 podman ps -a 命令列出所有可用容器,包括未运行的容器。与 podman images 命令类似,它也可以与各种选项一起使用。

代码语言:javascript
复制
$ podman ps -a

上述命令的输出列出了所有容器的信息,例如创建它的镜像、启动命令、状态、正在运行的端口以及名称。

代码语言:javascript
复制
CONTAINER ID   IMAGE    COMMAND     CREATED AT                      STATUS              PORTS                                    NAMES
eed30719cd37   centos   /bin/bash   2019-12-09 02:57:37 +0000 UTC   Up 14 minutes ago   0.0.0.0:80->80/udp, 0.0.0.0:80->80/tcp   reverent_liskov

4.6. 删除容器

podman rm 命令删除容器。此命令不会删除处于运行或暂停状态的容器。需要先停止,然后再移除。

代码语言:javascript
复制
$ podman stop eed30719cd37

$ podman rm eed30719cd37

4.7. 创建 Pod

podman pod create 命令创建一个 podcreate 命令支持不同的选项。

代码语言:javascript
复制
$ podman pod create

pod create 命令默认创建一个带有 infra 容器的 pod,除非明确将 infra 标志设置为 false。

代码语言:javascript
复制
$ podman pod create --infra = false

Infra container 允许 Podman 连接 pod 中的各种容器。

4.8. 列出 Pod

podman pod list 命令显示所有可用的 pod

代码语言:javascript
复制
$ podman pod list

此命令的输出会显示 pod id、名称、关联容器的数量、infra 容器的 id 等信息:

代码语言:javascript
复制
POD ID         NAME             STATUS      CREATED       # OF CONTAINERS   INFRA ID
7e0a68528aed   gallant_raman    Running    5 seconds ago        1           c6d06673c667

所有 Podman 命令及其用法可以在官方文档中找到。

5. 总结

在本文中,我们了解了 Podman 的基础知识及其功能、与 Docker 的比较以及一些可用的命令。

- END -

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-16,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. Podman
  • 3. 与 Docker 的比较
    • 3.1 命令行界面 (CLI)
      • 3.2. 容器模型
        • 3.3. 无需 Root
        • 4. 安装使用
          • 4.1. 创建镜像
            • 4.2. 列出可用镜像
              • 4.3. 运行镜像
                • 4.4. 删除镜像
                  • 4.5. 列出容器
                    • 4.6. 删除容器
                      • 4.7. 创建 Pod
                        • 4.8. 列出 Pod
                        • 5. 总结
                        相关产品与服务
                        容器镜像服务
                        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                        http://www.vxiaotou.com