当前位置:   article > 正文

centos 7安装podman(类似docker)_centos安装podman

centos安装podman

参考:centos 7安装podman(类似docker)_privateobject的博客-CSDN博客_centos podman

Podman 是一个 无守护、开源的 Linux 本地工具,旨在 使用 open Containers Initiative (OCI) 让容器和镜像更加方便地查找、运行、构建、共享和部署应用程序。Podman 提供了一个命令行接口(CLI),任何使用过 Docker 容器引擎的人都能很快上手 podman。大多数用户可以简单地将 Podman 别名为 Docker (alias Docker = Podman),没有任何问题。与其他常见的容器引擎 (Docker、CRI-O、containerd) 类似, Podman 依赖于符合 OCI 的容器运行时(runc、cron、runv等) 来与操作系统交互并创建运行的容器。这使得由 Podman 创建的正在运行的容器与由任何其他通用容器引擎创建的容器几乎没有区别。

Podman是Redhat公司推出的容器管理工具, Podman起初是 CRI-O的一部分,后来单独分离出来叫做 libpod,使用 Podman的命令几乎和 docker类似(我想这是 Redhat公司大力推举Podman替换Docker的同时又不是用户体验的诡计),你可以通过alias docker=podman来替换Docker。
Podman在结构上与Docker不同,Podman没有使用daemon的方式去创建容器,而是直接调用OCI runtime,比如 runcPodman由两部分组成, Podman CLIconmonPodman CLI方便用户交互,conmon负责container runtime,主要包括监控,日志,TTY分配等,简而言之,conmon是所有容器进程的父进程。
  1. [root@cephrook-cephMater ~]# pstree -p
  2. systemd(1)-+-agetty(1299)
  3. |-conmon(1954)-+-nginx(1975)---nginx(1988)
  4. | `-{conmon}(1956)

参考

CentOS7/8安装容器管理工具Podman

centos7 安装podman

podman入门实践

Podman Desktop 能否取代 Docker Desktop呢?

podman 配置国内镜像

podman镜像加速配置

Podman+Nginx创建带自启动的源站点

使用Podman建立容器

Centos8安装podman,自定义修改镜像,保存本地容器到私有仓库

Docker离线部署images及启动容器

podman案例:打包本地镜像,发送给别人或者上传镜像

CentOS 7 上编译安装 Podman 3.4.4

Podman 介绍,安装,基本操作

如何在Ubuntu 20.04上安装和使用Podman(Docker替代方案)?

一、yum安装(版本低)

1.1 安装命令

  1. # yum 搜索
  2. yum search podman
  3. yum search all podman
  4. # 安装
  5. yum -y install podman
  6. ######
  7. 已安装:
  8. podman.x86_64 0:1.6.4-32.el7_9
  9. 作为依赖被安装:
  10. conmon.x86_64 2:2.0.8-1.el7 container-selinux.noarch 2:2.119.2-1.911c772.el7_8
  11. containernetworking-plugins.x86_64 0:0.8.3-3.el7.centos containers-common.x86_64 1:0.1.40-11.el7_8
  12. criu.x86_64 0:3.12-2.el7 fuse-overlayfs.x86_64 0:0.7.2-6.el7_8
  13. fuse3-libs.x86_64 0:3.6.1-4.el7 libnet.x86_64 0:1.1.6-7.el7
  14. libnftnl.x86_64 0:1.0.8-3.el7 nftables.x86_64 1:0.8-14.el7
  15. protobuf-c.x86_64 0:1.0.2-3.el7 python-dmidecode.x86_64 0:3.12.2-4.el7
  16. python-syspurpose.x86_64 0:1.24.51-1.el7.centos runc.x86_64 0:1.0.0-69.rc10.el7_9
  17. slirp4netns.x86_64 0:0.4.3-4.el7_8 subscription-manager.x86_64 0:1.24.51-1.el7.centos
  18. subscription-manager-rhsm.x86_64 0:1.24.51-1.el7.centos subscription-manager-rhsm-certificates.x86_64 0:1.24.51-1.el7.centos
  19. ######
  20. # 版本
  21. podman -v
  22. # podman version 1.6.4

1.2 支持的命令

  1. podman --help
  2. ##--------
  3. 可用命令:
  4. attach 连接到运行的容器
  5. build 使用Containerfiles中的说明构建image
  6. commit 基于更改的容器创建新image
  7. container 管理容器
  8. cp 在容器和本地文件系统之间复制文件/文件夹
  9. create 创建但不启动容器
  10. diff 检查容器文件系统上的更改
  11. events 显示podman事件
  12. exec 在正在运行的容器中运行进程
  13. export 将容器的文件系统内容导出为tar归档
  14. generate 生成的结构化数据
  15. healthcheck 管理健康检查
  16. help 关于任何命令的帮助
  17. history 显示指定image的历史记录
  18. image 管理图像
  19. images 列出本地存储中的images
  20. import 导入tarball以创建文件系统images
  21. info 显示podman系统信息
  22. init 初始化一个或多个容器
  23. inspect 显示容器或image的配置
  24. kill 使用特定信号杀死一个或多个正在运行的容器
  25. load 从容器存档加载image
  26. login 登录到容器注册表
  27. logout 注销容器注册表
  28. logs 获取容器的日志
  29. mount 装载工作容器的根文件系统
  30. network 管理网络
  31. pause 暂停一个或多个容器中的所有进程
  32. play 播放Podman
  33. pod 管理POD
  34. port 列出容器的端口映射或特定映射
  35. ps 列出容器
  36. pull 从注册表中提取image
  37. push 将image推送到指定的目标
  38. restart 重新启动一个或多个容器
  39. rm 移除一个或多个容器
  40. rmi 从本地存储中删除一个或多个图像
  41. run 在新容器中运行命令
  42. save 将image保存到存档
  43. search 在注册表中搜索image
  44. start 启动一个或多个容器
  45. stats 显示容器资源使用统计信息的实时流
  46. stop 停止一个或多个容器
  47. system 管理Podman
  48. tag 向本地image添加其他名称
  49. top 显示容器的运行进程
  50. umount 卸载工作容器的根文件系统
  51. unpause 取消暂停一个或多个容器中的进程
  52. unshare 在修改的用户命名空间中运行命令
  53. varlink 运行varlink接口
  54. version 显示Podman版本信息
  55. volume 管理卷
  56. wait 阻止一个或多个容器
  57. 标志:
  58. --cgroup-manager string 要使用的Cgroup管理器(cgroupfs或systemd)(默认为“systemd”)
  59. --cni-config-dir string CNI网络配置目录路径
  60. --config string 详细说明容器服务器配置选项的libpod配置文件的路径
  61. --conmon string conmon二进制文件的路径
  62. --cpu-profile string cpu分析结果的路径
  63. --events-backend string 要使用的事件后端
  64. --help Podman帮助
  65. --hooks-dir strings 设置OCI挂钩目录路径(可以多次设置)
  66. --log-level string 高于指定级别的日志消息:调试、信息、警告、错误、致命或死机(默认为“错误”)
  67. --namespace string 设置libpod名称空间,用于在系统上创建容器和pod的单独视图
  68. --network-cmd-path string 用于配置网络的命令的路径
  69. --root string 存储数据(包括image)的根目录的路径
  70. --runroot string 存储所有状态信息的“运行目录”的路径
  71. --runtime string 用于运行容器的OCI兼容二进制文件的路径,默认为/usr/bin/runc
  72. --storage-driver string 选择用于管理image和容器存储的存储驱动程序(默认为覆盖)
  73. --storage-opt stringArray 用于将选项传递给存储驱动程序
  74. --syslog 将日志记录信息输出到syslog和控制台
  75. --tmpdir string tmp目录的路径
  76. --trace 启用opentracing输出
  77. -v, --version podman版本
  78. ##--------

1.2.1 基本常用命令:

  1. podman info
  2. podman version
  3. podman images
  4. podman rmi
  5. podman ps

1.2.2 查看podman信息

  1. # podman info
  2. host:
  3. BuildahVersion:1.9.0
  4. Conmon:package: podman-1.4.4-4.el7.x86_64
  5. path:/usr/libexec/podman/conmon
  6. version:'conmon version 0.3.0, commit: unknown'
  7. Distribution:
  8. distribution:'"rhel"'
  9. version:"7.7"
  10. MemFree:15117926400
  11. MemTotal:16656146432
  12. OCIRuntime:package: runc-1.0.0-65.rc8.el7.x86_64
  13. path:/usr/bin/runc //创建容器的后端runc
  14. version:'runc version spec: 1.0.1-dev'
  15. SwapFree:8455712768
  16. SwapTotal:8455712768
  17. arch: amd64
  18. cpus:8
  19. hostname: cephrook-cephMater.fyre.ibm.com
  20. kernel:3.10.0-1062.el7.x86_64
  21. os: linux
  22. rootless:false
  23. uptime:23h 8m 52.84s(Approximately 0.96 days)
  24. registries:
  25. blocked:null
  26. insecure:null
  27. search:- registry.access.redhat.com //拉取镜像的仓库顺序- docker.io
  28. - registry.fedoraproject.org
  29. - quay.io
  30. - registry.centos.org
  31. store:
  32. ConfigFile:/etc/containers/storage.conf
  33. ContainerStore:number:6
  34. GraphDriverName: overlay
  35. GraphOptions:null
  36. GraphRoot:/var/lib/containers/storage //存储容器的metadata
  37. GraphStatus:
  38. Backing Filesystem: xfs
  39. Native Overlay Diff:"true"
  40. Supports d_type:"true"
  41. Using metacopy:"false"
  42. ImageStore:number:5
  43. RunRoot:/var/run/containers/storage
  44. VolumePath:/var/lib/containers/storage/volumes

1.2.3 查看某个镜像的详细信息:

cat /var/lib/containers/storage/overlay-images/images.json | python -m json.tool

1.2.4 启动容器:

  1. $. podman run -p 80:80 --name=web -d nginx
  2. 416c3f3964a0ac6731a7864090131c44baead4f251ab914b718cb66ce1089bfa
  3. $. podman ps
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  5. 416c3f3964a0 docker.io/library/nginx:latest nginx -g daemon o... 5 seconds ago Up 5 seconds ago 0.0.0.0:80->80/tcp web
  6. $. ps -ef | grep nginx
  7. root 23477 23465 0 00:51 ? 00:00:00 nginx: master process nginx -g daemon off;
  8. 101 23491 23477 0 00:51 ? 00:00:00 nginx: worker process
  9. root 23541 8898 0 00:52 pts/2 00:00:00 grep --color=auto nginx
  10. $. pstree -H 23477
  11. systemd-+-agetty
  12. |-conmon-+-nginx---nginx
  13. | `-{conmon}

