前提:Windows电脑,已经安装了VBOX,下载centos.iso, 成功导入VBOX, 已安装好docker
你会接触到:docker的部分基本命令和解释,一些特定配置(docker/container, VBOX)
> docker pull mysql:5.7
> docker image ls --查看是否有mysql5.7的镜像
> docker run -itd --name cnblogs-com-tomcatandjerry-mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 --指定mysql版本,不然会下载最新的版本,相当于mysql:latest
> docker container ls --查看mysql是否运行
> docker container logs 06b46 --[06b46]是containerID,通过docker container ls 可以看到
在VBOX里配置下端口映射:
设置 > 网络 > 网卡1 > 端口转发:
添加一行 mysql, TCP, 127.0.0.1, 13306, 10.0.2.15, 3306
保存完毕后,可以使用HeidiSQL配置连接到本机13306端口,连接mysql了
> docker container stop 06b46 --停止运行的mysql, [06b46]是containerID,通过docker container ls 可以看到
> docker container start 06b46 --使用start来继续运行上次的container,如果使用 run 命令,会是一个新的container, 里面的mysql也是全新的,你之前的数据不会出现
docker命令部分参数解释
```
run 命令的参数
-it: shell映射,就是把你当前的shell映射到docker里的shell(你当前的命令行映射到docker里的命令行, 不带这个参数没法交互,当然可以通过docker container exec -it [containerID] /bin/bash 就能进入容器,通过shell输入脚本)
-d: 后台运行容器,并返回容器ID
-p: 小写的p,指定端口映射,就是指定centos的端口映射到容器端口 -p 8000:3000 就是把centos的8000端口映射到容器的3000端口, 如果是VBox跑的centos,就只需配置10000 映射到10.0.2.15 8000端口,就可以在最外层的windows上,使用 10000访问centos里docker的3000端口
--name: 给container指定一个名字
-e: 配置环境变量, MYSQL_ROOT_PASSWORD=123456,就是指定container里mysql的root密码是123456
还有其他参数,可以参考[runoob.com](https://www.runoob.com/docker/docker-run-command.html)
```
#### 提高篇 ####
## 把容器中的mysql数据文件映射到外面主机的目录
上述方法启动mysql,数据文件(包括数据库,表,数据等)都是存在容器container的目录下(/var/lib/mysql)
>! 如果容器文件损坏,会导致数据无法读取和恢复
这个时候就需要把数据库的文件,存放到外面主机(比如Centos)的文件系统上
这样就算启动时,有参数 --rm (表示容器container停止会删除container),容器停止且自动删除,数据库/表/数据文件依然在Centos的目录下
### 如何把数据文件映射到宿主机器上?
很简单,利用Docker的VOLUMN: 简单点就是通过-v参数 把目录做个映射
```
docker run --rm --name mysqldatatest
-p 3306:3306
-v /root/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
-d mysql:5.7
```
#### 参数解释:
```
-v /aaa:/bbb 把宿主机器(Centos)上/aaa绝对路径,映射到容器里的/bbb路径
```
通过以上的命令,把mysql的数据文件/var/lib/mysql 映射到了外面(宿主)Centos系统的/root/mysql/data
你可以查看该目录:
ls /root/mysql/data/
mysql的数据文件都在这里。
我们可以测试一下:
连接到这个mysql,然后创建数据库,创建表,插入记录。
然后:
```
> docker container ls
> docker container stop [containerId]
> docker container ls -a ---查看所有容器,发现之前的mysql已经没了,因为使用--rm
> docker run --rm --name mysqldatatest
-p 3306:3306
-v /root/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
-d mysql:5.7
> docker container ls ---查看新的mysql容器
> docker logs [containerID] ---如果有错误,请把--rm参数去掉,再跑一边docker run, 然后查看containerID, 再查看日志到底是什么错误
```
使用工具连接到数据库,发现之前的数据库/表/数据都在
[测试完成](https://www.cnblogs.com/tomcatandjerry/p/12143442.html)。