0.前言
我们知道,由于docker的"叛道离经",新版本的k8s已经不再默认支持docker了,需要用到转换器才能继续基于docker作为k8s的容器运行时工具,好在RedHat团队推出了podman,用来代替docker,那么今天我们就来看下podman有哪些用法,能否撼动昔日容器管理的霸主docker的位置。
1.准备工作
我们准备一台ubuntu服务器,用来部署和操作postman,配置信息如下:
服务器ip | CPU | 内存 | 磁盘空间 |
---|---|---|---|
10.173.100.2 | 16 | 64G | 500G |
服务器最好可以连接外网,方便下载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
出现以上信息,说明镜像拉取成功。
(2)查看镜像
podman images
可以看到我本地有这些镜像。
(3)删除镜像
podman rmi service:test
podman images
可以看到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
可以看到镜像制作成功了,我们检查一下本地是否生成该镜像。
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
可以看到容器的运行详情信息,包括容器名、端口映射,创建和运行时间等。
(3) 停止容器
podman stop <container_id>
(4)删除容器
podman rm <container_id>
5.总结
通过以上命令的使用,可以看到podman的使用方式和docker基本一致,如果后续不能再使用docker了,完全可以使用podman代替docker。