目录

1. 要求

2. 思路

3. 操作步骤

3.1 创建数据卷

3.2 新建mysql容器1,使用数据卷

3.3 进入mysql容器,连接数据库,授权远程操作

3.4 在客户端远程访问,创建库和表

3.5 删除上述mysql容器1,用数据卷重新创建一个新的mysql容器2

3.6 验证之前在数据卷中更新的信息,是否体现在新容器里

4. 遇到的问题

4.1 centOS7本地mysql端口和docker中的mysql容器端口的冲突问题


1. 要求

使用数据卷来实时更新mysql。

2. 思路

(1)手动创建一个用来存放mysql业务数据的数据卷.

(2)用这个数据卷信息创建一个mysql容器1。

(3)进入mysql容器1,新建数据库表格等(这些业务数据会存放在数据卷中)。

(4)退出,停止,删除mysql容器1。

(5)用上面的mysql数据卷信息,再次创建一个mysql容器2。

(6)进入mysql容器2,查看之前在mysql容器1中创建的数据库表格等信息是否还在?还存在的话,说明这些业务数据存在于数据卷中,独立于容器的生存周期。

3. 操作步骤

3.1 创建数据卷

(1)命令:docker volume create --name 数据卷名称(自定义)

(2)宿主机中数据卷的默认路径:var/lib/docker/volumns/

centos7退出不保存命令 centos7如何保存退出_1024程序员节

3.2 新建mysql容器1,使用数据卷

(1)命令:

docker pull mysql:5.7

docker run -itd --name mysql-test -p 3306:3306 -v mysqldata:/var/lib/mysql

(2)其中:mysqldata是上面创建的数据卷名称,/var/lib/mysql 是容器中的路径

centos7退出不保存命令 centos7如何保存退出_数据卷_02

centos7退出不保存命令 centos7如何保存退出_1024程序员节_03

3.3 进入mysql容器,连接数据库,授权远程操作

(1)命令:

docker exec -it mysql-test /bin/bash        //进入mysql容器

mysql -u root -p                                        //登录mysql

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'      //授权

(2)不授权的话,外部远程客户端无法访问,需要在容器里手动敲命令。所以,授权客户端来操作数据库表格,比较方便。

 

centos7退出不保存命令 centos7如何保存退出_centos7退出不保存命令_04

3.4 在客户端远程访问,创建库和表

(1)在远程客户端中,创建完数据库,创建表格,然后在mysql容器中查看。

centos7退出不保存命令 centos7如何保存退出_数据卷_05

centos7退出不保存命令 centos7如何保存退出_mysql_06

centos7退出不保存命令 centos7如何保存退出_centos7退出不保存命令_07

3.5 删除上述mysql容器1,用数据卷重新创建一个新的mysql容器2

(1)说明:多个容器共用同一个数据卷,如果第一个容器还在使用,此时第二个容器尝试使用数据卷,会失败。因为数据卷被占用了。 先把其他容器都stop, rm掉。再手动的起一个新的容器。

centos7退出不保存命令 centos7如何保存退出_mysql_08

centos7退出不保存命令 centos7如何保存退出_mysql_09

3.6 验证之前在数据卷中更新的信息,是否体现在新容器里

centos7退出不保存命令 centos7如何保存退出_mysql_10

 

centos7退出不保存命令 centos7如何保存退出_docker_11

centos7退出不保存命令 centos7如何保存退出_1024程序员节_12

4. 遇到的问题

4.1 centOS7本地mysql端口和docker中的mysql容器端口的冲突问题

上述操作是在我的centOS7远程服务器中进行的。

因为我的centOS7本身就安装了mysql, 占用了端口3306。

所以最开始在docker中,创建mysql容器时,我选了3306:3306的端口设置,报错(报错信息忘记截图了)。

如果用别的端口,比如3307:3306, 是可以成功创建mysql容器,但是远程Navicat新建连接服务器时有问题,比如,远程连接时如果用3306端口,则必须输入服务器本身(centOS7中直接安装的MYSQL)的mysql的账号和密码。如果用3307端口,又无法连接(这里面应该存在一些我的理解不到位的地方)。

最后为了演示mysql数据卷的相关操作,临时用了一个比较笨的解决办法:我先关闭了服务器本身的mysql服务(service mysqld stop),然后再次在docker中创建mysql容器,用的3306:3306端口设置。这样就可以远程访问到mysql容器。