前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Podman 会取代 Docker 吗?

Podman 会取代 Docker 吗?

作者头像
YP小站
发布2020-06-04 14:50:12
13.4K1
发布2020-06-04 14:50:12
举报
文章被收录于专栏:YP小站YP小站

Linux容器简介

Linux容器 是与系统其他部分隔离开的一系列进程。运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。因而,相对于依赖重复传统测试环境的开发渠道,容器的运行速度要快得多。容器比较普遍也易于使用,因此也成了 IT 安全方面的重要组成部分。[1]

Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

  • Docker Client客户端
  • Docker Daemon守护进程
  • Docker Image镜像
  • Docker Container容器 [2]

Docker 是目前最流行 Linux容器解决方案,但有两个不足之处:

  • Docker 需要在你的系统上运行一个守护进程
  • Docker 是以 root 身份在你的系统上运行该守护程序

这些缺点的存在可能有一定的安全隐患,为了解决这些问题,下一代容器化工具 Podman 出现了。[3]

Podman 简介

Podman 是一个开源的容器运行时项目,可在大多数 Linux 平台上使用。Podman 提供与 Docker 非常相似的功能。正如前面提到的那样,它不需要在你的系统上运行任何守护进程,并且它也可以在没有 root 权限的情况下运行。

Podman 可以管理和运行任何符合 OCI(Open Container Initiative)规范的容器和容器镜像。Podman 提供了一个与 Docker 兼容的命令行前端来管理 Docker 镜像。[3]

Podman 不足之处:

  • 因为没有类似 docker daemon 守护进程,所以不支持 --restart 策略,不过使用 k8s 编排就不存在这个问题

Centos8 去除了 Docker 作为默认的容器化管理工具,使用 Podman、Buildah、Skopeo 进行了替换。

安装

  • CentOS 安装方式 # 使用 yum 安装 $ sudo yum install podman -y
  • MacOS 安装方式 $ brew cask install podman

podman info

代码语言:javascript
复制
host:
  BuildahVersion: 1.9.0
  Conmon:
    package: podman-1.4.4-4.el7.centos.x86_64
    path: /usr/libexec/podman/conmon
    version: 'conmon version 0.3.0, commit: unknown'
  Distribution:
    distribution: '"centos"'
    version: "7"
  MemFree: 14471168
  MemTotal: 512086016
  OCIRuntime:
    package: containerd.io-1.2.10-3.2.el7.x86_64
    path: /usr/bin/runc
    version: |-
      runc version 1.0.0-rc8+dev
      commit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
      spec: 1.0.1-dev
  SwapFree: 0
  SwapTotal: 0
  arch: amd64
  cpus: 1
  hostname: vps3
  kernel: 3.10.0-693.2.2.el7.x86_64
  os: linux
  rootless: false
  uptime: 4608h 6m 0.82s (Approximately 192.00 days)
registries:
  blocked: null
  insecure: null
  search:
  - registry.access.redhat.com
  - docker.io
  - registry.fedoraproject.org
  - quay.io
  - registry.centos.org
store:
  ConfigFile: /etc/containers/storage.conf
  ContainerStore:
    number: 0
  GraphDriverName: overlay
  GraphOptions: null
  GraphRoot: /var/lib/containers/storage
  GraphStatus:
    Backing Filesystem: extfs
    Native Overlay Diff: "true"
    Supports d_type: "true"
    Using metacopy: "false"
  ImageStore:
    number: 0
  RunRoot: /var/run/containers/storage
  VolumePath: /var/lib/containers/storage/volumes

Podman 使用 [4]

  • 下载镜像
代码语言:javascript
复制
$ podman pull registry.fedoraproject.org/f27/httpd

Trying to pull registry.fedoraproject.org/f27/httpd...Getting image source signatures
Copying blob 2fc5c44251d4 [======>-------------------------------] 8.1MiB / 44.8MiB
Copying blob ff3dab903f92 [===>----------------------------------] 8.5MiB / 80.7MiB
Copying blob 9347d6e9d864 done
  • 创建一个 httpd 容器

代码语言:javascript
复制
$ 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/f27/httpd /usr/bin/run-httpd
 
  • 列出本机所有容器
代码语言:javascript
复制
$ podman ps -a
  • 查看容器的日志
代码语言:javascript
复制
$ sudo podman logs --latest

10.88.0.1 - - [07/Feb/2018:15:22:11 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
10.88.0.1 - - [07/Feb/2018:15:22:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.55.1" "-"
  • 设置容器一个检查点
代码语言:javascript
复制

$ sudo podman container checkpoint <container_id>
  • 根据检查点位置恢复容器
代码语言:javascript
复制

$ sudo podman container restore <container_id>
  • 迁移容器

要将容器从一个主机实时迁移到另一个主机,请在迁移的源系统上检查该容器的位置,然后将该容器转移到目标系统,然后在目标系统上还原该容器。传输检查点时,可以指定输出文件

在源系统上:

代码语言:javascript
复制
$ sudo podman container checkpoint <container_id> -e /tmp/checkpoint.tar.gz
$ scp /tmp/checkpoint.tar.gz <destination_system>:/tmp

在目标系统上:

代码语言:javascript
复制
$ sudo podman container restore -i /tmp/checkpoint.tar.gz

总结

Podman 发展前景很好,是否能取代 Docker,暂时不知道,大家只能拭目以待!!!

参考链接

  • [1] https://www.redhat.com/zh/topics/containers/whats-a-linux-container
  • [2] https://baike.baidu.com/item/Docker
  • [3] https://juejin.im/post/5d8b27f8e51d4577e86d0d4b
  • [4] https://podman.io/getting-started/

欢迎大家关注交流,定期分享自动化运维、DevOps、Kubernetes、Service Mesh和Cloud Native

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 YP小站 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux容器简介
  • Docker简介
  • Podman 简介
  • 安装
  • podman info
  • Podman 使用 [4]
  • 总结
  • 参考链接
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档