Docker资料卷——Mysql
简介
docker是运行在虚拟环境中的,这样会有一个问题,那就是储存在docker内的数据会随着docker的重启、宕机而丢失,从而造成不可估量的损失。
所以docker提供了-v指令,可以将容器内的目录以及文件映射到外部文件系统,容器启动时会读取外部文件系统,从而保证数据的完整性。
mysql作为最流行的数据库之一,使用范围十分广泛,如果部署在docker却无法持久化怎么办呢?今天就来说一下mysql资料卷。
MySql资料卷
mysql需要保存的只有两种文件:数据和配置文件。mysql的默认配置文件是 /etc/mysql/my.cnf (winDocker下是 /etc/my.cnf),如果是docker下的mysql,建议在 /etc/mysql/conf.d 目录中创建 .cnf 文件。新建的文件只要保证后缀名是 cnf 即可覆盖配置项。至于mysql数据存放的目录,可以在mysql配置文件中找到:

文件写的很清楚,数据保存在 /var/lib/mysql 路径。接下来需要创建存放资料卷的路径,我创建的目录是 /docker/mysql/data 和 /docker/mysql/conf.d,前者是数据目录,后者是配置目录。接下来需要在本机指定位置新建目录(我已经创建好了):

现在编写命令:
docker run -itd -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /docker/mysql/data/:/var/lib/mysql/ -v /docker/mysql/conf.d:/etc/mysql/conf.d --name mysql01 mysql
这命令有些长,解释一下:
-itd:开启交互模式,模拟终端,后台运行
-p 3306:3306:对应端口映射到宿主机
-e MYSQL_ROOT_PASSWORD=123456:设置root账户密码为123456
-v /docker/mysql/data/:/var/lib/mysql/:将宿主机的 /docker/mysql/data/ 目录与mysql的 /var/lib/mysql/ 同步
-v /docker/mysql/conf.d:/etc/mysql/conf.d:将宿主机的 /docker/mysql/conf.d 目录与mysql的 /etc/mysql/conf.d 同步
--name mysql01:自定义容器名称
mysql:运行的镜像名称
这一命令执行过后,你会看到新容器mysql01已经正常启动了:

正常情况下,你设置的目录下会多出一些文件:


然后重启docker:

重启成功以后,进入容器查看数据库:

数据库并没有因为docker重启而被初始化,证明资料卷已经生效。以后再也不怕Docker宕机而数据丢失了。
后言
我分别在winDocker和linuxDocker下设置了mysql资料卷,但只有linux可以跑得起来。winDocker的资料卷可以设置成功,但是重启docker后会出现无法启动mysql容器的错误。根据mysql官方声明得知,docker内的mysql官方镜像是oracle公司专门为linux平台构建的,推测winDocker无法正确挂载资料卷应该和官方支持有点原因,建议同学们直接上手linux。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!