放弃Docker,在windows中使用podman基于WSL
Podman for Windows
简介
虽然“容器属于 Linux”,但 Podman 同样支持 macOS 和 Windows 系统。在 Windows 上,Podman 提供原生命令行界面(CLI),并通过嵌入一个轻量级 Linux 子系统来运行容器。这个子系统被称为 Podman 机器(Podman Machine),可通过 podman machine
命令管理。
在 Windows 上,每个 Podman 机器基于虚拟化的 Windows Subsystem for Linux (WSL2) 分发版。用户可以直接从 PowerShell 或 CMD 执行 podman
命令,这些命令会通过远程通信与 WSL 环境中的 Podman 服务交互。
此外,用户也可以直接进入 WSL 实例,使用 Linux 命令行工具。Podman 还支持 Docker API 客户端(如 Docker CLI 工具链),允许直接使用 Docker 兼容工具或通过编程语言调用。
系统要求
由于 Podman 依赖 WSL2,需满足以下条件:
- Windows 版本:Windows 10(18362 或更新版本)或 Windows 11(ARM64 需 19041 或更新版本)。
- 硬件虚拟化支持:WSL2 使用虚拟化技术,需确保 BIOS/UEFI 中启用硬件虚拟化(Intel VT-x/AMD-V)。若运行在虚拟机中,需支持嵌套虚拟化(Nested Virtualization)。
推荐工具
安装 Windows Terminal 以获得更好的用户体验(支持多标签页、主题自定义等功能):
winget install Microsoft.WindowsTerminal
安装 Podman
- 从 GitHub 发布页面 下载 Windows 安装包(需 v4.1 或更新版本)。
- 运行安装程序,重新启动终端后,
podman.exe
将自动加入系统环境变量 PATH。 - 初始化第一个 Podman 机器:
PS C:UsersUser> podman machine init
自动安装 WSL
如果系统未安装 WSL,首次执行 podman machine init
会触发自动安装流程:
- 弹出对话框提示安装必要组件(如 WSL 核心文件和虚拟机平台)。
- 安装完成后系统会重启,登录后自动继续创建 Podman 机器。
- 若需手动安装 WSL,可拒绝自动安装并执行:
wsl --install
初始化 Podman 机器
安装 WSL 后,podman machine init
会:
- 解压压缩文件。
- 将最小化 Fedora 系统导入 WSL(首次可能耗时 5 分钟以上)。
- 安装依赖包并配置系统。
- 生成 SSH 密钥对(保存路径:
C:UsersUser.sshpodman-machine-default*
)。
初始化完成后,启动机器:
PS C:UsersUser> podman machine start
快速入门
初始化并启动机器后,可像在 Linux 上一样使用 Podman 命令。例如:
# 运行 Linux 的 date 命令
PS C:UsersUser> podman run ubi8-micro date
Thu May 5 21:56:42 UTC 2022
# 端口转发示例(运行 Apache HTTPD)
PS C:UsersUser> podman run --rm -d -p 8080:80 --name httpd docker.io/library/httpd
f708641300564a6caf90c145e64cd852e76f77f6a41699478bb83a162dceada9
# 通过 PowerShell 访问服务
PS C:UsersUser> curl http://localhost:8080/ -UseBasicParsing
StatusCode : 200
StatusDescription : OK
Content : It works!</h1></body></html>
Rootful 与 Rootless 模式
在 WSL 的 Linux 系统中,Podman 可运行在两种模式:
- Rootless(默认):以非特权用户身份运行容器(安全性高,但受限较多)。
- Rootful:以 root 权限运行容器(适用于需要低权限操作的场景,如绑定 1024 以下端口)。
切换模式:
# 切换到 Rootful
podman machine stop
podman machine set --rootful
# 切换回 Rootless
podman machine stop
podman machine set --rootful=false
卷挂载(Volume Mounting)
Podman v4.1 支持将 Windows 路径挂载到 Linux 容器中:
# Windows 风格路径
podman run --rm -v c:UsersUsermyfolder:/myfolder ubi8-micro ls /myfolder
# Unix 风格路径
podman run --rm -v /c/Users/User/myfolder:/myfolder ubi8-micro ls /myfolder
# WSL 本地路径
podman run --rm -v /var/myfolder:/myfolder ubi-micro ls /myfolder
管理 Podman 机器
-
查看机器状态:
PS C:UsersUser> podman machine ls NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE podman-machine-default wsl 2 hours ago Currently running 4 331.1MB 768MB
-
停止/删除机器:
podman machine stop podman machine rm
故障排查
WSL 自动安装失败
若自动安装失败,尝试手动重置 WSL:
# 以管理员身份运行
Start-Process powershell -Verb RunAs
# 禁用 WSL 功能
dism.exe /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux /norestart
dism.exe /online /disable-feature /featurename:VirtualMachinePlatform /norestart
# 重启后重新安装
wsl --install
进阶用法
访问 Podman Linux 环境
-
SSH 登录:
podman machine ssh sudo dnf upgrade -y # 更新系统
-
直接使用 WSL 命令:
wsl -d podman-machine-default # 进入 root shell enterns su user # 切换到非特权用户
-
Windows Terminal 集成:
- 打开 Windows Terminal,选择下拉菜单中的
podman-machine-default
标签页。
- 打开 Windows Terminal,选择下拉菜单中的
API 转发(Docker 兼容模式)
Podman 支持监听 Docker API,允许 Docker 工具无缝对接。若存在冲突服务,需手动设置环境变量:
# PowerShell
$Env:DOCKER_HOST = 'npipe:./pipe/podman-machine-default'
# CMD
set DOCKER_HOST=npipe:////./pipe/podman-machine-default
参考文档
- 安装 CA 证书指南