赞
踩
参考: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,比如 runc, Podman由两部分组成, Podman CLI 和 conmon, Podman CLI方便用户交互,conmon负责container runtime,主要包括监控,日志,TTY分配等,简而言之,conmon是所有容器进程的父进程。
- [root@cephrook-cephMater ~]# pstree -p
- systemd(1)-+-agetty(1299)
- |-conmon(1954)-+-nginx(1975)---nginx(1988)
- | `-{conmon}(1956)
Podman Desktop 能否取代 Docker Desktop呢?
Centos8安装podman,自定义修改镜像,保存本地容器到私有仓库
如何在Ubuntu 20.04上安装和使用Podman(Docker替代方案)?
- # yum 搜索
- yum search podman
- yum search all podman
-
- # 安装
- yum -y install podman
-
- ######
- 已安装:
- podman.x86_64 0:1.6.4-32.el7_9
-
- 作为依赖被安装:
- conmon.x86_64 2:2.0.8-1.el7 container-selinux.noarch 2:2.119.2-1.911c772.el7_8
- containernetworking-plugins.x86_64 0:0.8.3-3.el7.centos containers-common.x86_64 1:0.1.40-11.el7_8
- criu.x86_64 0:3.12-2.el7 fuse-overlayfs.x86_64 0:0.7.2-6.el7_8
- fuse3-libs.x86_64 0:3.6.1-4.el7 libnet.x86_64 0:1.1.6-7.el7
- libnftnl.x86_64 0:1.0.8-3.el7 nftables.x86_64 1:0.8-14.el7
- protobuf-c.x86_64 0:1.0.2-3.el7 python-dmidecode.x86_64 0:3.12.2-4.el7
- python-syspurpose.x86_64 0:1.24.51-1.el7.centos runc.x86_64 0:1.0.0-69.rc10.el7_9
- slirp4netns.x86_64 0:0.4.3-4.el7_8 subscription-manager.x86_64 0:1.24.51-1.el7.centos
- 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
- ######
- # 版本
- podman -v
- # podman version 1.6.4
- podman --help
- ##--------
- 可用命令:
- attach 连接到运行的容器
- build 使用Containerfiles中的说明构建image
- commit 基于更改的容器创建新image
- container 管理容器
- cp 在容器和本地文件系统之间复制文件/文件夹
- create 创建但不启动容器
- diff 检查容器文件系统上的更改
- events 显示podman事件
- exec 在正在运行的容器中运行进程
- export 将容器的文件系统内容导出为tar归档
- generate 生成的结构化数据
- healthcheck 管理健康检查
- help 关于任何命令的帮助
- history 显示指定image的历史记录
- image 管理图像
- images 列出本地存储中的images
- import 导入tarball以创建文件系统images
- info 显示podman系统信息
- init 初始化一个或多个容器
- inspect 显示容器或image的配置
- kill 使用特定信号杀死一个或多个正在运行的容器
- load 从容器存档加载image
- login 登录到容器注册表
- logout 注销容器注册表
- logs 获取容器的日志
- mount 装载工作容器的根文件系统
- network 管理网络
- pause 暂停一个或多个容器中的所有进程
- play 播放Podman
- pod 管理POD
- port 列出容器的端口映射或特定映射
- ps 列出容器
- pull 从注册表中提取image
- push 将image推送到指定的目标
- restart 重新启动一个或多个容器
- rm 移除一个或多个容器
- rmi 从本地存储中删除一个或多个图像
- run 在新容器中运行命令
- save 将image保存到存档
- search 在注册表中搜索image
- start 启动一个或多个容器
- stats 显示容器资源使用统计信息的实时流
- stop 停止一个或多个容器
- system 管理Podman
- tag 向本地image添加其他名称
- top 显示容器的运行进程
- umount 卸载工作容器的根文件系统
- unpause 取消暂停一个或多个容器中的进程
- unshare 在修改的用户命名空间中运行命令
- varlink 运行varlink接口
- version 显示Podman版本信息
- volume 管理卷
- wait 阻止一个或多个容器
-
- 标志:
- --cgroup-manager string 要使用的Cgroup管理器(cgroupfs或systemd)(默认为“systemd”)
- --cni-config-dir string CNI网络配置目录路径
- --config string 详细说明容器服务器配置选项的libpod配置文件的路径
- --conmon string conmon二进制文件的路径
- --cpu-profile string cpu分析结果的路径
- --events-backend string 要使用的事件后端
- --help Podman帮助
- --hooks-dir strings 设置OCI挂钩目录路径(可以多次设置)
- --log-level string 高于指定级别的日志消息:调试、信息、警告、错误、致命或死机(默认为“错误”)
- --namespace string 设置libpod名称空间,用于在系统上创建容器和pod的单独视图
- --network-cmd-path string 用于配置网络的命令的路径
- --root string 存储数据(包括image)的根目录的路径
- --runroot string 存储所有状态信息的“运行目录”的路径
- --runtime string 用于运行容器的OCI兼容二进制文件的路径,默认为/usr/bin/runc
- --storage-driver string 选择用于管理image和容器存储的存储驱动程序(默认为覆盖)
- --storage-opt stringArray 用于将选项传递给存储驱动程序
- --syslog 将日志记录信息输出到syslog和控制台
- --tmpdir string tmp目录的路径
- --trace 启用opentracing输出
- -v, --version podman版本
- ##--------
- podman info
- podman version
- podman images
- podman rmi
- podman ps
- # podman info
- host:
- BuildahVersion:1.9.0
- Conmon:package: podman-1.4.4-4.el7.x86_64
- path:/usr/libexec/podman/conmon
- version:'conmon version 0.3.0, commit: unknown'
- Distribution:
- distribution:'"rhel"'
- version:"7.7"
- MemFree:15117926400
- MemTotal:16656146432
- OCIRuntime:package: runc-1.0.0-65.rc8.el7.x86_64
- path:/usr/bin/runc //创建容器的后端runc
- version:'runc version spec: 1.0.1-dev'
- SwapFree:8455712768
- SwapTotal:8455712768
- arch: amd64
- cpus:8
- hostname: cephrook-cephMater.fyre.ibm.com
- kernel:3.10.0-1062.el7.x86_64
- os: linux
- rootless:false
- uptime:23h 8m 52.84s(Approximately 0.96 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:6
- GraphDriverName: overlay
- GraphOptions:null
- GraphRoot:/var/lib/containers/storage //存储容器的metadata
- GraphStatus:
- Backing Filesystem: xfs
- Native Overlay Diff:"true"
- Supports d_type:"true"
- Using metacopy:"false"
- ImageStore:number:5
- RunRoot:/var/run/containers/storage
- VolumePath:/var/lib/containers/storage/volumes
cat /var/lib/containers/storage/overlay-images/images.json | python -m json.tool
$. podman run -p 80:80 --name=web -d nginx 416c3f3964a0ac6731a7864090131c44baead4f251ab914b718cb66ce1089bfa $. podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 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 $. ps -ef | grep nginx root 23477 23465 0 00:51 ? 00:00:00 nginx: master process nginx -g daemon off; 101 23491 23477 0 00:51 ? 00:00:00 nginx: worker process root 23541 8898 0 00:52 pts/2 00:00:00 grep --color=auto nginx $. pstree -H 23477 systemd-+-agetty |-conmon-+-nginx---nginx | `-{conmon}
podman 全局配置文件:/etc/containers/registries.conf
用户单独配置文件:~/.config/containers/registries.conf
- cat /etc/containers/registries.conf
- # 备份
- cp /etc/containers/registries.conf /etc/containers/registries.conf.bak
- vim /etc/containers/registries.conf
- #######
- # 为了确保与docker的兼容性,我们加入了docker。默认搜索列表中的io。然而,红帽不管理、修补或维护docker的容器图像。io注册表。
- [registries.search]
- registries = ["docker.io", "registry.fedoraproject.org", "registry.access.redhat.com","registry.redhat.io", "registry.centos.org"]
- #########
当前问题-连不上源网站
搜索可以,下载不行。可能是版本太低
- podman search nginx
- podman pull nginx
- # 查询一个包是否被安装
- rpm -q podman
-
- # 卸载
- rpm -e podman
- rm -rf /etc/containers
centos 7 支持最高版本为 3.4.4
golang 安装(当前最新版本: 1.18)
conmon 安装(当前最新版本: 2.1.0)
runc 安装(当前最新版本: 1.1.1)
podman安装(centos 7支持最高版本: 3.4.4)
- # 临时关闭selinux
- $. setenforce 0
-
- # 安装golang,版本需要在 v1.6 以上
- $. wget https://golang.google.cn/dl/go1.21.0.linux-amd64.tar.gz
-
- $. tar -xf go1.21.0.linux-amd64.tar.gz
-
- $. mv go /usr/local/
-
- $. ln -s /usr/local/go/bin/go /usr/local/bin/go
-
- $. go version
- go version go1.18 linux/amd64
yum install -y \ btrfs-progs-devel \ containernetworking-plugins \ containers-common \ crun \ device-mapper-devel \ glib2-devel \ glibc-devel \ glibc-static \ golang-github-cpuguy83-md2man \ gpgme-devel \ iptables \ libassuan-devel \ libgpg-error-devel \ libseccomp-devel \ libselinux-devel \ make \ pkgconfig
- # conmon是用C语言编写的工具,用于单个容器的管理器
- wget https://github.com/containers/conmon/archive/refs/tags/v2.1.0.tar.gz
- tar xf v2.1.0.tar.gz
- cd conmon-2.1.0/
- export GOCACHE="$(mktemp -d)"
- make
- make podman
-
- #install -D -m 755 bin/conmon /usr/local/libexec/podman/conmon
- conmon --version
- #conmon version 2.0.8
- #commit: f85c8b1ce77b73bcd48b2d802396321217008762
-
- # runc是golang写的关于CLI工具,用于根据OCI规范在 Linux上生成和运行容器
- wget https://github.com/opencontainers/runc/releases/download/v1.1.1/runc.amd64
- chmod +x runc.amd64
- mv runc.amd64 /usr/local/bin/runc
- /usr/local/bin/runc -version
- #runc version 1.1.1
- #commit: v1.1.0-20-g52de29d7
- #spec: 1.0.2-dev
- #go: go1.17.6
- #libseccomp: 2.5.3
- mkdir /etc/containers
- wget https://src.fedoraproject.org/rpms/containers-common/raw/main/f/registries.conf
- wget https://src.fedoraproject.org/rpms/containers-common/raw/main/f/default-policy.json
- cp default-policy.json /etc/containers/default-policy.json
- cp registries.conf /etc/containers/registries.conf
- # 默认情况下,CNI网络配置文件下载好后,无需配置,即可使用 podman
- # registries.conf: 容器镜像注册配置文件,文件格式为 TOML
- # policy.json:证书安全策略文件,文件格式为 JSON
- wget https://github.com/containers/podman/archive/refs/tags/v3.4.4.tar.gz
- tar -xf v3.4.4.tar.gz
- cd podman-3.4.4/
-
- make BUILDTAGS="selinux seccomp"
- # git clone -- https://github.com/cpuguy83/go-md2man /root/go/src/github.com/cpuguy83/go-md2man 超时问题
- vim Makefile
- ####
- # 800行 github.com/cpuguy83/go-md2man 改为
- gitee.com/mirrors/go-md2man
-
- ####
- # 再次make
- make BUILDTAGS="selinux seccomp"
- make install PREFIX=/usr
-
- # 会自动在usr的bin、lib、share 中 创建相关内容
- podman --version
-
- # podman version 3.4.4
- podman version
- #Version: 3.4.4
- #API Version: 3.4.4
- #Go Version: go1.18
- #Built: Wed Jun 29 15:51:56 2022
- #OS/Arch: linux/amd64
- # 移除
- varlink #运行varlink接口
- --config string # 详细说明容器服务器配置选项的libpod配置文件的路径
- --cpu-profile string #cpu分析结果的路径
- --trace #启用opentracing输出
-
- # 新增
- auto-update #根据容器的自动更新策略自动更新容器
- machine #管理虚拟机
- manifest #操作清单列表和图像索引
- rename #重命名现有容器
- secret #管理机密
- untag #从本地映像中删除名称
- -c, --connection string #用于远程Podman服务的连接
- --identity string #SSH标识文件的路径,(CONTAINER_SSHKEY)
- -r, --remote #访问远程Podman服务(默认为false)
- --url string #访问Podman服务(CONTAINER_HOST)的URL(默认为“unix:/run/Podman/Podman.sock”)
-
- # 变化
- --events-backend string #要使用的事件后端(“file”|“journald”|“none”)(默认为“file”)
- --hooks-dir strings #设置OCI挂钩目录路径(可以多次设置)(默认值[/usr/share/containers/OCI/hooks.d])
- --tmpdir string #libpod状态内容的tmp目录路径。
- #注意:使用环境变量“TMPDIR”更改容器映像的临时存储位置“/var/tmp”。
- $. mv /etc/containers/default-policy.json /etc/containers/policy.json
- $. podman run hello-world
- $. podman ps -a
- $. podman images
- podman pull nginx:alpine
- podman images
- podman run -it --rm -d -p 6080:80 --name web nginx:alpine
- #-i或**--interactive**:保持容器 STDIN 打开,即使未附加。
- #-t或 --tty:分配一个伪终端,将您的终端与容器的 STDIN 和 STDOUT 连接起来。
- #--rm:当容器退出或停止时自动删除容器。
- #-d:在后台运行容器,运行后分离容器。
- #-p 8080:80:映射容器和主机系统之间的端口。容器上的端口“80”映射到主机系统端口“8080”。
- #--name web:将新容器名称指定为“web”。
- #nginx:alpine :我们使用的图像是'nginx:alpine'。
- ## 打开您的网络浏览器并使用端口“6080”访问您的服务器 IP 地址
- # 查看容器日志、最后几行
- podman logs web
- podman logs --tail 10 web
- # 停止并检查
- podman stop web
- podman ps
- podman ps -a
- mkdir /root/podman/nginx-vm
- vim /root/podman/nginx-vm/index.html
-
- # 使用自定义页面启动容器
- podman run -it --rm -d -p 6080:80 --name web -v /root/podman/nginx-vm:/usr/share/nginx/html nginx:alpine
- # -v:指定容器的卷。'/root/podman/nginx-vm' 目录将挂载到容器目录 '/usr/share/nginx/html'
index.html
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>Welcome to 容器 Nginx</title>
- </head>
- <body>
- <h2>Hello from Nginx 容器 - Managed with Podman</h2>
- </body>
- </html>
- podman exec -it web /bin/sh
- hostname
- ip a
- route -n
- exit # 退出
$. echo "alias docker=podman" >> ~/.bashrc && source ~/.bashrc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。