Windows 11 上快速部署Podman:从WSL2配置到首个容器运行

超级爱喝水

1. 为什么选择Podman替代Docker?

如果你是一位Windows开发者,最近可能已经注意到Docker Desktop开始对商业用户收费的消息。这让我开始寻找更轻量、更自由的容器解决方案,而Podman正是这样一个完美的替代品。与Docker不同,Podman不需要守护进程(daemon),这意味着它更轻量、更安全,而且完全开源免费。我在实际项目中切换使用Podman后,发现它不仅兼容Docker的命令行操作,还能更好地与Linux环境集成,特别是在WSL2下的表现非常出色。

Podman最大的优势在于它的无守护进程架构。传统的Docker需要一个长期运行的守护进程来管理容器,这不仅占用系统资源,还可能成为安全隐患。而Podman直接使用runc运行容器,就像你在Linux终端中运行普通进程一样自然。这种设计让Podman在资源占用上更加高效,特别是在开发机上同时运行多个容器时,能明显感觉到系统响应更快。

另一个值得注意的特点是Podman对rootless容器的原生支持。这意味着你可以在不需要root权限的情况下运行容器,大大提高了安全性。我在团队内部推广Podman时,这一点特别受到系统管理员的欢迎,因为它减少了权限滥用的风险。同时,Podman完全兼容Docker的镜像格式,你可以继续使用你熟悉的Docker镜像,无需任何转换。

2. 准备工作:配置WSL2环境

2.1 启用Windows必要功能

在开始安装Podman之前,我们需要确保Windows系统已经准备好运行Linux环境。首先打开"控制面板",选择"程序和功能",然后点击左侧的"启用或关闭Windows功能"。这里我们需要勾选两个关键选项:"适用于Linux的Windows子系统(WSL)"和"虚拟机平台"。这两个功能是WSL2的基础,也是Podman能够在Windows上运行的关键。

勾选完成后,系统会提示你重启电脑。我建议你立即重启,因为有些功能需要重启后才能完全生效。重启后,我们可以继续设置WSL2。打开PowerShell(记得使用管理员权限),运行以下命令来确保WSL使用最新版本:

bash复制wsl --set-default-version 2

这个命令告诉系统默认使用WSL2而不是WSL1。WSL2基于真正的Linux内核,性能更好,兼容性更强,特别适合运行容器。接下来,我们更新WSL内核:

bash复制wsl --update

2.2 安装Linux发行版

更新完成后,我们可以安装一个Linux发行版。虽然Podman会自带一个最小化的Fedora,但我建议先安装一个完整的发行版作为基础。运行以下命令安装Ubuntu:

bash复制wsl --install -d Ubuntu

安装过程可能需要几分钟,取决于你的网络速度。完成后,系统会提示你设置新用户的用户名和密码。这里设置的用户名和密码只在这个WSL环境中使用,与你的Windows账户无关,但建议使用简单易记的组合。

安装完成后,你可以在开始菜单中找到Ubuntu的快捷方式。第一次启动时会完成初始化设置。之后,你就可以在Windows文件资源管理器中访问Linux文件系统了——只需在地址栏输入\\wsl$\Ubuntu(如果你安装的是Ubuntu)即可。

3. 安装Podman Windows客户端

3.1 下载安装程序

现在我们来安装Podman的Windows客户端。打开浏览器,访问Podman的GitHub发布页面。我建议下载4.6.1或更高版本,因为这些版本对Windows的支持更加完善。下载页面可能会有多个版本,选择标有"Windows installer"的那个。

下载完成后,双击运行安装程序。安装过程非常简单,基本上就是一路点击"下一步"。安装完成后,建议重启终端窗口(或者直接重启电脑),这样系统PATH变量的更改才能生效。

3.2 验证安装

安装完成后,我们可以验证一下Podman是否安装成功。打开一个新的PowerShell窗口,输入:

bash复制podman --version

如果安装成功,你会看到类似"podman version 4.6.1"的输出。这表明Podman命令行工具已经正确安装并可以在Windows上运行了。不过,这时候Podman还无法直接运行容器,因为我们还需要设置Podman Machine——这是Podman在Windows上运行容器的关键组件。

4. 配置Podman Machine

4.1 初始化Podman Machine

Podman Machine是一个轻量级的虚拟机,专门用于在Windows上运行Linux容器。初始化Machine非常简单,只需要运行:

bash复制podman machine init

