Podman跟docker一样是一个无守护进程的容器引擎,用于在Linux系统上开发,管理和运行Open Container Initiative(OCI)容器和容器镜像。源代码开源在github上。
Podman提供了一个与Docker兼容的命令行前端,它可以简单地作为Docker cli,简单地说你可以直接添加别名:alias docker = podman来使用podman。
Podman控制下的容器可以由root用户运行,也可以由非特权用户运行。Podman管理整个容器的生态系统,其包括pod,容器,容器镜像,和使用libpod library的容器卷。Podman专注于帮助您维护和修改OCI容器镜像的所有命令和功能,例如拉取和标记。它允许您在生产环境中创建,运行和维护从这些映像创建的容器。
下面我们来说一下podman的安装及常用操作。
一、podman安装
yum install -y podman
注意centos8以上已默认安装好了podman
镜像加速为了加快镜像的推送拉取速度,我们配置镜像加速,使用阿里云镜像加速器
备份conf文件
cp /etc/containers/registries.conf{,.bak}
编辑
vim /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "uyah70su.mirror.aliyuncs.com"
拉取镜像
$ podman pull centos
查看镜像
$ podman images
运行镜像
$ podman run -itd --name test centos sleep 3600
查看运行中的镜像
$ podman ps
二、podman发布自定义镜像
使用通用 Dockerfile 构建镜像的方式与 Docker 相同:
$ vim Dockerfile
输入一下内容
FROM fedora:28 RUN dnf -y install cowsay
下载编译自定义镜像
$ podman build . -t hello-world
运行镜像
$ podman run --rm -it hello-world cowsay "Hello!"
为了构建容器,Podman 在后台调用另一个名为 Buildah 的工具。
除了构建和运行容器外,Podman 还可以与容器托管进行交互。要登录容器注册库,例如广泛使用的 Docker Hub,请运行:
$ podman login docker.io
为了推送我刚刚构建的镜像,我只需打上标记来代表特定的容器注册库,然后直接推送它。
$ podman -t hello-world docker.io/asamalik/hello-world
$ podman push docker.io/asamalik/hello-world
三、使用docker命令操作podman
我们可以使用docker的常用命令来操作podman,只要在环境变量中增加一个别名即可:$ echo "alias docker=podman" >> .bashrc
使环境变量生效
$ source .bashrc
使用docker命令查看podman运行中的容器
$ docker ps -a
四、完整的podman命令大全
查看podman详情可以查看podman的存储位置等信息
podman info
podman镜像管理
查看镜像
# 查看镜像列表
podman images
# 显示所有镜像(包括中间层)
podman images -a
# 只显示镜像ID
podman images -q
# 查看所有镜像,且只显示镜像id
podman images -qa
# 显示镜像的摘要信息
podman images --digests
# 显示完整的镜像信息
podman images --no-trunc
搜索镜像
# 搜索镜像
podman search 镜像名
# 显示完整的镜像描述
podman search --no-trunc 镜像名
# 列出收藏数不小于指定值的镜像
podman search -s 镜像名
# 只列出Docker Hub自动构建类型的镜像
podman search --automated 镜像名
拉取镜像
podman pull 镜像名:标签
删除镜像
# 如果不写TAG,默认删除最新版本latest
podman rmi 镜像名
# 删除单个镜像:
podman rmi 镜像名称:[TAG]
# 删除多个镜像
podman rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
# 删除全部镜像
podman rmi -f $(docker images -qa)
镜像导出
# 将镜像导出为tar包
podman save 镜像名称:标签 -o 备份镜像名称.tar
镜像导入
# 将镜像.tar导入到镜像
podman load -i 备份镜像名.tar
修改镜像tag
podman tag 镜像名称:标签 新的镜像名称:新的标签
从容器创建新镜像(不推荐)
podman commit 容器名 新镜像名
podman容器管理
podman运行容器
# 运行实例
podman run -dti 镜像名
# --name="容器名":为容器指定一个名称;
podman run --name tomcat_01 镜像名
# -i:以交互模式运行容器,通常与-t或者-d同时使用;组合参数:-dti
# -t:为容器重新分配一个伪输入终端,通常与-i同时使用;组合参数:-dti
# -d: 后台运行容器,并返回容器ID;组合参数:-dti
podman run --name tomcat_01 -dti 镜像名
# -p将宿主机端口映射到容器端口
## 起始就是用内核模块iptables创建一个dnat
## 可以使用iptables -L -t nat -n 查看到dnat规则
podman run -p 8080:8080 tomcat
# -P:大写的P,表示容器内部端口随机映射到主机的端口
## 格式为:-P 容器端口
podman run -P 8080 tomcat
# -v将(宿主机目录)挂载到(容器目录)
podman run -v /home/webapps/test:/usr/local/tomcat/webapps/test
# -e传递环境变量
podman run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
运行容器示例:
podman run --name tomcat8080 -dit -p 8080:8080 --restart=always -v /dta/webapps/test:/usr/local/tomcat/webapps/test tomcat
podman 运行 指定容器名 容器名 -d:守护进程;-t: tty伪终端;-i: 允许交互(输入) -p:将宿主机端口映射到容器端口 宿主机端口:容器端口 将(宿主机目录)挂载到(容器目录) 宿主机目录:容器目录
podman run -name tomcat -dti -p 8080:8080 -v /dta/webapps/test:/usr/local/tomcat/webapps/test
ps查看容器
# 查看正在运行的容器
podman ps
# 查看所有容器
# -a :显示所有的容器,包括未运行的。
podman ps -a
# 显示最近创建的2个容器
# -n :列出最近创建的n个容器。
podman ps -n 2
#查看停止的容器
# -f :根据条件过滤显示的内容。
podman ps -f status=exited
# --format :指定返回值的模板文件。
# -l :显示最近创建的容器。
# --no-trunc :不截断输出。
# -q :静默模式,只显示容器编号。
# -s :显示总的文件大小。
启动容器
# 启动容器
# podman start 容器名/容器ID
podman start mycentos00
停止容器
# podman stop 停止容器
# podman stop 可以停止运行的容器 本质是发送一个 SIGTERM 信号
# podman stop 容器ID or 容器名
podman stop 865b755cd0b2
重启容器
# podman restart 重启容器
# podman restart 容器ID or 容器名
podman restart f9cadea1a5e7
删除容器
# podman rm 删除容器
## 查看容器
podman ps -aq
## 删除容器
podman rm 容器id
# 强制删除
podman rm -f 容器ID
# 删除多个容器
## podman rm -f 容器ID1 容器ID2 中间空格隔开
podman rm 865b755cd0b2 ce6343ee288f
# 删除所有容器
podman rm -f $(docker ps -qa)
强制停止容器
# 暴力停止,直接杀掉进程 (不推荐)
# podman kill 强制停止容器
# podman kill 向容器进程发送 SIGKILL 信号
# podman kill 容器ID or 容器名
# podman kill 容器id(推荐,常用)
podman kill f9cadea1a5e7
暂停/恢复容器
# podman 暂停/恢复容器
# 让容器暂停工作
podman pause 容器名/容器id
# 让容器恢复运行
podman unpause 容器名/容器id
# 进入容器
podman exec -ti 容器名 bash
容器日志
# 容器日志
# podman logs [OPTIONS] 容器名
# 显示更多的信息
podman logs --details 容器id
# 跟踪实时日志
podman logs -f 容器id
podman logs --follow 容器id
# 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
podman logs --since 42m 容器id
# 从日志末尾显示多少行日志, 默认是all
podman logs--tail 100 容器id #100行
podman logs 容器id # 默认all
# 显示时间戳
podman logs -t 容器id
podman logs --timestamps 容器id
# 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
podman logs --until 42m 容器id
podman资源占用查看
podman stats
五、podman与docker不同
Podman | Docker | |
---|---|---|
架构 | 无守护进程,可以在启动容器的用户下运行容器 | 使用守护进程来创建镜像和运行容器 |
安全 | 允许容器使用Rootless特权 | 守护进程拥有Root权限 |
运行容器 | 需要另一个工具来管理服务并支持后台容器的运行 | 使用守护进程管理和运行容器 |
构建镜像 | 需要容器镜像生成器Buildah的辅助 | 可以自己构建容器镜像 |
理念 | 采用模块化的方法,依靠专门的工具来完成特定的任务 | 一个独立的、强大的工具 |
使用 | 兼容大部分Docker命令,有专门的docker兼容插件 | 使用自己的命令 |
参考:https://blog.csdn.net/omaidb/article/details/121091466
网友评论0