podman和docker 都是容器,命令基本都一致,无非就是命令开头不一样(比如:docker查询运行容器 docker ps 、podman查询运行容器 podman ps)
注意:操作过程中需要注意jar包、Dockerfile、脚本等存放目录,服务器和容器中目录
容器启动jar包
一、简单方式
每次需更新jar包时,都要删除容器和镜像,并重新制作镜像和容器。流程及其繁琐,效率极低。
将打好的jar上传到服务器(比如jar包名为 test.jar),同时在jar包目录下新建 Dockerfile文件并编辑。
Dockerfile
FROM java:8
VOLUME /opt/app
ADD test.jar /test.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /test.jar" ]
#ENTRYPOINT ["sh","java","-jar","/test.jar","&"]
-Djava.security.egd=file:/dev/./urandom -jar /test.jar 为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
构建镜像
#-t后面是我们的镜像名 后面有一点的, 镜像名可以知道目录也可以不指定
#指定目录
podman build -t app/test .
#不指定目录
podman build -t test .
构建容器
-e:表示时区 -d:后台运行 -p:端口映射 本地8080映射到容器内的8080 -v:文件夹挂载,这样我们之后更新jar包的时候可以直接在宿主机中操作,而不需要进去容器
podman run -d --privileged=true -v /opt/app/test/logs:/logs --name test -e TZ=Asia/Shanghai -p 8080:8080 test
这样就启动成功,podman ps 查询已启动容器
二、jar包替换部署
每次更新jar的时候,不需要删除并重新制作镜像和容器,但是有一个缺点就是更新的jar包名字必须和之前Dockerfile中配置的一样,一旦jar名发送改变的时候需求删除并重新制作镜像和容器。创建容器的时候将jar包所在目录挂载出去,这样我们可以直接操作宿主机挂载的文件夹就可以了。
Dockerfile
将打好的jar上传到服务器(比如jar包名为 test.jar),同时在jar包目录下新建 Dockerfile文件并编辑。
FROM java:8
VOLUME /opt/app
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /test.jar" ]
构建镜像
#-t后面是我们的镜像名 后面有一点的, 镜像名可以知道目录也可以不指定
#指定目录
podman build -t app/test .
#不指定目录
podman build -t test .
构建容器
将宿主机的 /opt/app/test 目录与容器的 /opt/app 目录映射关联。这样的话,当jar包发生变动时,直接更新宿主机目录下的jar包即可。
-e:表示时区 -d:后台运行 -p:端口映射 本地8080映射到容器内的8080 -v:文件夹挂载,这样我们之后更新jar包的时候可以直接在宿主机中操作,而不需要进去容器、也就是将服务器目录和容器目录做映射
podman run -d --privileged=true -v /opt/app/test:/opt/app -v /opt/app/test/logs:/logs --name test -e TZ=Asia/Shanghai -p 8080:8080 test
这样就启动成功,podman ps 查询已启动容器
三、脚本部署
每次更新jar包、jar包每次都无需删除并重新制作镜像和容器,创建镜像的时候指定运行的脚本,创建容器的时候将jar包所在目录挂载出去,这样我们可以直接操作宿主机挂载的文件夹就可以了。
test.sh 脚本 需要和jar包放在一起
#2者选其一
java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /opt/app/test.jar
#java -jar /opt/app/test.jar
给脚本授权(不授权,启动容器会失败)
chmod +x test.sh
Dockerfile
将打好的jar上传到服务器(比如jar包名为 test.jar),同时在jar包目录下新建 Dockerfile文件并编辑。
FROM java:8
VOLUME /opt/app
CMD ["sh","-c","/opt/app/test.sh"]
CMD ["sh","-c","/opt/app/test.sh"] 表示容器启动的时候创建 .sh 脚本
RUN、ENTRYPOINT 、 cmd 区别:
RUN 执行命令并创建新的镜像层,RUN 经常用于安装软件包。
CMD 设置容器启动后默认执行的命令及其参数,但 CMD 能够被 docker run 后面跟的命令行参数替换。
ENTRYPOINT 配置容器启动时运行的命令。
构建镜像
#-t后面是我们的镜像名 后面有一点的, 镜像名可以知道目录也可以不指定
#指定目录
podman build -t app/test .
#不指定目录
podman build -t test .
构建容器
将宿主机的 /opt/app/test 目录与容器的 /opt/app 目录映射关联。这样的话,当jar包发生变动时,直接更新宿主机目录下的jar包即可。即使jar包名字发生变化,也需要再更新一下test.sh脚本。更新之后重启容器。
-e:表示时区 -d:后台运行 -p:端口映射 本地8080映射到容器内的8080 -v:文件夹挂载,这样我们之后更新jar包的时候可以直接在宿主机中操作,而不需要进去容器、也就是将服务器目录和容器目录做映射
podman run -d --privileged=true -v /opt/app/test:/opt/app -v /opt/app/test/logs:/logs --name test -e TZ=Asia/Shanghai -p 8080:8080 test
这样就启动成功,podman ps 查询已启动容器
容器启动war包
拉取tomcat镜像
podman pull tomcat:9.0.50
这里在/opt/ 目录下创建tomcat目录,在tomcat目录下创建 webapps、logs、conf 文件夹,在webapps目录下创建config文件夹
wabapps:存放war
logs:运行时日志输出
conf:tomcat的一些xml(比如:server.xml 修改端口,),也可以不需要
运行容器
podman run --privileged=true -v /opt/tomcat/webapps/:/usr/local/tomcat/webapps/ -v /opt/tomcat/conf/:/usr/local/tomcat/conf/ -v /opt/tomcat/logs/:/usr/local/tomcat/logs -v /opt/tomcat/webapps/config:/usr/local/tomcat/conf_app/ -e TZ=Asia/Shanghai -p 8080:8080 --name test -d tomcat:9.0.50
这样就启动成功,podman ps 查询已启动容器
容器安装字体
先按liunx上安装字体
#安装字体
yum -y install fontconfig
#创建目录
mkdir -p /usr/share/fonts/my_fonts
#进入C:\Windows\Fonts,该文件夹下就存放相关字体,比如将simhei.tty、simsun.ttc拷贝到linux 目录/usr/share/fonts/my_fonts下即可
#安装字体索引指令
yum install mkfontscale
#生成字体索引,进入目录 cd /usr/share/fonts/my_fonts,执行索引字体生成
mkfontscale
#查看是否安装成功
fc-list :lang=zh
容器创建成功后执行
podman cp /usr/share/fonts/ 容器名称:/usr/share/fonts/
在dockerFile中加入,copy的原文件目录需要和dockerFile保持一致
COPY Songti.ttc /usr/share/fonts/
RUN fc-cache -vf
安装podman
//安装podman
[root@localhost ~]# yum -y install podman
//仓库配置
[root@localhost ~]# vim /etc/containers/registries.conf
[registries.search]
registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io'] //这个是查找,从这三个地方查找,如果只留一个,则只在一个源里查找
unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"] //这里也要改为一个
[registries.insecure]
registries = [10.0.0.1] //这里写那些http的仓库,比如harbor
//配置加速器
[registries.search]
registries = ['https://l9h8fu9j.mirror.aliyuncs.com','docker.io']
命令及语法
Dockerfile 指令简洁版
FROM:构建镜像基于哪个镜像
MAINTAINER:镜像维护者姓名或邮箱地址
RUN:构建镜像时运行的指令
CMD:运行容器时执行的shell环境
VOLUME:指定容器挂载点到宿主机自动生成的目录或其他容器
USER:为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR:为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH:健康检查
ARG:构建时指定的一些参数
EXPOSE:声明容器的服务端口(仅仅是声明)
ENV:设置容器环境变量
ADD:拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT:运行容器时执行的shell命令
指令详解版
COPY:
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
格式:
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
COPY hom* /mydir/
COPY hom?.txt /mydir/
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
ADD:
ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
CMD:
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在podman run 时运行。
RUN 是在 podman build。
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 podman run 命令行参数中指定要运行的程序所覆盖。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
格式:
CMD <shell 命令>
CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。
ENTRYPOINT:
类似于 CMD 指令,但其不会被 podman run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
但是, 如果运行 podman run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序。
优点:在执行 podman run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
格式:
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会提到。
示例:
假设已通过 Dockerfile 构建了 nginx:test 镜像:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
1、不传参运行
$ podman run nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf
2、传参运行
$ podman run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
nginx -c /etc/nginx/new.conf
ENV:
设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
格式:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:
ENV NODE_VERSION 7.2.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc"
ARG:
构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 podman build 的过程中有效,构建好的镜像内不存在此环境变量。
构建命令 podman build 中可以用 --build-arg <参数名>=<值> 来覆盖。
格式:
ARG <参数名>[=<默认值>]
VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
作用:
避免重要的数据,因容器重启而丢失,这是非常致命的。
避免容器不断变大。
格式:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
在启动容器 podman run 的时候,我们可以通过 -v 参数修改挂载点。
EXPOSE:
仅仅只是声明端口。
作用:
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 podman run -P 时,会自动随机映射 EXPOSE 的端口。
格式:
EXPOSE <端口1> [<端口2>...]
WORKDIR:
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
podman build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。
格式:
WORKDIR <工作目录路径>
USER:
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
格式:
USER <用户名>[:<用户组>]
HEALTHCHECK
用于指定某个程序或者指令来监控 podman 容器服务的运行状态。
格式:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
ONBUILD:
用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这时执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
格式:
ONBUILD <其它指令>
LABEL:
LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
比如我们可以添加镜像的作者:
LABEL org.opencontainers.image.authors="runoob"
build 语法
podman build [OPTIONS] PATH | URL | -
OPTIONS说明:
--build-arg=[] :设置镜像创建时的变量;
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--force-rm :设置镜像过程中删除中间容器;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值,内存限制,格式是数字加单位,单位可以为 b,k,m,g。最小为 4M;
--memory-swap :设置内存+交换分区(swap)大小总限制,"-1"表示不限swap,必须必-m设置的大 --memory-swap=1G;
--no-cache :创建镜像的过程不使用缓存;
--pull :尝试去更新镜像的新版本;
--quiet, -q :安静模式,成功后只输出镜像 ID;
--rm :设置镜像成功后删除中间容器;
--shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--squash :将 Dockerfile 中所有的操作压缩为一层。
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--network: 默认 default。在构建期间设置RUN指令的网络模式
实例
使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。
podman build -t runoob/ubuntu:v1 .
使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
podman build github.com/creack/docker-firefox
也可以通过 -f Dockerfile 文件的位置:
$ podman build -f /path/to/a/Dockerfile .
在 podman 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:
$ podman build -t test/myapp .
Sending build context to podman daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD
run 语法
语法
podman run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
实例
使用podman镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
podman run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
podman run -P -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
podman run -p 80:80 -v /data:/data -d nginx:latest
绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ podman run -p 127.0.0.1:80:8080/tcp ubuntu bash
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ podman run -it nginx:latest /bin/bash
root@b8573233d675:/#
podman、docker常用命令(2个基本一致)
#查看PODMAN的存储位置等信息
podman info
#podman资源占用查看
podman stats
镜像命令
查看镜像
# 查看镜像列表
podman images
# 显示所有镜像(包括中间层)
podman images -a
# 只显示镜像ID
podman images -q
# 查看所有镜像,且只显示镜像id
podman images -qa
# 显示镜像的摘要信息
podman images --digests
# 显示完整的镜像信息
podman images --no-trunc
#查看镜像详情
podman inspect 镜像id
搜索镜像
# 搜索镜像
podman search 镜像名
# 显示完整的镜像描述
podman search --no-trunc 镜像名
# 列出收藏数不小于指定值的镜像
podman search -s 镜像名
# 只列出podman Hub自动构建类型的镜像
podman search --automated 镜像名
拉取镜像
podman pull 镜像名:标签
删除镜像
# 如果不写TAG,默认删除最新版本latest
podman rmi 镜像名
# 删除单个镜像:
podman rmi 镜像名称:[TAG]
# 删除多个镜像
podman rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
# 删除全部镜像
podman rmi -f $(podman images -qa)
镜像导出
# 将镜像导出为tar包
podman save 镜像名称:标签 -o 备份镜像名称.tar
镜像导入
# 将镜像.tar导入到镜像
podman load -i 备份镜像名.tar
修改镜像tag
podman tag 镜像名称:标签 新的镜像名称:新的标签
从容器创建新镜像(不推荐)
podman commit 容器名 新镜像名
容器命令
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将宿主机端口映射到容器端口
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 $(podman 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
#退出容器
exit
容器日志
# 容器日志
# 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