Podman 是无守护进程的容器管理工具,兼容 Docker 命令,macOS 下可通过 brew 便捷安装,且支持 Intel/Apple Silicon(M1/M2/M3)架构。本教程针对 macOS 环境,从 Podman 安装、基础配置到实战部署 MySQL、Redis 容器,全程手把手讲解。
一、环境准备
1. 系统要求
- macOS 10.15+(Catalina 及以上)
- 已安装 Homebrew(包管理器,未安装见下方补充)
- 网络通畅(拉取镜像)
2. 安装 Homebrew(若未安装)
打开「终端」执行以下命令:
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
验证安装:
bash
brew --version
二、macOS 安装 Podman
1. 核心说明
macOS 是类 Unix 系统但无原生 Linux 内核,Podman 需通过 podman machine(轻量级虚拟机)运行容器,这是 macOS 与 Linux 部署的核心区别。
2. 安装 Podman
bash
# 安装 Podman
brew install podman
# 验证安装(仅显示版本,未启动虚拟机)
podman --version
3. 初始化并启动 Podman 虚拟机
bash
# 创建并初始化默认虚拟机(默认配置:2核、2GB 内存、10GB 磁盘)
podman machine init
# 启动虚拟机
podman machine start
# 验证虚拟机状态(显示 Running 即为成功)
podman machine status
4. (可选)自定义虚拟机配置
若默认资源不足,可自定义配置(创建时指定):
bash
# 创建自定义虚拟机(4核、8GB 内存、20GB 磁盘)
podman machine init --cpus 4 --memory 8192 --disk-size 20
# 启动自定义虚拟机
podman machine start
5. 配置镜像加速(国内必配,提升拉取速度)
Podman 虚拟机的镜像配置文件路径为 ~/.config/containers/registries.conf,编辑该文件:
bash
# 创建配置目录(若不存在)
mkdir -p ~/.config/containers
# 编辑镜像配置文件
vi ~/.config/containers/registries.conf
添加以下内容(阿里云镜像加速,兼容 Docker Hub):
ini
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "registry.cn-hangzhou.aliyuncs.com/docker.io" # 阿里云加速地址
insecure = false # 非 HTTPS 需设为 true,此处阿里云为 HTTPS
重启虚拟机使配置生效:
bash
podman machine stop && podman machine start
三、Podman 基础命令(macOS 适配版)
macOS 下 Podman 核心命令与 Docker 兼容,但需注意:
- 容器运行在 Podman 虚拟机内,而非 macOS 宿主机;
- 端口映射、目录挂载均基于虚拟机,需通过 Podman 桥接实现宿主机访问。
核心命令速查:
| Podman 命令 | 功能说明 | 补充说明(macOS) |
|---|---|---|
podman machine ls |
列出所有虚拟机 | 查看虚拟机状态、IP 等 |
podman machine ip |
获取虚拟机 IP | 宿主机访问容器需用该 IP(或 localhost) |
podman pull <镜像名> |
拉取镜像到虚拟机 | 镜像存储在虚拟机磁盘中 |
podman run <参数> <镜像> |
创建并运行容器 | 端口映射默认绑定虚拟机 IP 和宿主机 |
podman ps |
列出运行中的容器 | 同 Docker |
podman exec -it <容器> <命令> |
进入容器 | 同 Docker |
podman machine stop/start |
停止/启动虚拟机 | 关闭虚拟机后容器全部停止 |
四、实战:部署 MySQL 容器(macOS 版)
1. 核心适配点
- macOS 宿主机目录需先挂载到 Podman 虚拟机,再映射到容器(或直接用虚拟机内目录);
- 推荐使用
mysql:8.0稳定版本,适配 Apple Silicon 架构。
2. 步骤 1:创建宿主机持久化目录
bash
# 在 macOS 家目录创建 MySQL 数据目录
mkdir -p ~/podman-data/mysql
3. 步骤 2:拉取 MySQL 镜像
bash
# 拉取适配多架构的 MySQL 8.0 镜像
podman pull mysql:8.0
# 验证镜像(显示 mysql:8.0 即为成功)
podman images
4. 步骤 3:运行 MySQL 容器
bash
podman run -d \
--name mysql8 \
-p 3306:3306 \ # 宿主机 3306 端口映射到容器 3306(自动桥接到虚拟机)
-v ~/podman-data/mysql:/var/lib/mysql \ # macOS 目录挂载到容器数据目录
-e MYSQL_ROOT_PASSWORD=123456 \ # 设置 root 密码
-e MYSQL_CHARACTER_SET_SERVER=utf8mb4 \ # 字符集支持 emoji
-e MYSQL_COLLATION_SERVER=utf8mb4_general_ci \
--restart=always \ # 容器随虚拟机启动自动重启
mysql:8.0
参数说明(macOS 重点):
-v ~/podman-data/mysql:/var/lib/mysql:Podman 会自动将 macOS 的~/podman-data/mysql挂载到虚拟机,再映射到容器,实现跨系统持久化;--restart=always:虚拟机启动时自动重启容器;- 若提示端口占用,可改为
-p 3307:3306(宿主机 3307 映射容器 3306)。
5. 步骤 4:验证 MySQL 运行状态
bash
# 查看容器状态(STATUS 为 Up 即为运行中)
podman ps | grep mysql8
# 查看 MySQL 启动日志(排查报错)
podman logs mysql8
# 进入 MySQL 容器,登录数据库
podman exec -it mysql8 mysql -uroot -p123456
# 验证字符集(容器内执行)
mysql> show variables like '%character%';
6. 步骤 5:macOS 宿主机连接 MySQL
-
方式 1:终端直连
macOS 需先安装 mysql 客户端:bashbrew install mysql-client # 连接(localhost 自动映射到 Podman 虚拟机 IP) mysql -h localhost -P 3306 -uroot -p123456 -
方式 2:图形化工具(Navicat/DBeaver/TablePlus)
连接参数:- 主机:
localhost(或podman machine ip获取的虚拟机 IP) - 端口:3306(若修改则填对应端口)
- 用户名:root
- 密码:123456
- 主机:
五、实战:部署 Redis 容器(macOS 版)
1. 核心适配点
- Redis 默认 6379 端口,需开启持久化(RDB/AOF);
- macOS 目录挂载逻辑与 MySQL 一致。
2. 步骤 1:创建宿主机持久化目录
bash
mkdir -p ~/podman-data/redis
3. 步骤 2:拉取 Redis 镜像
bash
podman pull redis:7.2 # 7.2 为稳定版,适配 Apple Silicon
4. 步骤 3:运行 Redis 容器(带密码+持久化)
bash
podman run -d \
--name redis7 \
-p 6379:6379 \
-v ~/podman-data/redis:/data \ # 挂载持久化目录(Redis 数据默认存 /data)
-e REDIS_PASSWORD=123456 \ # 设置密码
--restart=always \
redis:7.2 \
redis-server --requirepass 123456 --appendonly yes # 启用 AOF 持久化
参数说明:
--appendonly yes:开启 AOF 持久化(比 RDB 更安全,避免数据丢失);--requirepass 123456:设置 Redis 访问密码(与环境变量联动,双重保障);/data:Redis 容器默认数据目录,挂载后数据持久化到 macOS 的~/podman-data/redis。
5. 步骤 4:验证 Redis 运行状态
bash
# 查看容器状态
podman ps | grep redis7
# 进入 Redis 容器,测试连接
podman exec -it redis7 redis-cli
# 验证密码(容器内执行)
127.0.0.1:6379> AUTH 123456
# 返回 OK 即为密码正确
# 测试数据写入(容器内执行)
127.0.0.1:6379> SET name "podman-redis"
127.0.0.1:6379> GET name
# 返回 "podman-redis" 即为成功
6. macOS 宿主机连接 Redis
bash
# 安装 Redis 客户端(若未安装)
brew install redis
# 连接 Redis(localhost 映射虚拟机 IP)
redis-cli -h localhost -p 6379 -a 123456
# 测试数据
GET name
六、macOS 下 Podman 常用运维操作
1. 虚拟机管理
bash
# 查看虚拟机 IP(宿主机访问容器备用)
podman machine ip
# 停止虚拟机(容器全部停止)
podman machine stop
# 重启虚拟机
podman machine restart
# 删除虚拟机(需先停止,谨慎操作)
podman machine rm
2. 容器管理
bash
# 停止容器
podman stop mysql8 redis7
# 启动容器
podman start mysql8 redis7
# 查看容器详细信息(如挂载、端口、IP 等)
podman inspect mysql8
# 删除容器(需先停止)
podman rm mysql8 redis7
3. 镜像管理
bash
# 查看本地镜像
podman images
# 删除镜像(无依赖容器时)
podman rmi mysql:8.0 redis:7.2
# 清理无用镜像/容器/卷
podman system prune -a
七、常见问题排查(macOS 专属)
1. 端口映射失败
-
原因:macOS 宿主机端口被占用,或 Podman 虚拟机端口未开放;
-
解决:
bash# 查看宿主机端口占用 lsof -i :3306 # 更换映射端口(如 3307:3306) podman run -d --name mysql8 -p 3307:3306 ...
2. 目录挂载权限问题
-
现象:容器日志提示「Permission denied」,无法写入数据;
-
解决:macOS 目录默认权限兼容 Podman,若报错可修改目录权限:
bashchmod -R 777 ~/podman-data/mysql ~/podman-data/redis
3. Apple Silicon 架构镜像兼容
- 现象:拉取镜像后运行报错「exec format error」;
- 解决:拉取支持
arm64架构的镜像(如mysql:8.0、redis:7.2均适配,避免拉取仅amd64版本)。
4. 虚拟机启动失败
- 原因:macOS 安全设置禁用虚拟机,或资源不足;
- 解决:
- 开启「系统设置 > 隐私与安全性 > 完全磁盘访问」(给终端授权);
- 降低虚拟机资源配置(如
--memory 4096)。
八、总结
macOS 下 Podman 核心是通过虚拟机模拟 Linux 环境运行容器,命令与 Docker 高度兼容,仅需注意「目录挂载」和「端口映射」的跨系统适配。本教程完成了从 Podman 安装、虚拟机配置到 MySQL、Redis 容器部署的全流程,掌握后可复用该逻辑部署 Nginx、MongoDB 等其他容器。
若需部署更多服务(如 Nginx、PostgreSQL),只需替换镜像名和挂载目录,核心参数(-d/-p/-v/--restart)逻辑完全一致。