翻译自 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 DaemonDocker 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

希望您享受本文的阅读

作者 : Chetansingh

译者 : 技术译民

出品 : 技术译站

链接 : 英文原文


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

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

Docker Vs Podman的更多相关文章

  1. Docker 与 Podman 容器管理的比较

    翻译自 Paul Ferrill 2020年9月1日的文章<Compare Docker vs. Podman for container management> [1] Docker 和 ...

  2. Podman and Buildah for Docker users

    转自:https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/ I was asked re ...

  3. docker 恶意镜像到容器逃逸影响本机

    转载:http://521.li/post/122.html SUSE Linux GmbH高级软件工程师Aleksa Sarai公布了影响Docker, containerd, Podman, CR ...

  4. 下一代容器架构已出,Docker何去何处?看看这里的6问6答!!

    我猜很多人一看这个标题已经感觉很懵逼了,什么?下一代容器都出来了,我还没学Docker呢!!! 咳咳~~在这里我给大家做一个保证,下一代容器目前也只是各个公司在测试阶段,Github上面也有很多Iss ...

  5. 下一代容器技术podman简介

    PODMAN主要由红帽发起和推动,是下一代的容器技术,包括如下三个模块:Podman,Skopeo和Buildah这三个工具都是符合OCI计划下的工具(github/containers).主要是由R ...

  6. 向Docker告别的时候到了

    在容器的远古时期(大约4年前),Docker是容器游戏中仅有的参与者.但是现在情况不一样了,Docker不再是唯一的一个了,只是另一个容器引擎而已.Docker允许我们构建,运行,拉取,上传,查看容器 ...

  7. 终于可以像使用 Docker 一样丝滑地使用 Containerd 了

    有追求的工程师一般都是有技术洁癖的,云原生的世界更是如此,Kubernetes虽然制定了容器运行时接口(CRI)标准,但早期能用的容器运行时只有Docker,而Docker 又不适配这个标准,于是给 ...

  8. Podman 快速入门

    今天在某云上新购一台云服务器,发现已经有了 CentOS8.2 官方镜像可选,出于对新鲜事物的好奇,我决定开始采用 CentOS8.2,即使我还没有为它的新特性做好准备. 我的应用主要以单机版容器为主 ...

  9. docker逃逸漏洞复现(CVE-2019-5736)

    漏洞概述 2019年2月11日,runC的维护团队报告了一个新发现的漏洞,SUSE Linux GmbH高级软件工程师Aleksa Sarai公布了影响Docker, containerd, Podm ...

随机推荐

  1. Spring 5的最后一个特性版本5.3发布,4.3将于12月终止维护

    10月27日,Spring Framework团队宣布了5.3版本正式GA,Spring用户可以在repo.spring.io和Maven Central上获取到最新版本的依赖包. JDK的版本支持 ...

  2. 我用 Python 撸了一个 plist 图集拆图工具!附上github源码

    这些年,我一直在使用 JavaScript .CocosCreator 做开发,只要是他们不能解决的,我都不太愿意去弄,或者说是不太情愿去做.真的是手中有把锤子,看什么都是钉子,越是熟悉一样东西,越容 ...

  3. 洛谷 P2391 白雪皑皑 线段树+优化

    题目描述: 现在有 \(N\) 片雪花排成一列. Pty 要对雪花进行$ M $次染色操作,第 \(i\)次染色操作中,把\((i*p+q)%N+1\) 片雪花和第\((i*q+p)%N+1\)片雪花 ...

  4. Json Master masters JSON!

    对于一个软件开发人员, JSON 是最熟悉的东西之一了, 每一个开发人员基本上每一天都会跟 JSON 打交道. 作为一个大前端开发人员, 当看到从服务器返回的 JSON 数据时, 尤其是大数据量或者复 ...

  5. 01 . Vue简介,原理,环境安装

    简介 vue是一个JavaMVVM库,是一套用于构建用户界面的渐进式框架,是初创项目的首选前端框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计.它是轻量级的,它有很多独立的功能或库 ...

  6. drop_cache-sar

    查线上问题: 1.cpu  idle 为0 ,I/O高, pidstat 发现进程io 不高,那就是cache mem引起系统io高了 没有vmstat,只能使用sar工具了,使用sar -r  查看 ...

  7. python之路 《六》函数

    ---恢复内容开始--- 为什么要有函数? 当你的老板要你写一个程序 1 def 函数0(): 2 # 如果cpu占用率>90 3 # 发送邮件 4 # 发出警报 5 6 def 函数1(): ...

  8. 01 Servlet技术

    Servlet 1.Servlet技术 1.1.什么是Servlet Servlet是JavaEE规范之一.规范就是接口 Servlet就JavaWeb三大组件之一.三大组件分别是:Servlet程序 ...

  9. 基于 abp vNext 微服务开发的敏捷应用构建平台 - 框架分析

    总体架构     本平台从技术上采用ABP vNext和.NET Core编写的微服务架构.客户端层主要以现代浏览器为主,适配了PC端和移动端的访问,采用API和应用程序进行交互,同时提供第三方使用的 ...

  10. 工作流(workflow)

    1,JBPM 工作流(开源历史悠久) 2,activity 工作流(开源历史悠久) 3,workable 工作流(功能比较强大,但是开源维护缓慢,比较注重商业化) 以上三个是主流的工作流