这个命令会做几件事情:首先,它会检查你的系统是否已经安装了WSL2。如果没有,它会提示你是否自动安装。我建议选择自动安装,这样可以省去很多手动配置的麻烦。自动安装过程可能需要重启电脑,所以请确保保存好所有工作。

安装WSL2后,podman machine init会继续下载一个最小化的Fedora镜像,并对其进行定制以运行Podman。这个过程可能需要一些时间,特别是第一次运行时,因为需要下载大约300MB的镜像文件。在我的测试中,使用国内网络下载大约需要5-10分钟,具体取决于你的网速。

4.2 启动Podman Machine

初始化完成后,我们可以启动Podman Machine:

bash复制podman machine start

这个命令会启动之前创建的虚拟机。启动成功后,你会看到类似"Machine 'podman-machine-default' started successfully"的消息。现在,Podman已经准备好运行容器了!

默认情况下,Podman Machine运行在rootless模式(非root用户模式)。这种模式更安全,但如果你需要运行需要特权端口的容器(比如80或443端口),或者遇到兼容性问题,可以切换到rootful模式:

bash复制podman machine set --rootful

5. 运行第一个容器

5.1 拉取并运行测试镜像

现在到了最激动人心的部分——运行我们的第一个容器!Podman完全兼容Docker的命令和镜像,所以我们可以直接使用Docker Hub上的镜像。让我们从最简单的开始:

bash复制podman run hello-world

这个命令会从Docker Hub拉取hello-world镜像并运行它。第一次运行时会下载镜像,所以可能需要几秒钟。下载完成后,你会看到一段欢迎信息,确认你的Podman安装工作正常。

如果你想尝试更实用的例子,可以运行一个Nginx服务器:

bash复制podman run -d -p 8080:80 nginx

这个命令会在后台运行Nginx容器,并将容器的80端口映射到主机的8080端口。运行后,你可以在浏览器中访问http://localhost:8080,应该能看到Nginx的欢迎页面。

5.2 管理容器

Podman的命令与Docker非常相似。要查看正在运行的容器:

bash复制podman ps

查看所有容器(包括停止的):

bash复制podman ps -a

停止容器:

bash复制podman stop <容器ID>

删除容器:

bash复制podman rm <容器ID>

管理镜像也很简单。列出所有本地镜像:

bash复制podman images

删除镜像:

bash复制podman rmi <镜像名>

6. 常见问题与优化建议

6.1 解决网络问题

在国内使用Podman可能会遇到镜像拉取慢的问题。和Docker一样,我们可以为Podman配置镜像加速器。编辑/etc/containers/registries.conf文件(在Podman Machine中),添加国内镜像源:

bash复制[[registry]]
location = "docker.io"
[[registry.mirror]]
location = "registry.cn-hangzhou.aliyuncs.com"

这样配置后,拉取Docker Hub镜像时会自动使用阿里云镜像加速。我在实际使用中发现,这可以将镜像下载速度提高5-10倍。

6.2 性能优化

WSL2默认会限制内存使用量。如果你计划运行多个容器,建议增加WSL2的内存限制。在用户目录下创建或修改.wslconfig文件,添加以下内容:

ini复制[wsl2]
memory=4GB
swap=2GB

这将分配4GB内存给WSL2(根据你的电脑配置调整)。保存后,运行wsl --shutdown关闭所有WSL实例,之后它们会自动重启并应用新配置。

6.3 文件系统访问

默认情况下,从Windows访问WSL中的文件性能不是最优的。如果你需要在容器和Windows之间频繁交换文件,建议将项目文件放在Windows文件系统中,然后在WSL中通过/mnt/c/路径访问。或者,你也可以使用podman mount命令来挂载特定目录。

7. 进阶使用技巧

7.1 使用Podman Compose

如果你之前使用Docker Compose,可能会想知道Podman是否支持类似的工具。好消息是,Podman完全兼容docker-compose.yml文件,你可以直接使用podman-compose这个替代工具。安装方法很简单:

bash复制pip install podman-compose

然后你就可以像使用Docker Compose一样使用它了:

bash复制podman-compose up -d

7.2 构建自定义镜像

Podman也可以用来构建Docker镜像。创建一个简单的Dockerfile:

dockerfile复制FROM alpine
RUN apk add --no-cache curl
CMD ["curl", "--version"]

然后使用Podman构建:

bash复制podman build -t my-curl .

运行测试:

bash复制podman run --rm my-curl

7.3 与开发工具集成

大多数现代开发工具都可以很好地与Podman集成。例如,在VS Code中,你可以安装"Podman"扩展,它提供了类似Docker扩展的功能,包括管理容器、镜像和查看日志等。

