千家信息网

podman初试-和docker对比

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,podman初试-和docker对比1,什么是docker?Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单易用的容器使用接口,让开发者可以打包他们的应
千家信息网最后更新 2026年11月02日podman初试-和docker对比

podman初试-和docker对比

1,什么是docker?

Docker 是一个开源的应用容器引擎,属于 Linux 容器的一种封装,Docker 提供简单易用的容器使用接口,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。容器是完全使用沙箱机制,相互之间不会有任何接口。

2,什么是Podman?

Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。

  1. Podman 官网地址:https://podman.io/
  2. Podman 项目地址:https://github.com/containers/libpod

3,Podman 和docker不同之处?

  1. docker 需要在我们的系统上运行一个守护进程(docker daemon),而podman 不需要
  2. 启动容器的方式不同:
    docker cli 命令通过API跟 Docker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLI的child process(子进程),而是Docker Engine的child process。
    Podman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podman的child process。
  3. 因为docke有docker daemon,所以docker启动的容器支持--restart策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动
  4. docker需要使用root用户来创建容器,但是podman不需要

4,podman的安装

4.1,Arch Linux & Manjaro Linux

sudo pacman -S podman

4.2,Fedora,Centos

sudo yum -y install podman

4.3,Gentoo

sudo emerge app-emulation/libpod

4.4,MacOS

brew cask install podman

5,Podman CLI介绍

Podman CLI 里面87%的指令都和DOcker CLI 相同,官方给出了这么个例子alias docker=podman,所以说经常使用DOcker CLI的人使用podman上手非常快

运行一个容器

podman run -dt -p 80:80 --name nginx -v /data:/data -e NGINX_VERSION=1.16 nginx:1.16.0

列出当前所有的容器

# podman  ps -aCONTAINER ID  IMAGE                                       COMMAND               CREATED            STATUS             PORTS               NAMES19f105d5dc1e  docker.io/library/nginx:1.16.0              nginx -g daemon o...  2 minutes ago      Up 2 minutes ago   0.0.0.0:80->80/tcp  nginx

查看一个镜像信息

# podman inspect nginx  | grep -i "ipaddress"            "SecondaryIPAddresses": null,            "IPAddress": "10.88.0.110",

查看容器运行的日志

podman logs   nginx

查看运行中容器资源使用情况

# podman  top nginxUSER    PID   PPID   %CPU    ELAPSED           TTY     TIME   COMMANDroot    1     0      0.000   5m26.420969043s   pts/0   0s     nginx: master process nginx -g daemon off;nginx   6     1      0.000   5m26.421085502s   pts/0   0s     nginx: worker process# podman  stats nginxID             NAME    CPU %   MEM USAGE / LIMIT   MEM %   NET IO           BLOCK IO   PIDS19f105d5dc1e   nginx   --      2.036MB / 1.893GB   0.11%   978B / 10.55kB   -- / --    2

迁移容器

Podman 支持将容器从一台机器迁移到另一台机器。
首先,在源机器上对容器设置检查点,并将容器打包到指定位置。

$ sudo podman container checkpoint  -e /tmp/checkpoint.tar.gz$ scp /tmp/checkpoint.tar.gz :/tmp

其次,在目标机器上使用源机器上传输过来的打包文件对容器进行恢复。

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

podman的程序如何设置自启动

由于 Podman 不再使用守护进程管理服务,所以不能通过守护进程去实现自动重启容器的功能。那如果要实现开机自动重启容器,又该如何实现呢?
其实方法很简单,现在大多数系统都已经采用 Systemd 作为守护进程管理工具。这里我们就可以使用 Systemd 来实现 Podman 开机重启容器,这里我们以刚才启动的nginx为例。
建立一个 Systemd 服务配置文件。

$ vim /etc/systemd/system/nginx_podman.service[Unit]Description=Podman Nginx ServiceAfter=network.targetAfter=network-online.target[Service]Type=simpleExecStart=/usr/bin/podman start -a nginxExecStop=/usr/bin/podman stop -t 10 nginxRestart=always[Install]WantedBy=multi-user.target

接下来,启用这个 Systemd 服务

$ sudo systemctl daemon-reload$ sudo systemctl enable nginx_podman.service$ sudo systemctl start nginx_podman.service

之后每次系统重启后 Systemd 都会自动启动这个服务所对应的容器,容器死亡之后也会启动这个容器,我们可以用下面的例子做测试
打一个sleep 30的docker包,这个容器运行起来一次只能坚持30s

$ vim DockerfileFROM busybox:latestCMD ["sh","-c","sleep 30"]

然后按照上述方式设置启动自启动

演示下Podman 下启动的容器为Podman的子进程

我们刚才启动了一个nginx的podman 现在我们来看一下他的进程

# ps -ef | grep [n]ginxroot     19368 19359  0 11:38 pts/0    00:00:00 nginx: master process nginx -g daemon off;101      19381 19368  0 11:38 pts/0    00:00:00 nginx: worker process

然后查看这个nginx的父进程是那个

# ps -ef | grep 19359root     19359     1  0 11:38 ?        00:00:00 /usr/libexec/podman/conmon 。。。。

所以验证了我上面的说法

容器 进程 运行 机器 系统 服务 管理 镜像 支持 不同 例子 功能 命令 地址 引擎 情况 接口 文件 方式 策略 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 盈实互联网科技 互联网医疗科技 互联网科技金融公司 互联网科技的未来发展 甘肃拓世互联网科技有限公司 农村开互联网科技讲堂 江苏南京365互联网科技 互联网教育科技公司vipkid 互联网企业和科技型企业 江阴互联网智能科技产品进口 链环科技传统企业怎么转型互联网 工业互联网等科技实现智能化赋能 科技互联网的核心竞争力 领航科技大厦互联网公司 半导体行业属于互联网高科技类吗 山东大美朱楼互联网科技有限公司 信承诺互联网科技有限公司 安徽零酒互联网科技有限公司 互联网科技大会大佬 科技美学互联网 艺术 有格互联网科技 互联网通讯科技 语蝶互联网科技有限公司 民营互联网公司国防科技 浙南科技城互联网大厦建设工程 元气玛特互联网科技公司是外包吗 互联网科技实习生岗位 东营紫格互联网科技 悟空问答互联网科技 科技和互联网行业的特点
0