核心是使用命名卷挂载数据库/Redis关键目录:MySQL挂/var/lib/mysql、Redis挂/data,明确定义volumes块并引用,避免绑定挂载;Memcached无需数据持久化,因其设计为纯内存缓存。
用 Docker Compose 实现数据库与缓存服务的持久化,核心是正确配置 volumes,把容器内关键数据目录挂载到 Docker 管理的命名卷(named volume)上。这样即使容器重启、重建甚至删除,数据仍保留在卷中,不会丢失。
数据库的数据目录必须映射到持久化卷,否则每次容器重建都会清空所有表和数据。
/var/lib/mysql,需通过 volumes 将其绑定到命名卷environment 中设置了必要的初始化参数(如 MYSQL_ROOT_PASSWORD),避免因卷存在但未初始化导致启动失败Redis 默认仅内存运行,要持久化必须启用 RDB 或 AOF,并确保数据目录可写且被卷保护。
docker-compose.yml 中为 Redis 配置 volumes,挂载 /data 目录(Redis 默认工作目录)environment 设置 REDIS_MAXMEMORY 和 REDIS_MAXMEMORY_POLICY,防止内存溢出影响稳定性redis.conf,开启 save 规则或 appendonly yes
Memcached 是纯内存缓存,设计上不落盘。它的“持久化”仅指进程重启后缓存内容不恢复——但这不影响业务,因为缓存本就该容忍丢失。
command 指定 -v /path/conf:/etc/memcached.conf),用于管理行为memcached-admin 容器,它依赖主 Memcached 服务但不共享数据卷无论数据库还是缓存,持久化配置需遵循统一原则:
volumes 顶层明确定义命名卷(如 mysql_data:、redis_data:),不写具体路径volumes 字段中引用该命名卷,并指定容器内路径(如 - mysql_data:/var/lib/mysql)docker volume ls 和 docker volume inspect <name> 确认卷已创建且挂载成功docker run --rm -v mysql_data:/volume -v $(pwd):/backup alpine tar cf /backup/mysql_backup.tar -C /volume .