前言
在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
,这样可以保证就算该容器重启后,但是数据已经做到了持久化,所以容器重启后数据还是在的。