选择 podman 的理由, 以及它和 Kubernetes , Docker 的区别
转载自https://zhuanlan.zhihu.com/p/506265757
前言
大家好,我是 Liangdi, podman 4.x 版本已经发布了, 我也从 docker 开始向 podman 迁移, 所以是合适的时候写点 podman 的文章了.
podman 是什么
官方网站: podman.io
官方自己的介绍: https://podman.io/whatis.html
名称 podman
,官方说明是 Pod Manager
, 所以它不仅可以管理 OCI 容器,还可以管理 pod , 这也是和 docker 的最大差别吧.
和 kubernetes 的区别
kubernetes(k8s) 是目前最流行的容器编排工具, 集群管理工具, 生态很完善, 也很"重"
, pod 的概念就来自 k8s , 虽然 podman 也是管理 pod, 但是远远不及 k8s 的编排功能, 同时 podman 也没有集群管理功能,如果需要管理集群, 需要第三方工具完成.
所以 podman 定位也不是编排和集群管理工具, 紧紧是一个 pod 和容器的管理工具. 所以不是一个级别的东西, 这里不做太多的比较.
和 docker 的区别
如果仅仅从 docker
和 podman
两个命令提供的功能来讲,它们功能交集很大, podman 官方甚至推荐 alias docker=podman
来过渡.
- docker 文档更齐全, podman 可以借用一下 docker 的文档
- docker 生态更加完善, podman 一时半会赶不上,但是如果你只是去跑容器, 那这是一样的
- docker 有 docker-compose, podman 早期没有对应工具,后面也出了 podman-compose, 但是这个功能是否必须? 值得考虑,因为 podman 支持 pod 管理.
- docker 有 machine , 让 windows 和 mac 支持 linux 容器, podman 也支持,而且已经比较完善.
- docker 有 docker-desktop , podman-desktop 目前还比较简单.
- docker 支持 rest api , podman 也支持 rest api, 这使得开发生态工具会比较简单.
- docker 有 swarm 支持集群部署, podman 没有对应工具, 不过支持 remote , 调用远程机器上的 podman service 执行对应的功能 , 这样能满足很多轻量化的场景.
- k8s 之前支持使用 docker-shim 和 docker 集成, 不过新版本也放弃这一层, 直接通过 CRI 调用 contained , podman 也不支持 CRI. 并且也没有什么计划.
- docker 商业/开源并行, podman 只有开源版本, 目前没有哪家公司提供商业支持(不清楚 redhat 有没有对应的服务,可能集成在订阅里面了).
为什么选 podman
上面讲了不少 docker 比 podman 有优势的方面, 这里开始讲 podman 的另外的东西, 这也是我选择 podman 主要原因.
先罗列一下 podman 适合的场景
- 没有很强的集群管理需求(或者说,已经有 overlay network 方案, podman 也是适用的)
- 仅仅为了容器化一些应用
- 团队内部轻量级使用,比如 ci/cd , 开发,测试环境等.
- 喜欢命令行或者脚本运维
- 感兴趣 podman 的生态建设(坑)
那么 podman 比 docker 好的方面有哪些呢?
- 更加 rootless , 尽管 docker 也可以 rootless, 但是 podman 设计之初就开始支持
- 没有 daemon , 这使得 podman 在结合 namespace 和 cgroup 一起使用会更加灵活
- pod , 和 k8s 基本一样的 pod , 一样支持 infra 容器. 这使得一些简单的容器
编排
工作, podman 也可以简单实现. - systemd service 集成, 由于没有 deamon , podman 通过 generate 子命令, 可以生成 systemd service 配置, 来管理容器和 pod 的作为服务启动.
- k8s 关联, podman 可以生成 kubectl 的 yaml 配置文件, 也通过 podman play kube 来运行 k8s 的配置, 也可以作为 k8s 的一个过渡吧, 而且 podman 也没有去实现 CRI 的计划, 这应该也是官方的态度, 不会参和到 k8s 生态中, 保持自己的轻量化工具的定位吧.
- remote , podman 通过 ssh 隧道或者 tcp 端口, 可以连接到远程机器上的 podman service, 从而实现远程机器上的容器和 pod 管理.
所以 podman 提供了一些轻量化而又灵活的功能特性,满足容器化,以及小批量服务器的场景.
最后聊聊 podman 所在的 https://github.com/containers
组织
查看这个组织的仓库可以看到,他们真的是在做容器工具, 而且写了很多轮子, 包括 buildah 和 skopeo 这两个工具,与 podman 一起被称为下一代容器工具.
runc 是一个有名的 low-level OCI rumtime, 他们就开发了一个 crun . podman 早期版本使用 runc, 最新的版本已经使用 crun 了.
众所周知, golang 是容器生态的主要语言, podman 也是 go 写的,但是在 podman 4 的版本中, podman 增加了非 CNI 的网络栈支持, 这几个工具是 netavark 和 aardvark-dns, 这两个工具是 rust 写的, 而且还有 youki 这个 rust 写的 low-level OCI runtime, 不知道将来某一天 podman 会不会默认使用 youki , 还有好几个 rust 写的容器技术相关的应用和库, 这是要与 golang 分天下的节奏.
如果你也对 podman 以及其生态感兴趣, 关注我吧, 我会给你带来 podman 最新的动态以及实践方案.
选择 podman 的理由, 以及它和 Kubernetes , Docker 的区别的更多相关文章
- docker和kubernetes docker的区别
之前公司的测试环境,刚开始自己搭建虚拟机,然后安装redis,nginx,mq,mysql,tomcat,jdk,marven,还有jekins.前面些还算好点,jekins还是比较麻烦的.然后搭完以 ...
- 选择Netty的理由
摘自:http://blog.csdn.net/u010154380/article/details/64443762 <Netty 权威指南>—— 选择Netty的理由 声明:本文是&l ...
- JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!
序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...
- Kubernetes+Docker+Istio 容器云实践
随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...
- Kubernetes+Docker的云平台在CentOS7系统上的安装
Kubernetes+Docker的云平台在CentOS7系统上的安装 1.运行VirtualBox5. 2.安装CentOS7系统. 注意:选择Basic Server类型 安装过程略. 3.修改计 ...
- VituralBox从零搭建基于CentOS 7(64位)的Kubernetes+docker集群
1. 下载CentOS 7官方minimal镜像 2. 安装VituralBox(Windows 10 64位) 3. 安装Git for windows(Windows 10 64位) 4. 安装V ...
- Apache的Mesos和Google的Kubernetes 有什么区别?
Apache的Mesos和Google的Kubernetes 有什么区别?本文来自StackOverFlow上的一个问题,主要讨论Mesos和Kubernetes的区别,相信我们很多人也有同意的疑问. ...
- Openstack+Kubernetes+Docker微服务
Openstack+Kubernetes+Docker微服务 渐入佳境,我们开始比较具体的工作,由于Docker是一个基础组件,所以本文的主题是Docker和Registry2. 底层系统基于Cent ...
- Openstack+Kubernetes+Docker微服务实践
Openstack+Kubernetes+Docker微服务实践 ..... Openstack+Kubernetes+Docker微服务实践之路--选型 posted @ 2016-11-15 ...
- [转帖]记一次KUBERNETES/DOCKER网络排障
记一次KUBERNETES/DOCKER网络排障 https://coolshell.cn/articles/18654.html 记得之前在一个公众号里面看过这个文章 讲的挺好的.. 物理机直接跑d ...
随机推荐
- 【虚拟机】虚拟机安装win10
VMware-workstation 16 pro 点击查看代码 密钥: ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2DXQE-M2UT6 ZF7 ...
- ffmpeg 截取视频
ffmpeg -ss 00:00:03 -t 22 -i output20230301.mp4 output20230301_0.mp4 -ss:开始时间 -t:持续时间 -i:输入 接着是输出
- CV-部署芯片接续-CV全流程部署-TF版本
CV-部署芯片接续-CV全流程部署-TF版本 1 单个CNN算子 import cv2 import numpy as np import tensorflow as tf import os fro ...
- Java 并发线程池线程数配置
1. 如果任务是计算密集型的,线程池大小建议设置为Ncpu + 1 其中N是CPU数量, +1 是为了在某一个线程处于暂停阶段时,有新的线程可以用来执行,减少CPU中断时间. 2. 如果是IO密集型, ...
- Jenkins自动化部署(linux环境)---执行脚本
1.安装node插件 2.node全局配置 3.填写jenkins构建时执行的shell脚本 完整命令 node -v npm install rm -rf ./dist/* npm run buil ...
- 《ImageNet Classification with Deep Convolutional Neural Networks (AlexNet)2012》
Abstract 作者训练了一个大型的深度卷积神经网络,用于在 ImageNet LSVRC-2010 比赛中对120万张高分辨率图像分为1000个不同的类别.在测试数据上,作者们达到了 top-1 ...
- kali 子域名搜集工具学习记录
# fierce 主要是对子域名进行扫描和收集信息,并且它还可以测试区域传送漏洞. kali 2022.1 apt-get 安装的fierce并没有 -dns参数,需要手动下载,下载后有个fierce ...
- csec的key更新
在对csec的使用中(其他遵循hsm key update协议的芯片也适用),kdf的运算过程中遇到的数据都是128bit.不需要考虑padding的问题.目前并没有找到对padding的一致性的处理 ...
- python requests 内置请求模块
- 《Vue.js 3.x高效前端开发(视频教学版)》简介
#好书推荐##好书奇遇季#<Vue.js 3.x高效前端开发(视频教学版)>,京东当当天猫都有发售.本书配套示例源码.PPT课件.思维导图.数据集.开发环境与答疑服务. 本书通过对Vue. ...