翻译自 Chetansingh 2020年4月24日的博文《Docker Vs Podman》 [1]

容器化的一场全新革命是从 Docker 开始的,Docker 的守护进程管理着所有的事情,并成为最受欢迎和广泛使用的容器管理系统之一。

但是,请稍等!您真的会假设 Docker 是唯一有效的容器化方式而认为值得坚持去使用它吗?

这篇博文将帮助您了解以下问题:

为什么我们不使用 Docker?为什么我们要使用 Docker?没有别的选择了吗?其实,当您决定要开始使用一套新的工具进行容器管理时,Docker 便成了“别的”工具,此时没有了 “docker containers/images”,只有 “containers/images”。

在继续讨论本文内容之前,让我们先来了解一下 Docker 是什么以及它是如何工作的。

Docker 是什么?

Docker 是一个容器化平台,在这个平台中,我们可以将我们的应用程序与容器中的库和环境绑定在一起。Docker Container 在某种程度上类似于虚拟机。
但是……

与硬件虚拟化的虚拟机不同,在 Docker 中,运行中的容器共享主机 OS 内核。

Docker 是如何工作的呢?让我们来看一下:

Docker 流程:

Docker 的两个主要组成模块是: Docker Daemon 和 Docker CLI

请允许我简短地解释一下:

Docker Daemon: 一个常驻的后台进程,帮助管理和创建 Docker 镜像、容器、网络和存储卷。

Docker Engine REST API: 一个应用程序用来与 Docker 守护进程进行交互的 API; 可以通过 HTTP 客户端访问它。

Docker CLI: 一个用来与 Docker 守护进程进行交互的 Docker 命令行客户端,也就是 Docker 命令。

如果换个角度思考,我们可以把下面这些问题与 Docker 联系起来:

  1. 众所周知,Docker 运行在单个进程上,这可能会导致单点故障。

  2. 所有子进程都归属于此进程。

  3. 无论何时,如果 Docker 守护进程失败,所有子进程都会失去跟踪并进入孤立状态。

  4. 安全漏洞。

  5. 对于 Docker 的操作,所有步骤都需要由 root 执行。

Podman

现在我们知道了 Docker 是如何工作的,下面我们来探讨有关 Podman 的主题,以及我们如何克服与 Docker 相关的大多数问题。

此时,您一定想了解“Podman 是什么?

  • Podman 是一个无守护进程的容器引擎,用于在 Linux 系统上进行开发、管理和运行 OCI Containers。Containers 能以 root 模式运行,也能以非 root 模式运行。

  • Podman 直接与镜像注册表、容器和镜像存储进行交互。

  • 我们知道,Docker 是建立在 runC 容器运行时之上 [2],并且使用了守护进程的; Podman 中没有使用守护进程,而是直接使用 runC 容器运行时。

译者注:
Podman 没有守护进程,也不用 REST API 交互,可以使用非 root 模式运行,这便解决了上面提到的 与 Docker 相关的问题 3、4 和 5。

关于 Podman,有几件事需要重点了解一下:

  • Podman 不需要启动或管理像 Docker daemon 那样的守护进程。

  • 适用于 Docker 的命令在 Podman 中也是同样可用的。您可以指定命令别名:alias docker=podman

  • Podman 和 Docker 的镜像具有兼容性。

很酷……不是吗?

Podman 入门

安装 podman

在 CentOS 8 上安装 podman:

[cloudbunny@technopanti ~]$ yum install podman

安装 podman 之后,您可以使用下面命令检查版本:

[cloudbunny@technopanti ~]$ podman --version

输出:podman version 2.1.1

运行一个示例容器

[cloudbunny@technopanti ~]$ podman run -dt -p 8080:8080/tcp -e HTTPD_VAR_RUN=/var/run/httpd -e HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d \
-e HTTPD_MAIN_CONF_PATH=/etc/httpd/conf \
-e HTTPD_CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/httpd/ \
registry.fedoraproject.org/f29/httpd /usr/bin/run-httpd

由于在 podman run 命令中 -d 表示以分离模式运行容器,因此 Podman 将在容器运行后打印出容器 ID。注意,这里我们使用了端口转发来访问容器内的 HTTP server。

注释:

  1. -d 表示以分离模式在后台运行此容器。

  2. Podman 在后台运行后会打印出容器 ID。(例如:f1f7215ccf26fe7bb83dd108cdb41480aae5794058a007dd85a098af0d390563)

  3. -p: 利用端口转发,使能够访问容器内的 HTTP server。

列出运行中的容器

[cloudbunny@technopanti ~]$ podman ps

检查运行中的容器

[cloudbunny@technopanti ~]$ podman inspect -l

这将有助于“检查”正在运行的容器中的元数据和相关的详细信息 —— 状态(运行或停止)、创建日期和容器 ID,等等。

既然我们有容器的详细信息,我们便可以测试 http server,此例中,在端口 8080 上执行端口转发。
执行命令:

[cloudbunny@technopanti ~]$ curl http://localhost:8080

上面的命令将会显示我们容器化的 httpd server 中的 index 页面。