对于IntelliJ IDEA等JetBrains工具,你可以在设置中找到"Build, Execution, Deployment" > "Docker",然后将API URL改为unix:///run/user/1000/podman/podman.sock(WSL2中的路径),IDE就会使用Podman而不是Docker。

内容推荐

MATLAB 2022a + YOLOv4:手把手教你从零搭建一个带GUI的动物检测系统(附完整代码)
本文详细介绍了如何使用MATLAB 2022a和YOLOv4从零搭建一个带GUI的动物检测系统。涵盖环境配置、数据集准备、模型训练、GUI设计到系统部署的全流程,提供完整代码实现,帮助开发者快速掌握目标检测技术在动物识别领域的应用。
基于CANoe的车载以太网硬件过滤与吞吐量优化实战
本文详细介绍了基于CANoe的车载以太网硬件过滤与吞吐量优化实战。通过分析车载以太网测试中的挑战,探讨了硬件过滤的核心价值,并提供了VN5000硬件过滤的实战配置方法。文章还分享了ADAS多摄像头数据测试和信息娱乐系统OTA测试的优化案例,帮助工程师提升测试效率和准确性。
别再只盯着大模型了!聊聊2024年我们普通开发者能上手的几种模型压缩实战方法
本文探讨了2024年轻量化模型压缩的实战方法,包括剪枝、量化和知识蒸馏等技术。通过具体案例和代码示例,展示了如何将大型模型优化为适合移动端和嵌入式设备部署的轻量化模型,同时保持高精度和性能。文章特别强调了模型压缩在边缘计算和智能家居等场景中的实际应用价值。
告别无效Cookie!用Python脚本自动抓取并验证Grammarly Premium可用账号
本文介绍如何使用Python脚本自动抓取并验证Grammarly Premium可用账号,解决手动查找Cookie效率低下的问题。通过构建自动化工具,实现批量采集、验证Cookie有效性,并将可用Cookie复制到剪贴板,显著提升工作效率。
安川MP3300做TCP服务端?C#上位机连接与数据解析实战(含16进制/ASCII处理)
本文详细介绍了安川MP3300控制器作为TCP服务端的配置方法,以及如何使用C#上位机实现稳定连接与混合数据流(16进制/ASCII)的智能解析。内容涵盖网络参数设置、工业级连接策略、多格式数据识别算法等关键技术点,为工业自动化系统集成提供实用解决方案。
道岔、轨道电路、计轴:三兄弟如何“守护”列车安全?一个故障模拟实验带你搞懂
本文通过一个故障模拟实验,深入解析了道岔、轨道电路和计轴三大系统如何协同保障列车安全。当计轴干扰与轨道电路分路不良同时出现时,系统会触发安全机制,工程师需通过专业设备排查故障。文章详细介绍了三大系统的工作原理、故障诊断流程及预防性维护策略,为信号工程师提供了实用的技术手册。
从原理图到PCB:手把手教你搞定LVPECL、LVDS等差分信号的AC耦合布局布线(附Allegro操作)
本文详细介绍了LVPECL、LVDS等高速差分信号的AC耦合设计原理与PCB实现技巧。通过Allegro工具实操演示,涵盖从原理图到布局的完整流程,包括差分对创建、耦合元件布局优化以及信号完整性验证,帮助工程师解决GHz级差分信号传输中的关键问题。特别针对AC耦合电容的选型与位置选择提供了专业建议。
手把手对比:用Matlab Function vs For循环子系统在Simulink里实现CRC-8校验(附模型文件)
本文深度对比了在Simulink中实现CRC-8校验的两种方案:Matlab Function与For循环子系统。通过详细的模型搭建、参数配置和代码生成流程分析,揭示了两种方法在汽车电子、工业控制等场景下的性能差异与适用场景,帮助工程师根据项目需求做出最优选择。
深入Hibernate Validator:手把手教你自定义校验注解,搞定手机号、身份证等复杂规则
本文深入讲解如何使用Hibernate Validator自定义校验注解,实现手机号、身份证等复杂业务规则的校验。通过三步曲(定义注解、实现校验逻辑、集成Spring Boot)和高级技巧(组合校验、跨字段关联、枚举值校验),提升代码可维护性和性能优化。结合@Valid和@Validated注解,实现与Spring Validation的无缝集成。
FPGA课程设计避坑指南:单周期MIPS模型机开发中那些容易踩的‘雷’
本文深入解析FPGA单周期MIPS模型机开发中的常见问题,包括指令冲突、乘除指令实现和中断处理等关键难点。通过实战案例和代码示例,提供从Verilog设计到调试工具链配置的全方位避坑指南,帮助开发者高效完成课程设计项目。
SMPS设计实战:从伏秒平衡到环路补偿的工程化解析
本文深入解析SMPS设计中的关键技术与工程实践,从伏秒平衡原理到环路补偿设计,详细介绍了12V转5V/3A同步Buck转换器的实现方案。通过电感选型、MOSFET驱动优化和环路调试等实战经验,帮助工程师掌握高效稳定的电源设计方法,提升SMPS性能与可靠性。
别再折腾了!用Docker 24.0.5和K8s 1.20.0在CentOS 7上一键部署单机版Kubernetes(保姆级避坑指南)
本文提供了一份详细的CentOS 7上使用Docker 24.0.5和Kubernetes 1.20.0部署单机版Kubernetes的保姆级指南。从系统环境准备到Docker配置,再到Kubernetes集群的初始化与验证,涵盖了所有关键步骤和常见问题解决方案,帮助开发者快速搭建稳定的单机K8s环境,避免部署过程中的各种坑。
别再让老主板拖后腿!手把手教你调优PCIe SSD的MPS与MRRS,榨干硬盘性能
本文详细解析了如何通过调整PCIe SSD的MPS(Maximum Payload Size)和MRRS(Maximum Read Request Size)参数来提升硬盘性能,特别针对老旧主板与高速SSD的兼容性问题。从检测工具使用到Windows和Linux系统的具体调优步骤,帮助用户榨干硬盘性能,提升数据传输效率。
别再自己造轮子了!用ccViewer和libQGLViewer快速搞定Qt+OpenGL的3D点云交互界面
本文介绍了如何利用开源项目ccViewer和libQGLViewer快速构建Qt+OpenGL的3D点云交互界面,避免重复开发基础功能。通过对比两种方案的特性和性能,提供集成指南和高级功能扩展方法,帮助开发者高效实现专业级3D可视化应用。
FFmpeg时间基(tbn)实战解析:从理论到ffprobe诊断的完整指南
本文深入解析FFmpeg时间基(tbn)的概念与应用,从理论到实践全面讲解时间基的生成逻辑、av_rescale_q实战技巧及ffprobe诊断方法。通过实际案例和源码分析,帮助开发者掌握时间基转换的核心技术,解决音视频处理中的同步与精度问题。
《AMESIM液压元件设计库:从入门到精通的系统学习指南》
本文详细介绍了AMESIM液压元件设计库的系统学习路径,从基础认知到进阶建模技巧,帮助工程师快速掌握液压系统仿真技术。文章涵盖标准元件调用、预定义模型应用及常见问题解决方案,特别适合需要提升液压系统设计效率的工程人员。
Nginx实战:为SignalR配置WebSocket代理与负载均衡
本文详细介绍了如何为SignalR配置Nginx的WebSocket代理与负载均衡,包括核心配置解析、常见问题排查、多服务器环境下的粘滞会话实现以及生产环境优化建议。通过实战案例和完整配置示例,帮助开发者解决SignalR连接不稳定问题,提升实时通信性能。
若依Vue前端与Activiti7工作流引擎的无缝集成实践
本文详细介绍了若依Vue前端与Activiti7工作流引擎的无缝集成实践,包括环境准备、依赖配置、项目结构设计、数据库设置、流程设计及前后端API对接等关键步骤。通过具体示例和常见问题解决方案,帮助开发者高效实现前后端分离的工作流系统集成,提升开发效率。
蓝桥杯单片机选手必看:DS18B20测温不准?可能是你的IAP15单片机时序搞错了
本文针对蓝桥杯单片机选手在使用DS18B20温度传感器时遇到的测温不准问题,深入分析了IAP15单片机与12T单片机时序差异的根源,并提供了详细的时序校准方案和代码改造要点。通过调整延时函数和优化驱动代码,解决温度读数跳变或固定不变的问题,帮助选手在竞赛中实现精准测温。
敏捷团队沟通实战:从会议纪要到团队邮件的效率提升指南
本文深入探讨了敏捷团队如何通过优化会议纪要和团队邮件提升沟通效率。从会前准备到会后邮件转化,详细介绍了捕捉关键信息、提炼行动项、设计邮件结构等实用技巧,并分享了自动化工具链和团队沟通规范等进阶方法,帮助团队实现信息透明和高效协作。
已经到底了哦
精选内容
热门内容
最新内容
保姆级教程:在OpenPnP中安全配置自动换刀,避开新手必踩的5个坑
本文提供OpenPnP自动换刀功能的保姆级教程,详细解析安全配置流程,帮助新手避开5个常见陷阱。从硬件检查到软件设置,再到吸嘴坐标校准和视觉系统配置,全程强调安全操作,确保设备稳定运行。特别适合刚接触OpenPnP自动换刀功能的用户。
别再只盯着阿尔法贝塔了!用Python实战Fama-French三因子模型,手把手教你量化分析A股(附央财数据源)
本文详细介绍了如何使用Python实战Fama-French三因子模型进行A股量化分析,从数据获取到模型构建、结果解读与扩展应用。通过央财数据源和Python代码示例,手把手教你实现这一经典量化模型,帮助投资者超越传统的阿尔法贝塔分析,深入理解市场风险溢酬因子(Rmt)、市值因子(SMB)和账面市值比因子(HML)的实际应用。
Cadence Virtuoso IC617实战:三步搞定晶体管跨导gm的非线性仿真与曲线绘制
本文详细介绍了在Cadence Virtuoso IC617中进行晶体管跨导gm非线性仿真与曲线绘制的三步实战方法。通过原理图设计、ADE仿真环境配置和结果分析,帮助工程师快速掌握gm非线性特性分析技巧,特别适合模拟集成电路设计中的高精度应用场景。
如何利用RACE模型驱动PPC广告的指数级增长?
本文深入解析如何运用RACE模型实现PPC广告的指数级增长。从覆盖、行动、转化到参与四个阶段,详细拆解用户旅程中的关键策略,包括精准关键词选择、受众定向优化、着陆页设计及忠诚度计划等,帮助广告主最大化用户生命周期价值,提升广告ROI。
如何在2024年应对Java反编译工具的兼容性挑战:以JD-GUI为例
本文探讨了2024年Java反编译工具JD-GUI的兼容性挑战及解决方案。文章详细介绍了JD-GUI在Java 5到Java 8字节码反编译中的优势,以及如何解决多Java版本环境下的安装问题,特别是在MacOS上的启动故障。此外,还提供了处理特殊场景(如Spring Boot项目、Lambda表达式和混淆代码)的高级技巧,并推荐了现代替代方案和工具链整合方法。
Bugzilla权限管理实战:从零配置团队角色与邮件通知(管理员必看)
本文详细解析Bugzilla权限管理的最佳实践,从团队角色配置到邮件通知设置,帮助管理员构建高效的缺陷跟踪系统。涵盖权限矩阵设计、角色权限定制、邮件通知智能配置等核心内容,特别适合需要精细化管理Bugzilla的敏捷团队和企业级用户。
秒杀系统避坑指南:我是如何用Redis+Lua+Redisson搞定黑马点评优惠券模块的
本文详细介绍了如何利用Redis+Lua+Redisson构建高并发秒杀系统,解决超卖、重复下单和系统雪崩等核心问题。通过黑马点评优惠券模块的实战案例,分享库存预热、原子扣减、分布式锁优化及异步订单处理等关键技术,最终实现十万级QPS的稳定支撑。
用三相霍尔传感器给无刷电机测速?一个MCU定时器就搞定(附极对数计算避坑点)
本文详细介绍了如何利用三相霍尔传感器配合MCU定时器实现无刷电机的高精度转速测量,重点解析了极对数计算中的常见误区。通过实战案例和优化技巧,帮助工程师准确测量电机转速并避免常见错误,适用于无人机、电动汽车和工业自动化等领域。
告别CubeIDE调试器绑定:一份给STM32开发者的OpenOCD与GDB独立调试指南(支持DAP-LINK/J-LINK)
本文为STM32开发者提供了一份详细的OpenOCD与GDB独立调试指南,帮助摆脱CubeIDE调试器绑定,支持DAP-LINK和J-LINK等多种调试器。通过搭建标准化调试环境、配置OpenOCD参数、掌握GDB高级调试技巧,开发者可以提升调试效率,实现硬件无关性和环境可移植性。
YOLOv8进阶:融合BiFPN与P2层,解锁密集小目标检测新范式
本文深入探讨了YOLOv8在密集小目标检测中的优化方案,重点介绍了融合BiFPN与P2层的创新方法。通过BiFPN的多尺度特征融合和P2层的高分辨率优势,显著提升了小目标检测精度,在VisDrone等数据集上mAP提升达4.8%。文章详细解析了模型结构调整策略、训练技巧及部署优化建议,为计算机视觉开发者提供了实用指南。