Podman 从0到1使用教程(macOS 系统):安装 MySQL、Redis 容器

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 客户端:

    bash 复制代码
    brew 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,若报错可修改目录权限:

    bash 复制代码
    chmod -R 777 ~/podman-data/mysql ~/podman-data/redis

3. Apple Silicon 架构镜像兼容

  • 现象:拉取镜像后运行报错「exec format error」;
  • 解决:拉取支持 arm64 架构的镜像(如 mysql:8.0redis:7.2 均适配,避免拉取仅 amd64 版本)。

4. 虚拟机启动失败

  • 原因:macOS 安全设置禁用虚拟机,或资源不足;
  • 解决:
    • 开启「系统设置 > 隐私与安全性 > 完全磁盘访问」(给终端授权);
    • 降低虚拟机资源配置(如 --memory 4096)。

八、总结

macOS 下 Podman 核心是通过虚拟机模拟 Linux 环境运行容器,命令与 Docker 高度兼容,仅需注意「目录挂载」和「端口映射」的跨系统适配。本教程完成了从 Podman 安装、虚拟机配置到 MySQL、Redis 容器部署的全流程,掌握后可复用该逻辑部署 Nginx、MongoDB 等其他容器。

若需部署更多服务(如 Nginx、PostgreSQL),只需替换镜像名和挂载目录,核心参数(-d/-p/-v/--restart)逻辑完全一致。

相关推荐
Neolnfra5 小时前
SMB、FTP、MySQL... 配置不当,即是漏洞
linux·数据库·mysql·安全·网络安全·系统安全·安全架构
颜淡慕潇5 小时前
容器生态双核心:Podman与Docker深度对比及实战指南
docker·eureka·podman
ChineHe5 小时前
Gin框架入门篇002_第一个Gin服务
macos·xcode·gin
Roc.Chang5 小时前
解决 macOS 26.1 The application “xxxx” can’t be opened. 问题
macos
风月歌5 小时前
小程序项目之驾校报名小程序源代码(java+vue+小程序+mysql)
java·vue.js·mysql·小程序·毕业设计·源码
dllxhcjla5 小时前
MySQL单表
数据库·mysql
赶路人儿5 小时前
从intel mac迁移到M3后软件的兼容性
macos
心动啊1215 小时前
MySQL在python中的使用——连接方式及对对象的调用
数据库·mysql
Chloeis Syntax5 小时前
MySQL初阶学习日记(6)--- 索引
数据库·学习·mysql
sky丶Mamba5 小时前
CentOS Stream 9安装MySQL
android·mysql·centos