podman容器操作

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

上一篇文章,我们已经在 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则需要升级才行。

参考:

github.com/containers/…

github.com/containers/…

升级内核(升级内核需要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: 将容器启动运行至后台

列出容器

podmandocker 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 ,还有其他的,例如

会让我们选择一个源进行下载,当然,这些源都是可配置的

从卷来看podmandocker的区别

我们来看我们刚刚创建的卷

会发现 Mountpoint$HOME 下面

当你如果使用sudo进行创建的时候,你会发现 ,该卷 在 val下面

所以各个用户使用podman创建资源,并不会影响别的用户

docker则不行,因为它有一个docker server代为执行,所以仅仅有一个路径,任何用户,只要有docker权限,都可以操作所有的资源,这是docker架构所决定的。

溜了 溜了

posted @ 2022-04-03 11:23  pdudos  阅读(0)  评论(0)    收藏  举报  来源