
1. 为什么要在Ubuntu 24.04中用Podman替代Docker最近在Ubuntu 24.04上折腾容器时我发现一个有趣的现象越来越多的开发者开始用Podman替代Docker。这不仅仅是个人偏好问题背后有几个关键的技术驱动因素。首先Podman采用无守护进程daemonless架构。这意味着每个容器进程都由当前用户直接启动不需要像Docker那样依赖一个长期运行的dockerd守护进程。我在实际使用中发现这种设计带来了明显的内存占用优势——在我的开发机上单纯运行Podman比运行Docker节省了近200MB内存。其次安全性是另一个重要考量。Podman默认使用rootless模式运行容器这意味着即使容器被攻破攻击者也只能获得当前用户的权限而不是系统root权限。上周我测试一个可能有安全风险的镜像时就特意选择了Podman来降低潜在危害。再者Podman与Docker的CLI命令高度兼容。大多数Docker命令在Podman中可以直接使用这使得迁移成本极低。我团队中有成员从Docker切换到Podman后几乎不需要重新学习任何新命令。重要提示虽然Podman和Docker命令相似但底层实现完全不同。Podman直接与Linux内核的容器功能交互而Docker需要通过守护进程中转。2. 永久配置alias dockerpodman的完整步骤2.1 环境准备与工具安装在开始之前我们需要确保系统已经安装了Podman。Ubuntu 24.04的官方仓库已经包含了最新版本的Podmansudo apt update sudo apt install -y podman安装完成后验证Podman是否正常工作podman --version # 预期输出类似podman version 4.0.2如果你之前安装过Docker现在可以卸载它可选sudo apt remove --purge docker-ce docker-ce-cli containerd.io2.2 配置alias的三种方法对比在Linux中设置alias有多种方式每种都有其适用场景临时alias仅当前会话有效alias dockerpodman这种方法简单快捷但关闭终端后就会失效。用户级永久alias修改~/.bashrc文件echo alias dockerpodman ~/.bashrc source ~/.bashrc这是最常用的方法对当前用户永久有效。系统级永久alias修改/etc/bash.bashrcsudo sh -c echo alias dockerpodman /etc/bash.bashrc source /etc/bash.bashrc这种方法会影响所有用户通常不建议除非在多用户环境下确实需要。2.3 验证alias是否生效配置完成后需要验证alias是否正常工作type docker # 预期输出docker is aliased to podman docker --version # 应该显示Podman的版本信息而非Docker的如果看到command not found错误可能是.bashrc没有被自动加载。这时可以尝试exec bash或者直接登出再登录。3. 常见问题与解决方案3.1 修改.bashrc后alias不生效这是最常见的问题之一通常有以下几种原因文件路径错误确保你修改的是当前用户home目录下的.bashrc而不是/etc/bash.bashrc或其他位置。可以用以下命令确认ls -la ~/.bashrc未执行source命令修改.bashrc后需要执行以下命令使其生效source ~/.bashrc或者打开新的终端窗口。shell不是bash如果你使用的是zsh等其它shell需要修改对应的配置文件如~/.zshrc。检查当前shellecho $SHELL3.2 Docker Compose兼容性问题Podman虽然可以替代大部分Docker功能但对Docker Compose的支持需要通过podman-compose实现sudo apt install -y podman-compose然后使用以下命令替代docker-composepodman-compose up需要注意的是podman-compose并非100%兼容所有docker-compose功能。我在迁移一个复杂项目时遇到了网络配置不兼容的问题最终通过调整compose文件解决了。3.3 权限问题处理当使用rootless模式时可能会遇到权限错误Error: stat /var/lib/containers/storage: permission denied解决方案是正确配置存储路径mkdir -p ~/.local/share/containers podman system migrate对于需要特权操作的容器可以临时切换到root模式sudo podman run --privileged ...4. 高级配置与优化建议4.1 设置Podman镜像加速国内用户可能会发现拉取镜像速度较慢可以配置镜像加速mkdir -p ~/.config/containers cat ~/.config/containers/registries.conf EOF unqualified-search-registries [docker.io] [[registry]] prefix docker.io location registry-1.docker.io mirror [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] EOF4.2 与Systemd集成Podman可以与Systemd完美集成实现容器开机自启# 生成systemd单元文件 podman generate systemd --name 容器名 ~/.config/systemd/user/container-容器名.service # 启用并启动服务 systemctl --user enable --now container-容器名.service4.3 性能调优建议根据我的使用经验以下调整可以提升Podman性能使用overlayfs驱动sudo apt install -y fuse-overlayfs调整日志级别在~/.config/containers/containers.conf中[engine] events_logger file对于开发环境可以禁用seccomp以提升性能podman run --security-opt seccompunconfined ...5. 实际使用中的经验分享经过三个月的全面迁移我的团队已经完全用Podman替代了Docker。以下是一些实战心得开发环境一致性我们为每个项目创建了podman-setup.sh脚本包含所有必要的alias和配置命令。新成员加入时只需运行这个脚本就能获得完全一致的开发环境。CI/CD流水线调整在Jenkins等CI系统中我们改用Podman时遇到了sudo权限问题。最终解决方案是在agent节点上预配置echo alias dockerpodman | sudo tee -a /etc/bash.bashrc性能监控Podman的资源占用明显低于Docker。我们使用以下命令监控容器状态podman stats网络配置技巧Podman的网络模型与Docker略有不同。对于需要复杂网络的项目我推荐使用podman network create预先创建自定义网络。镜像构建优化Podman的镜像构建缓存机制更智能。我们发现在Containerfile中合理安排指令顺序可以显著减少构建时间。