目录
3.5 删除上述mysql容器1,用数据卷重新创建一个新的mysql容器2
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/
3.2 新建mysql容器1,使用数据卷
(1)命令:
docker pull mysql:5.7
docker run -itd --name mysql-test -p 3306:3306 -v mysqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
(2)其中:mysqldata是上面创建的数据卷名称,/var/lib/mysql 是容器中的路径
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)不授权的话,外部远程客户端无法访问,需要在容器里手动敲命令。所以,授权客户端来操作数据库表格,比较方便。
3.4 在客户端远程访问,创建库和表
(1)在远程客户端中,创建完数据库,创建表格,然后在mysql容器中查看。
3.5 删除上述mysql容器1,用数据卷重新创建一个新的mysql容器2
(1)说明:多个容器共用同一个数据卷,如果第一个容器还在使用,此时第二个容器尝试使用数据卷,会失败。因为数据卷被占用了。 先把其他容器都stop, rm掉。再手动的起一个新的容器。
3.6 验证之前在数据卷中更新的信息,是否体现在新容器里
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容器。