1.3 镜像地址修改

podman 全局配置文件:/etc/containers/registries.conf
用户单独配置文件:~/.config/containers/registries.conf
  1. cat /etc/containers/registries.conf
  2. # 备份
  3. cp /etc/containers/registries.conf /etc/containers/registries.conf.bak
  4. vim /etc/containers/registries.conf
  5. #######
  6. # 为了确保与docker的兼容性,我们加入了docker。默认搜索列表中的io。然而,红帽不管理、修补或维护docker的容器图像。io注册表。
  7. [registries.search]
  8. registries = ["docker.io", "registry.fedoraproject.org", "registry.access.redhat.com","registry.redhat.io", "registry.centos.org"]
  9. #########

当前问题-连不上源网站

搜索可以,下载不行。可能是版本太低

  1. podman search nginx
  2. podman pull nginx

1.4 卸载

CentOS 下 rpm包与 yum 安装与卸载

  1. # 查询一个包是否被安装
  2. rpm -q podman
  3. # 卸载
  4. rpm -e podman
  5. rm -rf /etc/containers

二、源码安装

centos 7 支持最高版本为 3.4.4

  1. golang 安装(当前最新版本: 1.18)

  1. conmon 安装(当前最新版本: 2.1.0)

  1. runc 安装(当前最新版本: 1.1.1)

  1. podman安装(centos 7支持最高版本: 3.4.4)

