docker实战教程(十四):docker上安装mysql
docker hub上查找mysql镜像
docker search mysql
从docker hub上拉取mysql镜像到本地(指定版本为5.7)
docker pull mysql:5.7
使用mysql 5.7镜像创建容器(也叫运行镜像)
简单版
1.使用mysql镜像
# -e:设置环境,这里设置的是密码
# -d:后台运行
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
如果执行过程中发现端口被占用,使用netstat -nplt
找到对应的进程,kill -9
杀掉进程即可
但是发现不起作用,因为再次使用netstat查看,发现mysqld服务还在,原来这个进程是服务器上的mysql,已经监听了服务器的3306端口,这时候把服务器mysqld服务关闭
这时候可以正常创建了
2.建库建表插入数据
进入容器
docker exec -it 2556d631382c /bin/bash
输入账号密码进入mysql
![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105175957018-1014353378.png)
创建数据库、数据表并插入数据
![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105180220989-1238589636.png)
3.外部window连接运行在docker上的mysql容器实例服务
如果连不成功,检查linux服务器上的防火墙是否关闭
![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105180722801-884982927.png)
4.问题
(1).插入中文数据试试,为什么会报错?
![](https://img2022.cnblogs.com/blog/1186367/202211/1186367-20221105181137033-967822841.png)
docker上默认字符集编码隐患
```linux
SHOW VARIABLES LIKE 'character%';
(2).删除容器后,里面的mysql数据怎么办
实战版
1.新建mysql容器实例
# --privileged=true 容器数据卷的开启
# 挂了三个容器卷
docker run -d -p 3306:3306 --privileged=true -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
2.新建my.cfg
通过容器卷同步给mysql容器实例
[root@k8scloude1 tmp]# cd /root/mysql/conf/
[root@k8scloude1 conf]# ls -l
total 0
[root@k8scloude1 conf]# vim my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8
3.重新启动mysql容器实例再重新进入并查看字符编码
docker restart mysql
docker exec -it mysql /bin/bash
mysql -u root -p
4.再新建库建表插入中文测试
5.结论
之前的DB无效,修改字符集操作+重启mysql容器实例之后的DB有效,需要重建
结论:docker安装完mysql并run出容器后,建议请先修改完字符集编码后再新建mysql库、表,插入数据
6.数据问题
假如把mysql容器删除,重新创建并启动一个新的容器
这时候进入mysql中,发现它里面的数据还在,这是因为数据已经挂载到了本地的/root/mysql/data目录下,实现了数据备份