前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >podman初试-和docker对比

podman初试-和docker对比

作者头像
张琳兮
发布于 2019-11-07 11:44:07
发布于 2019-11-07 11:44:07
7.3K00
代码可运行
举报
文章被收录于专栏:首富手记首富手记
运行总次数:0
代码可运行

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 命令通过APIDocker Engine(引擎)交互告诉它我想创建一个container,然后docker Engine才会调用OCI container runtime(runc)来启动一个container。这代表container的process(进程)不会是Docker CLIchild process(子进程),而是Docker Enginechild processPodman是直接给OCI containner runtime(runc)进行交互来创建container的,所以container process直接是podmanchild process
  3. 因为docke有docker daemon,所以docker启动的容器支持--restart策略,但是podman不支持,如果在k8s中就不存在这个问题,我们可以设置pod的重启策略,在系统中我们可以采用编写systemd服务来完成自启动
  4. docker需要使用root用户来创建容器,但是podman不需要

4,podman的安装

4.1,Arch Linux & Manjaro Linux

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo pacman -S podman

4.2,Fedora,Centos

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum -y install podman

4.3,Gentoo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo emerge app-emulation/libpod

4.4,MacOS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
brew cask install podman

5,Podman CLI介绍

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

运行一个容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
podman run -dt -p 80:80 --name nginx -v /data:/data -e NGINX_VERSION=1.16 nginx:1.16.0

列出当前所有的容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# podman  ps -a
CONTAINER ID  IMAGE                                       COMMAND               CREATED            STATUS             PORTS               NAMES
19f105d5dc1e  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

查看一个镜像信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# podman inspect nginx  | grep -i "ipaddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "10.88.0.110",

查看容器运行的日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
podman logs   nginx

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# podman  top nginx
USER    PID   PPID   %CPU    ELAPSED           TTY     TIME   COMMAND
root    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 nginx
ID             NAME    CPU %   MEM USAGE / LIMIT   MEM %   NET IO           BLOCK IO   PIDS
19f105d5dc1e   nginx   --      2.036MB / 1.893GB   0.11%   978B / 10.55kB   -- / --    2

迁移容器

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz
$ scp /tmp/checkpoint.tar.gz <destination_system>:/tmp

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo podman container restore -i /tmp/checkpoint.tar.gz

podman的程序如何设置自启动

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ vim /etc/systemd/system/nginx_podman.service

[Unit]
Description=Podman Nginx Service
After=network.target
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/podman start -a nginx
ExecStop=/usr/bin/podman stop -t 10 nginx
Restart=always

[Install]
WantedBy=multi-user.target

接下来,启用这个 Systemd 服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo systemctl daemon-reload
$ sudo systemctl enable nginx_podman.service
$ sudo systemctl start nginx_podman.service

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ vim Dockerfile
FROM busybox:latest
CMD ["sh","-c","sleep 30"]

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ps -ef | grep [n]ginx
root     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的父进程是那个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ps -ef | grep 19359
root     19359     1  0 11:38 ?        00:00:00 /usr/libexec/podman/conmon 。。。。

