podman安装使用笔记及命令大全

<a href='/tag/podman.html'>podman</a>安装使用笔记及命令大全

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安装

centos安装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

五、podmandocker不同

 PodmanDocker
架构无守护进程,可以在启动容器的用户下运行容器使用守护进程来创建镜像和运行容器
安全允许容器使用Rootless特权守护进程拥有Root权限
运行容器需要另一个工具来管理服务并支持后台容器的运行使用守护进程管理和运行容器
构建镜像需要容器镜像生成器Buildah的辅助可以自己构建容器镜像
理念采用模块化的方法,依靠专门的工具来完成特定的任务一个独立的、强大的工具
使用兼容大部分Docker命令,有专门的docker兼容插件使用自己的命令

参考:https://blog.csdn.net/omaidb/article/details/121091466

{{collectdata}}

网友评论0