2.1 安装go

  1. # 临时关闭selinux
  2. $. setenforce 0
  3. # 安装golang,版本需要在 v1.6 以上
  4. $. wget https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz
  5. $. tar -xf go1.21.0.linux-amd64.tar.gz
  6. $. mv go /usr/local/
  7. $. ln -s /usr/local/go/bin/go /usr/local/bin/go
  8. $. go version
  9. go version go1.18 linux/amd64

2.2 安装依赖

  1. yum install -y \
  2. btrfs-progs-devel \
  3. containernetworking-plugins \
  4. containers-common \
  5. crun \
  6. device-mapper-devel \
  7. glib2-devel \
  8. glibc-devel \
  9. glibc-static \
  10. golang-github-cpuguy83-md2man \
  11. gpgme-devel \
  12. iptables \
  13. libassuan-devel \
  14. libgpg-error-devel \
  15. libseccomp-devel \
  16. libselinux-devel \
  17. make \
  18. pkgconfig

2.3 安装conmon 和 runc

  1. # conmon是用C语言编写的工具,用于单个容器的管理器
  2. wget https://github.com/containers/conmon/archive/refs/tags/v2.1.0.tar.gz
  3. tar xf v2.1.0.tar.gz
  4. cd conmon-2.1.0/
  5. export GOCACHE="$(mktemp -d)"
  6. make
  7. make podman
  8. #install -D -m 755 bin/conmon /usr/local/libexec/podman/conmon
  9. conmon --version
  10. #conmon version 2.0.8
  11. #commit: f85c8b1ce77b73bcd48b2d802396321217008762
  12. # runc是golang写的关于CLI工具,用于根据OCI规范在 Linux上生成和运行容器
  13. wget https://github.com/opencontainers/runc/releases/download/v1.1.1/runc.amd64
  14. chmod +x runc.amd64
  15. mv runc.amd64 /usr/local/bin/runc
  16. /usr/local/bin/runc -version
  17. #runc version 1.1.1
  18. #commit: v1.1.0-20-g52de29d7
  19. #spec: 1.0.2-dev
  20. #go: go1.17.6
  21. #libseccomp: 2.5.3

