前言
在Docker容器中,如果启动的容器需要将数据持久化到本机上,这个时候通常使用docker run -v的命令将本地路径挂载到docker容器中。
1  | docker run -v 宿主目录:容器挂载的目录 镜像  | 
本章就来说明一下Docker如何部署MySQL服务,同时持久化数据。
Docker 目录挂载
Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定。譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定:
1  | $ docker run -it -v /test:/soft centos /bin/bash  | 
容器挂载有两点需要说明:
- 如果在容器内修改了目录,那么对应的挂载点目录也会改变。
 - 容器销毁了,在宿主机上新建的挂载目录不会消失。
 
部署MySQL容器步骤
拉取MySQL镜像,如果速度较慢的,可以采用网易的镜像加速。
1  | $ docker pull mysql:5.7 #使用5.7v的MySQL  | 
创建用于挂载的目录
1  | $ sudo mkdir /my/mysql/datadir #用于挂载mysql数据文件  | 
使用镜像创建容器
1  | $ docker run --name mysql5.7.1 -p 3306:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7  | 
参数解析:
–name:容器名
–p:映射宿主主机端口
-v:挂载宿主目录到容器目录
-e:设置环境变量,此处指定root密码
-d:后台运行容器
进入到正在执行的容器中
1  | $ docker exec -it mysql5.7.1 /bin/bash  | 
登录MySQL
1  | $ mysql -u root -p  | 

容器目录到宿主机
上面已经成功启动了MySQL服务,下面继续在该容器中添加上记录,观察一下宿主机有没有保存该记录。
在MySQL容器中创建数据库和表:
1  | CREATE DATABASE test;  | 
插入数据:
1  | INSERT INTO t_user (id, username,nickname, password) VALUES (1, "jintx", "jiagu", "22");  | 
退出容器到宿主机上查看,刚刚新建的表以及数据的确存放在了/my/mysql/datadir,这样可以保证就算该容器重启后,但是数据已经做到了持久化,所以容器重启后数据还是在的。
