Podman 介绍,安装,基本操作

本文介绍了Podman这一基于Linux系统的无守护进程容器引擎的基本概念、特点及其与Docker的主要区别,并详细讲解了Podman的安装方法、基本使用流程,包括创建和管理Pod的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Podman 介绍

在这里插入图片描述

What is Podman?

Podman 是一个基于 Linux 系统的 daemon-less 的容器引擎。 可以用来开发,管理和运行 OCI 标准的容器. podman可以运行在root或者非root用户模式。

Podman 是 Red Hat 在2018年推出的,源代码开放。

官方网站 https://podman.io/

OCI https://opencontainers.org/

和 docker 的区别

  • 最主要的区别是podman是Daemonless的,而Docker在执行任务的时候,必须依赖于后台的docker daemon(最主要的区别
  • podman不需要使用root用户或者root权限,所以更安全。(最主要的区别
  • podman可以创建pod,pod的概念和Kubernetes 里定义的pod类似
  • podman运行把镜像和容器存储在不同的地方,但是docker必须存储在docker engineer所在的本地
  • podman是传统的fork-exec 模式,而docker是 client-server 架构

框架区别

Docker架构
在这里插入图片描述

Podman架构
在这里插入图片描述

Podman 的安装

安装文档地址:https://podman.io/getting-started/installation

Podman是个Linux程序,不能在Windows上运行,但是可以运行客户端,发送到Linux服务端操作。

Windows 使用

‎Podman是一个运行Linux容器的工具。您可以从 Windows 桌面执行此操作,只要您有权访问在主机上的 VM 内运行或通过网络可用的 linux 机箱即可。您需要安装远程客户端,然后在 podman-remote.conf 文件中设置 ssh 连接信息。Podman也可以在Windows子系统Linux系统上运行,请查看下面的链接以查看如何完成此操作的说明。‎

远程客户端

Windows Subsystem for Linux (WSL) 2.0

Linux 发行版

Arch Linux & Manjaro Linux

sudo pacman -S podman

CentOS

‎Podman 在 CentOS 7 的默认 Extras 存储库中可用,在 CentOS 8 和 Stream 的 AppStream 存储库中可用。‎

sudo yum -y install podman

Debian

‎podman 软件包在 Debian 11 (Bullseye) 存储库及更高版本中可用。‎

sudo apt-get -y install podman

Ubuntu

podman 包在 Ubuntu 20.10 及更高版本的官方存储库中可用。

# Ubuntu 20.10 and newer
sudo apt-get -y update
sudo apt-get -y install podman

源码安装

仔细检查golang版本是否足够新(即2022年1月版本1.16)。需要x或更高。当前的最低要求版本总是可以在go中找到。mod文件。如果需要,golang套件可在https://golang.org/dl/.或者,go也可以从源代码构建,如下所示(保留系统go安装会很有帮助,以避免必须引导go:go版本)

export GOPATH=~/go
git clone https://go.googlesource.com/go $GOPATH
cd $GOPATH
cd src
./all.bash
export PATH=$GOPATH/bin:$PATH

首先,确保在$PATH上首先找到的值高于1.12.x。如果需要,上面的说明将帮助您编译更新版本的Go。然后我们就可以构建Podman:go版本了

git clone https://github.com/containers/podman/
cd podman
make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr

构建标签
除此以外,如果您不想使用seccompselinux支持构建Podman,可以在运行make时添加。BUILDTAGS=“”

make BUILDTAGS=""
sudo make install

快速上手

安装一个Nginx

docker的命令一样

甚至可以把podman的关键词,改成docker

启动Nginx容器

$ podman image pull docker.io/library/nginx 
Trying to pull docker.io/library/nginx...
Getting image source signatures
Copying blob 091c283c6a66 skipped: already exists  
Copying blob 55de5851019b skipped: already exists  
Copying blob 5eb5b503b376 skipped: already exists  
Copying blob 1ae07ab881bd skipped: already exists  
Copying blob 78091884b7be skipped: already exists  
Copying blob b559bad762be [--------------------------------------] 0.0b / 0.0b
Copying config c316d5a335 done  
Writing manifest to image destination
Storing signatures
c316d5a335a5cf324b0dc83b3da82d7608724769f6454f6d9a621f3ec2534a5a
$ podman image ls
REPOSITORY                TAG      IMAGE ID       CREATED        SIZE
docker.io/library/nginx   latest   c316d5a335a5   32 hours ago   146 MB
$ podman container run docker.io/library/nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/01/27 18:04:36 [notice] 1#1: using the "epoll" event method
2022/01/27 18:04:36 [notice] 1#1: nginx/1.21.6
2022/01/27 18:04:36 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) 
2022/01/27 18:04:36 [notice] 1#1: OS: Linux 3.10.0-693.11.1.el7.x86_64
2022/01/27 18:04:36 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/01/27 18:04:36 [notice] 1#1: start worker processes
2022/01/27 18:04:36 [notice] 1#1: start worker process 30

pod 基本操作

‎podman pod 是一组用于管理 pod 或容器组的子命令。‎

[root@python ~]$ podman pod --help
Manage pods

Description:
  Pods are a group of one or more containers sharing the same network, pid and ipc namespaces.

Usage:
  podman pod [command]

Available Commands:
  create      Create a new empty pod
  exists      Check if a pod exists in local storage
  inspect     Displays a pod configuration
  kill        Send the specified signal or SIGKILL to containers in pod
  pause       Pause one or more pods
  prune       Remove all stopped pods
  ps          List pods
  restart     Restart one or more pods
  rm          Remove one or more pods
  start       Start one or more pods
  stats       Display a live stream of resource usage statistics for the containers in one or more pods
  stop        Stop one or more pods
  top         Display the running processes of containers in a pod
  unpause     Unpause one or more pods

创建pod异常

遇到问题了!!!!解决了一下!

问题:创建pod的提示Error initializing source docker://k8s.gcr.io/pause:3.1: error pinging docker registry k8s.gcr.io: Get https://k8s.gcr.io/v2/: dial tcp 142.251.8.82:443: i/o timeout

$ podman pod create --name demo

ERRO[0060] Error freeing pod lock after failed creation: no such file or directory 
Error: unable to create pod: error adding Infra Container: unable to pull k8s.gcr.io/pause:3.1: unable to pull image: Error initializing source docker://k8s.gcr.io/pause:3.1: error pinging docker registry k8s.gcr.io: Get https://k8s.gcr.io/v2/: dial tcp 142.251.8.82:443: i/o timeout

解决方案:

$podman pull mirrorgcrio/pause:3.1 --log-level info
$podman images
REPOSITORY                        TAG     IMAGE ID      CREATED        SIZE
docker.io/mirrorgcrio/pause       3.2     80d28bedfe5d  7 months ago   686 kB

$podman tag docker.io/mirrorgcrio/pause:3.1 k8s.gcr.io/pause:3.1

$podman images
REPOSITORY                        TAG     IMAGE ID      CREATED        SIZE
docker.io/mirrorgcrio/pause       3.2     80d28bedfe5d  7 months ago   686 kB
k8s.gcr.io/pause                  3.2     80d28bedfe5d  7 months ago   686 kB

注意版本,提示错误是k8s.gcr.io/pause:3.1版本,下载的时候选择3.1版本,你可能遇到3.2就要下载3.2版本,不要搞错了!!!

创建pod

$ podman pod create --name demo
39cc7cb7b3383ad1b43a0b5ea06f753aac93f5f2be7e0e25ad5e516356c8a1a3

查看pod

$ podman pod ps
POD ID         NAME   STATUS    CREATED         # OF CONTAINERS   INFRA ID
39cc7cb7b338   demo   Created   2 minutes ago   1                 9a81250ff761
$ podman ps -a --pod
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS                     PORTS  NAMES               POD
9a81250ff761  docker.io/mirrorgcrio/pause:3.1                        3 minutes ago   Created                           39cc7cb7b338-infra  39cc7cb7b338

删除pod

$ podman pod rm test
29a584b91e21585c6620b2dad9dfc72f6aa2e23bdfd0729f8bc17a7b10508942

使用pod创建容器

$ podman container run -d --name test1 --pod demo nginx
9268ed827f529c0aa7f39f6e841f5675687709ea8f30011f648f4438ce165a4d
$ podman ps -a --pod
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS                     PORTS  NAMES               POD
9268ed827f52  docker.io/library/nginx:latest   nginx -g daemon o...  32 seconds ago  Up 32 seconds ago                 test1               39cc7cb7b338 
$ 

pod 网络

创建两容器,都使用同一个pod,进入容器之后,查看ip a

一个pod就是一个spacename命名空间。处于一个pod里面的容器,网络相同命名空间里面。
在这里插入图片描述

优势,处于同一个pod里面,可以通过本地网络地址通讯。
例如,test1是服务,test2是数据库,直接可以访问。

pod 启动与停止

停止

$ podman pod stop demo
39cc7cb7b3383ad1b43a0b5ea06f753aac93f5f2be7e0e25ad5e516356c8a1a3
$ podman ps -a
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS                     PORTS  NAMES
9268ed827f52  docker.io/library/nginx:latest   nginx -g daemon o...  11 minutes ago  Exited (0) 5 seconds ago          test1

启动

$ podman pod start demo
39cc7cb7b3383ad1b43a0b5ea06f753aac93f5f2be7e0e25ad5e516356c8a1a3
$ podman ps 
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS  NAMES
9268ed827f52  docker.io/library/nginx:latest  nginx -g daemon o...  12 minutes ago  Up 13 seconds ago         test1

可以看出来,pod停止后里面的容器也会随之停止,pod启动后里面的容器也会跟着启动!

### 如何在 Windows 上安装 Podman 容器引擎 #### 准备工作 为了成功安装并运行 Podman,在 Windows 操作系统上需先启用特定的功能。进入【控制面板】,导航至 【程序】下的【启动或关闭Windows功能】,确保勾选了【适用于Linux的Windows子系统(WSL)】、【虚拟机平台】以及【Windows Hypervisor Platform】这些选项[^1]。 #### 下载并配置 WSL 2 和 Linux 发行版 由于 Podman 需要在类 Unix 环境下执行,因此推荐使用 WSL 2 来作为底层支持环境。通过微软商店获取一个合适的 Linux 发行版(如 Ubuntu),这一步骤对于后续操作至关重要[^3]。 #### 设置 Podman 运行所需的依赖项 一旦选择了发行版之后,按照官方指引完成初始设置过程。打开该发行版终端窗口,并更新包列表;接着安装必要的软件包来保障 Podman 的正常运作: ```bash sudo apt-get update && sudo apt-get upgrade -y ``` #### 获取最新版本的 Podman 访问 [Podman GitHub Releases 页面](https://github.com/containers/podman/releases),下载针对目标系统的二进制文件或者遵循给定说明来进行编译构建。对于基于 Debian 或者 Ubuntu 的系统来说,可以直接利用 APT 存储库简化这一流程: ```bash # 添加 GPG 密钥 curl -fsSL https://getfedora.org/static/fedora.gpg | gpg --dearmor -o /usr/share/keyrings/fedora-archive-keyring.gpg # 创建 sources.list.d 中的 podman.list 文件 echo 'deb [signed-by=/usr/share/keyrings/fedora-archive-keyring.gpg] http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_$(lsb_release -rs)/ /' | \ sudo tee /etc/apt/sources.list.d/podman.list # 更新源并安装 Podman sudo apt-get update sudo apt install podman ``` #### 测试 Podman 是否正确安装 最后验证 Podman 已经被正确部署完毕,可以通过如下命令测试其基本功能是否可用: ```bash podman run hello-world ``` 如果一切顺利的话,则会看到一条来自镜像的消息表示 Podman 成功拉取并执行了一个简单的容器实例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小叶柏杉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值