2.4 设置CNI网络

  1. mkdir /etc/containers
  2. wget https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
  3. wget https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json
  4. cp default-policy.json /etc/containers/default-policy.json
  5. cp registries.conf /etc/containers/registries.conf
  6. # 默认情况下,CNI网络配置文件下载好后,无需配置,即可使用 podman
  7. # registries.conf: 容器镜像注册配置文件,文件格式为 TOML
  8. # policy.json:证书安全策略文件,文件格式为 JSON

2.5 安装podman

  1. wget https://github.com/containers/podman/archive/refs/tags/v3.4.4.tar.gz
  2. tar -xf v3.4.4.tar.gz
  3. cd podman-3.4.4/
  4. make BUILDTAGS="selinux seccomp"
  5. # git clone -- https://github.com/cpuguy83/go-md2man /root/go/src/github.com/cpuguy83/go-md2man 超时问题
  6. vim Makefile
  7. ####
  8. # 800行 github.com/cpuguy83/go-md2man 改为
  9. gitee.com/mirrors/go-md2man
  10. ####
  11. # 再次make
  12. make BUILDTAGS="selinux seccomp"
  13. make install PREFIX=/usr
  14. # 会自动在usr的bin、lib、share 中 创建相关内容
  15. podman --version
  16. # podman version 3.4.4
  17. podman version
  18. #Version: 3.4.4
  19. #API Version: 3.4.4
  20. #Go Version: go1.18
  21. #Built: Wed Jun 29 15:51:56 2022
  22. #OS/Arch: linux/amd64

