[Docker学习记] Windows电脑VBOX Centos下使用Docker安装mysql5.7

前提: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)。

 

posted on 2020-01-03 10:09  tomcat and jerry  阅读(207)  评论(0编辑  收藏  举报

导航