Podman完美替换Docker
曾经的 Docker 是容器界的“扛把子”,但 Red Hat 从 RHEL8 开始,就逐步弃用了 Docker,转投 Podman 的怀抱。你可能会好奇: “这不就是换个马甲的 Docker 吗?” “Podman 到底有什么不一样?”别急,今天就来带你搞懂,为什么越来越多的企业和开发者,开始用 Podman 替代 Docker!
Podman是什么?
Podman = 无守护进程的 Docker + 更安全的权限模型
Podman 是一个开源的容器引擎,支持直接在 Linux 上 开发、运行、管理容器,重点是——它不需要像 Docker 一样,背后跑着一个“大管家”守护进程(Docker Daemon)。
Podman的特点
无 Daemon:不用后台服务,直接和系统打交道;支持无 root 运行:普通用户也能跑容器,不用担心权限过大;兼容 Docker 命令:用习惯了 docker run?直接换成 podman run,几乎无痛切换!
为什么 Red Hat 舍弃 Docker?
看看 Docker 的“短板”,你就懂了👇Docker 的常见问题: 单点故障 🧨 Docker Daemon 挂了,容器全军覆没。权限过大 🛡️ Docker 操作需要 root 权限,安全风险直接拉满。控制权集中 🔗 Docker Daemon 掌控所有容器的子进程,潜在风险大。潜在的安全漏洞 🕷️ Docker 的构建过程,容易被攻击面盯上。于是,Podman 横空出世,直接去掉 Daemon,安全性和灵活性一步到位!
对比亮点:
Docker 有 Daemon,Podman 没有;
Docker 依赖 daemon 调度,Podman 直接调用 runc 和内核;
Podman 还和 buildah、skopeo 等工具搭配,功能更灵活。
快速上手 Podman
--RHEL7 安装 Podman
sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
sudo yum-config-manager --enable rhel-7-server-extras-rpms
sudo yum -y install podman
提醒:默认安装后,Podman 还是需要 root 权限,开启“无 root”模式需额外配置
常用 Podman 命令(老司机无缝切换)
# 拉取镜像
podman pull nginx
# 查看镜像
podman images
# 运行容器
podman run -dt -p 8081:80:80 --name hello-nginx nginx
是不是跟 Docker 命令“像到哭”?
其实 Podman 设计之初就考虑了让 Docker 用户“0学习成本”直接切换。
镜像 & 容器的备份姿势
1.备份镜像
podman save nginx > nginx.tar
2.还原镜像
podman load < nginx.tar
3.备份容器:
podman export hello-nginx > hello-nginx.tar
4.还原容器:
podman import hello-nginx.tar
注意
export/import 无法备份 tmpfs 的挂载内容;推荐用 checkpoint/restore 完整备份 tmpfs 和运行态!
Checkpoint/Restore 示例
Podman 自带 checkpoint 功能,Docker 还得开启“实验特性”
以下是完整操作流程:
# 安装 criu
sudo yum install -y criu
# 启动容器(注意加 seccomp 参数)
podman run -dt --tmpfs /tmp --security-opt="seccomp=unconfined" --name hello-nginx nginx
# 创建测试文件
podman exec -it hello-nginx touch /tmp/test-01
# checkpoint 备份
podman container checkpoint --leave-running --export=/tmp/backup.tar hello-nginx
# 容器删除 & 还原
podman stop hello-nginx && podman rm hello-nginx
podman container restore --import=/tmp/backup.tar
# 验证 tmpfs 是否还在
podman exec -it hello-nginx ls /tmp/test-01
已有 0 条评论