2.6 命令变化

  1. # 移除
  2. varlink #运行varlink接口
  3. --config string # 详细说明容器服务器配置选项的libpod配置文件的路径
  4. --cpu-profile string #cpu分析结果的路径
  5. --trace #启用opentracing输出
  6. # 新增
  7. auto-update #根据容器的自动更新策略自动更新容器
  8. machine #管理虚拟机
  9. manifest #操作清单列表和图像索引
  10. rename #重命名现有容器
  11. secret #管理机密
  12. untag #从本地映像中删除名称
  13. -c, --connection string #用于远程Podman服务的连接
  14. --identity string #SSH标识文件的路径,(CONTAINER_SSHKEY)
  15. -r, --remote #访问远程Podman服务(默认为false)
  16. --url string #访问Podman服务(CONTAINER_HOST)的URL(默认为“unix:/run/Podman/Podman.sock”)
  17. # 变化
  18. --events-backend string #要使用的事件后端(“file”|“journald”|“none”)(默认为“file”)
  19. --hooks-dir strings #设置OCI挂钩目录路径(可以多次设置)(默认值[/usr/share/containers/OCI/hooks.d])
  20. --tmpdir string #libpod状态内容的tmp目录路径。
  21. #注意:使用环境变量“TMPDIR”更改容器映像的临时存储位置“/var/tmp”。

2.7 运行hello-Word

  1. $. mv /etc/containers/default-policy.json /etc/containers/policy.json
  2. $. podman run hello-world
  3. $. podman ps -a
  4. $. podman images

2.8 nginx映像拉取并使用

2.8.1 拉取镜像

  1. podman pull nginx:alpine
  2. podman images

2.8.2 运行镜像

  1. podman run -it --rm -d -p 6080:80 --name web nginx:alpine
  2. #-i或**--interactive**:保持容器 STDIN 打开,即使未附加。
  3. #-t或 --tty:分配一个伪终端,将您的终端与容器的 STDIN 和 STDOUT 连接起来。
  4. #--rm:当容器退出或停止时自动删除容器。
  5. #-d:在后台运行容器,运行后分离容器。
  6. #-p 8080:80:映射容器和主机系统之间的端口。容器上的端口“80”映射到主机系统端口“8080”。
  7. #--name web:将新容器名称指定为“web”。
  8. #nginx:alpine :我们使用的图像是'nginx:alpine'。
  9. ## 打开您的网络浏览器并使用端口“6080”访问您的服务器 IP 地址

2.8.3 查看日志

  1. # 查看容器日志、最后几行
  2. podman logs web
  3. podman logs --tail 10 web

2.8.4 停止并检查

  1. # 停止并检查
  2. podman stop web
  3. podman ps
  4. podman ps -a

2.8.5 自定义目录挂载到镜像

  1. mkdir /root/podman/nginx-vm
  2. vim /root/podman/nginx-vm/index.html
  3. # 使用自定义页面启动容器
  4. podman run -it --rm -d -p 6080:80 --name web -v /root/podman/nginx-vm:/usr/share/nginx/html nginx:alpine
  5. # -v:指定容器的卷。'/root/podman/nginx-vm' 目录将挂载到容器目录 '/usr/share/nginx/html'

index.html

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Welcome to 容器 Nginx</title>
  6. </head>
  7. <body>
  8. <h2>Hello from Nginx 容器 - Managed with Podman</h2>
  9. </body>
  10. </html>

2.8.6 进入镜像

  1. podman exec -it web /bin/sh
  2. hostname
  3. ip a
  4. route -n
  5. exit # 退出

2.8.7 alias docker

$. echo "alias docker=podman" >> ~/.bashrc && source ~/.bashrc
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/696970
推荐阅读
相关标签
  

闽ICP备14008679号