所以验证了我上面的说法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
再见 Docker,是时候拥抱下一代容器工具了
Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让你在不同环境(如开发、测试和生产等环境)之间轻松迁移应用的同时,还可保留应用的全部功能。
iMike
2019/09/25
1.5K0
再见 Docker,是时候拥抱下一代容器工具了
无需 Daemon 进程的容器工具:Podman
Linux 容器是由 Linux Kernel 提供的具有特定隔离的进程。Linux 容器技术能够让用户对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让用户在不同环境,之间轻松迁移应用的同时,并保留应用的全部功能。
CS实验室
2021/03/22
1.6K0
无需 Daemon 进程的容器工具:Podman
【Podman】podman入门学习 | Docker替代品
在上手程度上:Podman 的操作方式与 Docker 高度兼容,很适合docker用户转型使用podman。使用命令几乎和docker相同
宝耶需努力
2022/12/13
1.7K0
【Podman】podman入门学习 | Docker替代品
Ubuntu安装podman
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
用户6792968
2022/08/30
2.3K0
放弃手中Docker拥抱下一代容器管理工具Podman
官网描述: Podman是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行OCI容器(开源的容器管理工具)。容器可以作为根运行,也可以以无根模式运行。简单地说:alias docker=podman简单的说它是下一代容器。
全栈工程师修炼指南
2020/10/09
2.7K0
放弃手中Docker拥抱下一代容器管理工具Podman
Podman 会取代 Docker 吗?
Linux容器 是与系统其他部分隔离开的一系列进程。运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。因而,相对于依赖重复传统测试环境的开发渠道,容器的运行速度要快得多。容器比较普遍也易于使用,因此也成了 IT 安全方面的重要组成部分。[1]
YP小站
2020/06/04
13.6K1
容器引擎Docker与Podman解析
最近技术群里有朋友问我,不是说K8S要弃用Docker了吗?还要不要继续学习这块内容?是不是得改行卖白菜了?
Luga Lee
2021/12/09
1.2K0
容器引擎Docker与Podman解析
podman快速入门详解与实践
Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker CLI 的时候,Docker CLI 会通过 gRPC API 去跟 Docker Engine 说「我要启动一个容器」,然后 Docker Engine 才会通过 OCI Container runtime(默认是 runc)来启动一个容器。这就意味着容器的进程不可能是 Docker CLI 的子进程,而是 Docker Engine 的子进程。
互联网-小阿宇
2022/11/21
1.3K0
Docker 大势已去,Podman 即将崛起
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
9210
Docker 大势已去,Podman 万岁
Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker CLI 的时候,Docker CLI 会通过 gRPC API 去跟 Docker Engine 说「我要启动一个容器」,然后 Docker Engine 才会通过 OCI Container runtime(默认是 runc)来启动一个容器。这就意味着容器的进程不可能是 Docker CLI 的子进程,而是 Docker Engine 的子进程。
米开朗基杨
2019/10/22
2.2K0
Docker 大势已去,Podman 万岁
Podman又是什么新技术?它和Docker有啥区别?
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
2.4K0
RHEL Podman命令
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。 Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。
星哥玩云
2022/09/15
5500
Podman 保姆级使用教程,太顶了!
cockpit-podman 软件包作为 cockpit 插件可集成于 Web UI 中,实现 Web UI 管理容器。
米开朗基杨
2022/04/09
20.9K1
Podman 保姆级使用教程,太顶了!
Crictl VS Podman
Kubernetes已经使用CRI-O作为容器运行时。自然的它也推出了相应的命令行工具Crictl来调试CRI-O,管理Images, ps等。
Markgogogo
2022/06/13
1.1K0
Crictl VS Podman
podman
Github: https://github.com/containers/podman/
阿超
2024/12/25
1150
Docker将要被取代否?
按照计划,应该分享云原生模块的相关知识,主要就是目前广泛使用的容器运行引擎docker和容器编排平台k8s。今天就docker展开,还有了解下最近呼声比较高的容器引擎podman。豆荚男?
希里安
2023/10/30
2310
Docker将要被取代否?
Podman 简介
Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。
院长技术
2021/02/19
1K0
最流行的容器运行时Podman,如何拿下17K Star?
Podman是一个基于libpod库开发的容器运行时,用于在Linux操作系统上管理和运行容器。与传统的Docker容器运行时不同,Podman无需依赖Docker守护进程,它可以在不同的Linux发行版中独立运行。
MCNU云原生
2023/03/17
9750
最流行的容器运行时Podman,如何拿下17K Star?
Podman容器管理命令一览
这是一个兼容 kubernetes 的 pod 定义,你可以直接通过 kubectl apply -f hugo.yaml 将其部署在 Kubernetes 集群中,也可以直接通过 podman 部署
全栈工程师修炼指南
2020/10/23
5.2K0
Podman 已成 Linux 官方标配!Docker 没戏了?
Podman是一个开源项目,在Github上已有12k+Star,可在大多数Linux平台上使用。Podman是一个无守护进程的容器引擎,用于在Linux系统上开发、管理和运行OCI(Open Container Initiative)容器和容器镜像。Podman提供了一个与Docker兼容的命令行工具,可以简单地为docker命令取别名为podman即可使用,所以说如果你会Docker的话可以轻松上手Podman。
macrozheng
2022/02/23
6.6K1
Podman 已成 Linux 官方标配!Docker 没戏了?
相关推荐
再见 Docker,是时候拥抱下一代容器工具了
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文