podman使用总结

运维容器

0.前言

我们知道,由于docker的"叛道离经",新版本的k8s已经不再默认支持docker了,需要用到转换器才能继续基于docker作为k8s的容器运行时工具,好在RedHat团队推出了podman,用来代替docker,那么今天我们就来看下podman有哪些用法,能否撼动昔日容器管理的霸主docker的位置。

1.准备工作

我们准备一台ubuntu服务器,用来部署和操作postman,配置信息如下:

服务器ipCPU内存磁盘空间
10.173.100.21664G500G

服务器最好可以连接外网,方便下载podman安装软件和测试用的镜像。

2.部署postman

方便起见,我们直接切到root用户执行操作,建议大家还是使用sudo命令☺

sudo su - root

之后输入之前设置好的登录用户的密码即可。

在ubuntu上部署podman还是非常简单的,只需要执行以下命令即可:

apt-get update
apt-get upgrade
apt-get -y install podman

安装过程中如果没有任何报错,说明安装成功,执行以下命令验证一下:

podman version
Client:       Podman Engine
Version:      4.9.3
API Version:  4.9.3
Go Version:   go1.22.2
Built:        Thu Jan  1 08:00:00 1970
OS/Arch:      linux/amd64

输出以上版本信息说明podman部署完成了。

3.设置国内镜像源

podman默认也是从docker.io拉取镜像,但是我们知道国内已经无法从docker.io拉取镜像了,所以在测试之前我们设置一下国内的镜像源,方便后续测试。
podman以修改注册表的方式修改镜像源,我们打开podman注册表并添加以下国内的镜像源:

vim /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "docker.m.daocloud.io"
[[registry.mirror]]
location = "docker.jianmuhub.com"
[[registry.mirror]]
location = "dockerhub.timeweb.cloud"
[[registry.mirror]]
location = "dockerhub1.beget.com"
[[registry.mirror]]
location = "huecker.io"
[[registry.mirror]]
location = "noohub.ru"

添加之后,无需重启可以直接生效。

podman info
...
registries:
  docker.io:
    Blocked: false
    Insecure: false
    Location: docker.m.daocloud.io
    MirrorByDigestOnly: false
    Mirrors:
    - Insecure: false
      Location: docker.jianmuhub.com
      PullFromMirror: ""
    - Insecure: false
      Location: dockerhub.timeweb.cloud
      PullFromMirror: ""
    - Insecure: false
      Location: dockerhub1.beget.com
      PullFromMirror: ""
    - Insecure: false
      Location: huecker.io
      PullFromMirror: ""
    - Insecure: false
      Location: noohub.ru
      PullFromMirror: ""
    Prefix: docker.io
    PullFromMirror: ""
  search:
  - docker.io
...

可以看到添加的镜像已经注册成功。

4.常见命令使用

4.1 镜像相关

(1)拉取镜像

podman pull hello-world

picture.image 出现以上信息,说明镜像拉取成功。

(2)查看镜像

podman images

picture.image 可以看到我本地有这些镜像。

(3)删除镜像

podman rmi service:test
podman images

picture.image 可以看到service镜像已经被删除了。

(4)制作镜像
podman制作镜像的方式同docker非常类似,也是需要一个声明式文件,然后基于声明式文件创建镜像,这里我们写一个简单的Podmanfile文件,制作一个包含一个go服务的镜像。

vim Podmanfile
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/golang:1.23.4

ADD ./service service

EXPOSE 8080

CMD ["./service"]

可以看到Podmanfile文件的关键字都和Dockerfile文件类似,如果想要了解更多Podmanfile的编写方法, 可以查看Podman官网。

ls /root/operation
drwxr-xr-x 2 root     root           39 Jan 20 14:01 ./
drwx------ 6 root     root          145 Jan 21 10:16 ../
-rw-r--r-- 1 root     root          133 Jan 20 10:55 Podmanfile
-rwxr-xr-x 1 xxxxx    xxxx 11266324 Jan 16 18:04 service*

可以看到当前文件夹下面有Podmanfile和service两个文件。 执行制作镜像的命令:

podman build -f Podmanfile -t nexus-docker.dianliantech.com/student-manage-platform:v1.0

picture.image 可以看到镜像制作成功了,我们检查一下本地是否生成该镜像。

podman images |grep v1.0
nexus-docker.dianliantech.com/student-manage-platform   v1.0   908c5977d867  24 hours ago   873 MB

OK,镜像已经创建完成了。

(5)导出镜像 有些时候需要将本地的镜像导出,然后拿到其他地方使用,这个时候可以使用如下命令:

podman save > student.tar nexus-docker.dianliantech.com/student-manage-platform:v1.0

(6)导入镜像

podman load < student.tar

4.2 容器相关

(1) 运行容器

podman run -d --name service -p 8080:8080 nexus-docker.dianliantech.com/student-manage-platform:v1.0
参数说明:<br>
-d: 在后台运行 <br>
--name: 容器名称 <br>
-p: 映射到服务器的端口 <br>
8cfb158a13344afd13231a18134d70811bd2c9286f41b978b24d554e4238d

如未出现报错信息,并正常打印容器uuid,说明容器启动成功。

(2) 查看容器运行情况

podman ps -a

picture.image 可以看到容器的运行详情信息,包括容器名、端口映射,创建和运行时间等。

(3) 停止容器

podman stop <container_id>

(4)删除容器

podman rm <container_id>

5.总结

通过以上命令的使用,可以看到podman的使用方式和docker基本一致,如果后续不能再使用docker了,完全可以使用podman代替docker。

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论