学习笔记
Java基础相关
JVM内存模型及线程空间
动态代理
java并发编程
Java基础知识
Java中Future
Java中9种常见的CMS GC问题分析与解决
移动端相关
杂乱整理
HarmonyOS 鸿蒙开发知识
ArkTS中如何自定义组件和复用统一样式
Android开发相关
WebView设置圆角
📄 Android 实时屏幕共享技术方案文档
开发工具相关
Git cmd学习整理
Markdown用法大全集
【2023年12月】工作常用
Git如何单独合并某次提交到另一个分支
Debina/Ubuntu安装Node环境
🐳 Docker 命令行与 Docker Compose 全面指南
使用Podman来替代Docker
中文注释提交git后变成"\u0087\u0079..."问题
macOS 容器化工具深度解析:Docker Desktop、OrbStack、Podman 及其他替代方案对比
前端开发相关
Node+TypeScript相关记录
TypeScript 读写 MariaDB
Node TypeScript项目 token生成、管理及拦截校验的实现
TypeScript+Express创建和实现一个服务示例
Express接口处理器抽取注册方式
Express 实现 RESTful API
创建 TypeScript Express 项目,并配置直接用 npm start 运行
TypeScript + Express 实现文件下载接口
export 和 export default的区别
TypeScript+Express 实现用户注册和登录接口
TypeScript 和 JavaScript 中,`===` 和 `==`
CSS中的尺寸大小标准
小程序px和rpx
使用Python快速处理Excel的合并拆分
读书写作相关
一些句子01
李敖语录
罗翔老师的一些经典语句
周易相关知识
周易是对自然描述还是为自然立法
40句落寞诗词,穿透柔魂弱魄
杂玩整理
黑苹果睿频问题
基于纯Linux自己部署Nas构思
Ubuntu换源
Ubuntu挂载tf卡
Ubuntu运行Docker报错
Ubuntu安装运行Docker报错处理
官方镜像安装Docker
Docker 设置root dir 切换数据到其他存储位置
systemctl stop docker 报错
NextCloud安装ffmpeg 显示视频缩略图
Docker源不生效解决方式
Docker源不生效解决方式II——搭建docker-hub镜像
搞定群晖总Docker部署gitea启用ssh协议
MacOS一键安装命令软件列表
群晖ssl证书目录
Android通过ADB命令播放视频
[完成] 群晖自动更新https证书项目
Linux设备整机限速
Linux限速2
Gitea部署Runner服务
精选网站
有声主播知识
学习笔记
有声主播入门到进阶
有声主播新手的入门练手内容推荐
DeepSeek分析喜马拉雅旗下 喜播平台 的有声主播培训
录书设备资料1
典故专辑资料整理
0B. 脚本和大纲
0A. 前置准备资料
Ai大数据模型
模型整理
使用 DeepSeek 通用公式
学会这8招,让DeepSeek变得超好用!
大数据购物分析选优
Windows和Ubuntu部署DeepSeek性能差距
本地部署 Ollam+DeepSeek 探索爬坑
模型对比测试
React Native 和 native 半屏弹窗
React Native Modal + WebView
AI模型使用心得
临时
Linux下对设备进行限速
C++ 学习
01 Android开发学习C++
其他资料分组
【面试相关】💡 面试后、Offer前,可以主动了解和确认的信息
【工作经验】会计师事务所工作中如何有效管理和规避法律风险
-
+
home page
使用Podman来替代Docker
在容器技术领域,Docker 长期以来占据着主导地位。然而,随着技术不断发展,对安全性、效率和资源控制的要求日益提高,新的竞争者逐渐崭露头角。Podman(Pod Manager)正是其中备受瞩目的一个。凭借其无守护进程(Daemonless)的架构、卓越的 rootless 模式支持以及与 Docker 命令行的高度兼容性,Podman 为开发者和运维人员提供了一个强大而现代的替代方案。 而恰巧公司出于安全考虑不允许个人办公电脑安装Docker,而我又有docker的需求,正好安装Podman来试试 ------ #### **1. 什么是 Podman?** Podman 是一款开源的容器管理工具,用于在 Linux 系统上开发、管理和运行符合 OCI(Open Container Initiative)标准的容器和镜像。由 Red Hat 主导开发,Podman 被视为下一代容器工具链中的核心组件之一。 与 Docker 最显著的区别在于其**无守护进程架构**。Docker 依赖于一个长期运行于后台的守护进程(`dockerd`)来管理所有容器,所有 `docker` 命令都需通过该守护进程执行。而 Podman 直接与容器运行时(如 runc)交互,每个用户命令都作为独立进程运行,从而带来以下几大核心优势: - **更强的安全性**:无需一个拥有 root 权限的中心守护进程,有效减少攻击面。Podman 支持完全在非特权用户下运行(rootless 模式),增强了多用户环境中的隔离性与安全。 - **更好的系统集成**:Podman 与 Systemd 等现代 Linux 系统工具无缝集成,可将容器作为 Systemd 服务管理,实现开机自启和完整的生命周期控制。 - **兼容 Docker CLI**:为降低学习与迁移成本,Podman 命令行工具在设计上高度兼容 Docker。大多数用户可通过 `alias docker=podman` 实现无缝切换。 此外,Podman 引入了 **Pod(容器组)** 的概念,与 Kubernetes 中的 Pod 保持一致。一个 Pod 是一组共享网络和存储卷的容器集合,极大便利了在本地环境中管理和调试复杂的多容器应用。 ------ #### **2. 安装 Podman** Podman 在主流 Linux 发行版上的安装过程非常简单。 **在 Fedora/CentOS/RHEL 上:** ```bash sudo dnf install podman ``` **在 Ubuntu/Debian 上:** 从 Ubuntu 20.10 开始,Podman 已纳入官方软件源。 ```bash sudo apt update sudo apt install podman ``` **在 macOS 上:** 可通过 Homebrew 安装。Podman 在 macOS 上借助虚拟机运行 Linux 容器。 ```bash brew install podman podman machine init podman machine start ``` **在 Windows 上:** Podman 通过 WSL 2(Windows Subsystem for Linux 2)运行。 1. 确保已安装并启用 WSL 2。 2. 在 WSL 发行版(如 Ubuntu)中按照上述 Linux 安装说明执行。 3. 也可通过 winget 或 MSI 安装程序自动完成配置。 安装完成后,可运行以下命令验证: ```css podman --version ``` ------ #### **3. Podman 基本使用** 若您熟悉 Docker,使用 Podman 将几乎没有学习成本。 **拉取镜像** ```bash # 从 Docker Hub 拉取最新版 Nginx 镜像 podman pull nginx:latest ``` **运行容器** ```css # 后台运行 Nginx 容器,映射主机 8080 端口至容器 80 端口 podman run -d --name mynginx -p 8080:80 nginx ``` **查看运行中的容器** ```undefined podman ps ``` **查看所有容器(包括已停止的)** ```css podman ps -a ``` **停止和删除容器** ```bash # 停止容器 podman stop mynginx # 删除容器 podman rm mynginx ``` **构建镜像** Podman 同样使用 Dockerfile,命令与 Docker 完全一致: ```perl # 在 Dockerfile 所在目录构建名为 my-app:1.0 的镜像 podman build -t my-app:1.0 . ``` **使用 Pod** Podman 的一大特色是其对 Pod 的原生支持,与 Kubernetes 模型一致: ```perl # 1. 创建一个 Pod podman pod create --name my-pod -p 8080:80 # 2. 在 Pod 中运行一个应用容器(如 Python Flask) podman run -d --pod my-pod --name my-app my-flask-app # 3. 在同一 Pod 中启动 Nginx 反向代理 podman run -d --pod my-pod --name my-nginx nginx-reverse-proxy # 4. 查看 Pod 中的容器 podman ps --pod ``` 通过 Pod,您可以轻松管理需要紧密协作的多容器应用,简化本地开发与测试流程。 ------ #### **4. 使用 Alias 实现无缝兼容** Podman 与 Docker 命令行的高度兼容性使得迁移变得异常简单。您可以通过 Shell 别名(alias)实现命令的无缝替换,几乎无需改变现有的使用习惯。 **兼容 Docker 命令:** 只需在您的 Shell 配置文件(如 `~/.bashrc` 或 `~/.zshrc`)中加入以下别名设置: ```bash # 将 docker 命令重定向到 podman alias docker=podman ``` 加载配置后,您之前使用的所有 `docker` 命令(如 `docker run`、`docker ps`)都会自动由 `podman` 执行。 **兼容 Docker Compose 命令:** 虽然 Podman 原生不支持 `docker-compose`,但通过 `podman-compose` 工具和别名,可以达到几乎相同的效果。首先确保已安装 `podman-compose`: ```bash pip3 install podman-compose ``` 然后在同一配置文件中继续添加: ```bash # 将 docker-compose 命令重定向到 podman-compose alias docker-compose=podman-compose ``` **使别名生效:** ```bash # 重新加载 Shell 配置 source ~/.bashrc # 如果使用 Bash source ~/.zshrc # 如果使用 Zsh ``` 完成以上设置后,您可以继续使用熟悉的 `docker` 和 `docker-compose` 命令,而实际调用的是 Podman,实现了无痛迁移。 **请注意**:虽然别名解决了大部分兼容性问题,但由于架构差异,极少数高级或特定功能可能仍有不同。建议在重要生产流程中进行全面测试。 ------ #### **5. Podman vs. Docker:详细对比** | 特性 | Podman | Docker | | :------------- | :----------------------------------------------------------- | :----------------------------------------------------------- | | **架构** | **无守护进程 (Daemonless)** | **客户端-服务器 (C/S) 架构,依赖守护进程** | | **安全性** | **原生支持 Rootless 模式**,无需 root 权限,安全性更高。 | 需 root 权限或加入 `docker` 用户组(存在风险),Rootless 模式配置复杂。 | | **系统集成** | 与 Systemd 天然集成,容器可作为系统服务管理。 | 依赖守护进程,与 Systemd 集成需额外配置。 | | **核心概念** | 支持 **Pod**,与 Kubernetes 概念一致,便于管理多容器应用。 | 核心单元为单个容器,多容器管理需依赖 Docker Compose。 | | **镜像仓库** | 默认配置多个镜像源(如 [quay.io](https://quay.io/)),不绑定 Docker Hub。 | 默认使用 Docker Hub。 | | **CLI 兼容性** | **高度兼容** Docker CLI,多数命令可直接替换。 | 业界标准,生态成熟。 | | **生态工具** | 提供 `podman-compose` 以兼容 Compose,另有 Buildah、Skopeo 等专业工具。 | 生态完善,拥有 Docker Compose、Docker Swarm 等全套工具。 | | **适用场景** | 高安全要求环境、HPC、CI/CD 流水线、Kubernetes 本地开发。 | 传统开发与测试环境,生态成熟,入门简单。 | ------ #### **6. Podman 与 Docker Compose 的兼容性** Docker Compose 是许多开发流程中的关键工具,而 **Podman 本身并不直接支持 `docker-compose`**,因为后者依赖 Docker 守护进程的 API。不过,社区提供了完善的解决方案:**`podman-compose`**。 这是一个 Python 工具,能够将 `docker-compose.yml` 转换为 Podman 命令,致力于实现无缝兼容。 **安装 `podman-compose`:** ```undefined pip3 install podman-compose ``` **使用示例:** 假设已有 `docker-compose.yml` 文件: ```yaml version: '3' services: web: image: nginx ports: - "8080:80" redis: image: redis ``` 之前使用 `docker-compose up`,现在只需: ```bash podman-compose up -d ``` 常用命令包括: - `podman-compose down` - `podman-compose ps` - `podman-compose logs` **请注意**:`podman-compose` 会为每一个 Compose 文件创建一个 Pod,并将所有服务作为该 Pod 中的容器运行,这与 Podman 的设计理念完全契合。 尽管 `podman-compose` 在大多数场景下表现良好,但在某些复杂的网络或存储配置中可能与原版存在细微差异。不过对于绝大多数开发和测试需求,它已足够可靠。 ------ #### **结论:我该选择 Podman 吗?** Podman 并非意在完全取代 Docker,而是为容器技术栈提供了一个更现代、更安全的选择。 - **新项目或注重安全的用户**:Podman 的无守护进程和 rootless 设计能有效降低风险,非常值得尝试。 - **Kubernetes 开发者**:Podman 的 Pod 概念可帮助在本地环境中更好地模拟生产集群,是理想的开发工具。 - **现有 Docker 用户**:凭借 CLI 兼容性和 `podman-compose`,迁移成本极低。可通过 `alias docker=podman` 平滑过渡,几乎不影响现有流程。 总而言之,Podman 凭借其前瞻的设计和强大的功能,正成为容器生态中不可忽视的力量。它在继承 Docker 易用性的同时,在安全性和集成能力上实现了显著突破。无论您是刚接触容器,还是经验丰富的专家,都值得将 Podman 纳入您的技术工具箱。
嘿手大叔
Sept. 24, 2025, 10:46 a.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password