上一篇文章,我们已经在 Centos 7
上安装 podman 3.4.4
,这次我们来看如何使用podman
,如果熟悉docker
,那么对于操作podman
应该更加得心应手。
接上一回
上次centos 7
安装podman 3.4.4
, 我安装完了以后,就用root
用户测试了一下没问题就撤了,今天来写文章的时候,发现普通用户上去执行run
命令会失败,查阅了资料,记录一下
使用debug 跟踪一下命令 ./bin/podman --log-level=debug run -d nginx
报错如下:
解决:
上述异常经过排查,排查过程就不追溯了,是因为内核过低引起的,使用 uname -r
可以查看内核版本,若小于4.18.0
则需要升级才行。
参考:
升级内核(升级内核需要root
权限才行哈)
ps: 本次机器是测试机器,所以内核升级为最新内核,实际线上机器视情况而定,一般不建议升级为最新版本,除非你又特殊需求
centos7 kernel rpm 下载页面:elrepo.org/linux/kerne…
mkdir kernel cd kernel/ wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.188-1.el7.elrepo.x86_64.rpm wget https://lmdops.oss-cn-shanghai.aliyuncs.com/ops/oss/2022-04-02-18-25-27/kernel-lt-devel-5.4.188-1.el7.elrepo.x86_64.rpm yum localinstall kernel-lt-* -y grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)" # reboot # 为避免复制粘贴,所以reboot 给屏蔽了的,更新完内核,需要重启才行 uname -r
确认完毕后,再次启动podman
容器就正常了。
我会列举podman
操作容器的相关命令,每条命令都跟上实例,当和docker
不一致时,会着重解释这是为什么。
快速尝试
可以使用 podman run --help
获取帮助
其中,常用podman run
参数
podman run [options] IMAGE [COMMAND [ARG...]]
选项为
--detach / -d
: 将容器运行在后台,并且打印运行容器的ID
--attach / -a
: 启动容器,并且连接到 标准输入(stdin)/标准输出(stdout)/错误输出(stderr)(将容器放至前台运行)
--name / -n
: 为容器分配名称,若没有分配,则会为其分配随机字符串
--rm
: 当容器退出后删除容器
--rmi
: 当容器退出后若没有容器再使用该镜像时,会删除镜像,通常与--rm
共同搭配使用
--tty / -t
: 为容器分配tty
--interactive / -i
: 即使容器未在前台运行,也将stdout连接出来,即 交互式(-a 包含了该操作)
使用 alpine
输出 Hello World
命令: podman run alpine echo 'hello world'
创建 alpine
容器,并且建立交互并且查看其ip后退出
命令: podman run -it alpine /bin/sh
-i
: 打开交互式,若不适用-t
选项,是无法输入任何命令的
-t
: 打开终端,如果不适用-i
选项,则打开后会立马退出掉
在后台运行nginx
命令: podman run -d nginx
-d
: 将容器启动运行至后台
列出容器
podman
比 docker
ps
命令 新增了 如下参数
-p, --pod
列出POD相关信息
-w, --watch uint
以秒为单位输出ps
使用podman ps --help
可以查看帮助
查看正在运行的容器
使用 podman ps
可以查看
使用podman ps --ns
还可以显示用户空间
查看所有容器
使用podman ps -a
可以查看
仅查看容器ID
使用podman ps -q
可以查看容器ID
我记得很早之前,我是这么来获取ID的podman ps | awk 'NR>1 {print $1}'
。。。
查看容器容量大小
使用podman ps -s
可以查看容器占用空间
启动和停止容器
启动交互模式容器
还记得我们之前启的 alpine 容器么,它是交互式的,我们现在来启动它
命令 podman start -a -i 容器名称
启动非交互式容器
我们直接使用 podman start 容器名称
即可
容器卷
为什么需要卷
- 可以持久保留容器中的数据
- 方便容器间共享
- 不会增加容器的大小
使用卷实例
我们尝试一下,我们建立一个卷,并且使用2个容器间共享
使用/podman volume create disk1
创建disk1
卷
我们创建一个容器并且将盘挂载上去
podman run -it -v disk1:/root/ alpine /bin/sh
想容器/root
中创建一个文件
我们再次启动一个容器,并且将盘挂载上去
为避免混淆,我对容器命名了一个名字,我们查看 /root
下的文件
我们甚至于可以对文件添加内容
我们回到容器1 查看
删除容器
删除容器前,应当停止容器
删除某个容器
使用podman rm 容器名称
删除某个容器(容器必须在停止情况下才能删除)
心得体会
从上述来看,podman
几乎完全兼容docker
,也对,不兼容就死了,本来计划今天应该写得更多的,但是由于如开头所述,普通用户使用podman
报文,耽搁些时间,所以后续的就没写了,后面再补充吧。
库
podman
远程库不仅有 docker ,还有其他的,例如
会让我们选择一个源进行下载,当然,这些源都是可配置的
从卷来看podman
和docker
的区别
我们来看我们刚刚创建的卷
会发现 Mountpoint
在 $HOME
下面
当你如果使用sudo
进行创建的时候,你会发现 ,该卷 在 val
下面
所以各个用户使用podman
创建资源,并不会影响别的用户
而docker
则不行,因为它有一个docker server
代为执行,所以仅仅有一个路径,任何用户,只要有docker
权限,都可以操作所有的资源,这是docker
架构所决定的。
溜了 溜了