查看容器日志

[cloudbunny@technopanti ~]$ podman logs --latest

希望您享受本文的阅读 ????


相关链接:

  1. https://medium.com/technopanti/docker-vs-podman-c03359fabf77 Docker Vs Podman ↩︎

  2. https://www.docker.com/blog/runc/ Introducing runC ↩︎

作者 :Chetansingh
译者 :技术译民
出品 :技术译站(https://ITTranslator.cn/)

END

Docker Vs Podman相关推荐

  1. 在openEuler 21.9安装自带的容器软件Docker、podman、skopeo

    openEuler 21.9上的Docker.podman.Skopeo版本都偏低. 此外没有自带buildah和cri-o. 不知道下一个版本情况会不会好点. [root@openeuler iso ...

  2. Docker、Podman 容器“扫盲“ 学习笔记【与云原生的故事】

    [摘要] 笔记内容:由理论和具体docker常用操作构成.这篇博文笔记的定位是:温习,查阅,不适合新手学习.你拥有青春的时候,就要感受它,不要虚掷你的黄金时代,不要去倾听... 写在前面 笔记内容:由 ...

  3. Docker、Podman 容器“扫盲“ 学习笔记

    写在前面 之前只是做毕业设计时,接触一点,用DockFile在阿里云上部署了毕设.后来docker端口问题,机器被植入木马,拉去挖矿,cup天天爆满,百度半天删了好多文件不管用,后来恢复镜像了,之后在 ...

  4. Docker学习总结(65)—— 容器引擎 Docker 与 Podman 的详细对比分析

    一.什么是 Linux 容器? Linux 容器是由 Linux 内核所提供的具有特定隔离功能的进程,Linux 容器技术能够让你对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离.从而让 ...

  5. Podman又是什么新技术?它和Docker有啥区别?

    容器编排工具作为当今最重要的Web开发技术之一,众多强者都在尝试争夺这一行业的主导地位. Podman是RedHat的一款产品,旨在使用类似于Kubernetes的方法来构建.管理和运行容器,作为一款 ...

  6. Docker 大势已去,Podman 万岁

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 米开朗基杨 来源 | 公众号「云原生实验室」 Podman 原来是 CRI-O 项 ...

  7. Docker/Podman使用入门---从容器构建镜像 提交镜像到服务器UCloud dockerhub

    文章目录 1.docker commit 提交镜像命令 2.将镜像提交到UCloud服务器 step1: 先在UCloud服务器上面,创建镜像仓库 step2: 登录UCloud镜像仓库 step3: ...

  8. Containerd客户端工具(CLI)介绍ctr,nerdctl,crictl,podman以及docker

    下面设计到私有镜像库私有镜像库 http和https两种方式 浅谈 containerd 架构及高级技巧 containerd是一个高级容器运行时,又名容器管理器.简单来说,它是一个守护进程,在单个主 ...

  9. 选择 podman 的理由, 以及它和 Kubernetes , Docker 的区别

    一.podman 是什么 官方网站: podman.io 官方自己的介绍: https://podman.io/whatis.html 名称 podman ,官方说明是 Pod Manager , 所 ...

最新文章

  1. oracle管道化表函数
  2. java抛异常 代替返回_请问业务层方法是抛出一个异常好还是返回一个结果更好...
  3. 网络攻防第十一周作业
  4. Python字典技巧一锅炖
  5. go语言服务器连接mysql,golang中连接mysql数据库
  6. 悲苦手机命,“熬”在新零售
  7. 06-移动端开发教程-fullpage框架
  8. 【S交换机技术连载帖】交换机在江湖系列-序言
  9. 计算机网络对英语教学的消极影响,浅谈计算机对英语写作和教学的影响
  10. h5+app Android上架华为应用市场被拒原因“拒绝获取手机权限后app会闪退“以及隐私政策问题
  11. SQL数据库完美恢复 SQL数据库损坏修复
  12. ysoserial URLDNS解析
  13. 聊聊并发 生产者消费者模式
  14. HDU - 3594 Cactus (仙人掌图)
  15. 记录oracle的一些操作
  16. 1、会计的概念、职能和目标
  17. 【雷达与对抗】【2012.12】基于脉冲多普勒雷达的行走检测
  18. 树莓水果创意广告文案,朋友圈晒水果走心文案树莓
  19. python第四周和第五周
  20. 疯狂英语口语突破-突破句型3

热门文章

  1. 分布式锁的几种实现原理
  2. html-盒子模型及pading和margin相关
  3. 深度优先搜索(DFS)----------------Tju_Oj_3517The longest athletic track
  4. Linux学习_菜鸟教程_3
  5. 大型网站技术架构:核心原理与案例分析笔记
  6. javascript设计模式之外观模式
  7. Mac OS使用技巧之八:Dock栏使用技巧
  8. 阿里云一键建站产品,阿里云自营建站-中小企业建站首选
  9. Kubernetes共享使用Ceph存储
  10. JAVA代码—算法基础:数独问题(Sodoku Puzzles)