一、docker 环境下安装中间件总体步骤
- 搜索镜像
- 拉取镜像
- 查看镜像
- 启动镜像--服务端口映射
二、安装 mysql
1、docker hub 上面查找 mysql 镜像
2、从docker hub上拉取 mysql 镜像到本地(示例标签为5.7)
docker pull mysql:5.7
3、docker images 查看是否有拉取到的 mysql
docker images mysql
4、使用 mysql5.7 镜像创建容器实例(也叫运行镜像)
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=你的mysqlroot密码 -d mysql:5.7
进入容器,并进入 mysql
docker exec -it 容器ID /bin/bash
mysql -uroot -p
这个时候,就已经进入 mysql 的交互命令行,可以进行一些建库建表操作
5、使用 navicat 客户端连接我们 docker mysql
因为我的 docker 服务是安装在阿里云ECS服务器上的,所以需要在安全组开放一下 3306 端口。
源 0.0.0.0 表示不限定特定IP的访问。
此时,我们一个简易版的 mysql 已经运行起来了。可以正常的增删改查。但是还是存在两个比较严重的问题。
1、中文乱码
2、容器被删了,或者被停掉了,我们的业务数据就没了 (因为容器存在于内存中)
中文乱码演示
查看 mysql 的字符集编码,发现 docker上 mysql 默认字符集编码 都是 latin1
SHOW VARIABLES LIKE 'character%';
6、mysql 实战版
为了避免冲突,先删除我们上面新建的 mysql 容器。
(1)新建 mysql 容器实例,挂载容器数据卷
docker run -d -p 3306:3306
--privileged=true
-v /usr/matrix/mysql/log:/var/log/mysql
-v /usr/matrix/mysql/data:/var/lib/mysql
-v /usr/matrix/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=你的mysqlroot密码
--name mysql mysql:5.7
-v 容器数据卷映射 宿主机路径:容器路径
--privileged=true 扩大容器的权限解决挂载目录没有权限的问题
-d 后台启动
--name 给容器实例取别名
(2)新建 my.cnf,通过容器卷同步给mysql容器实例,解决中文乱码问题
my.cnf 内容如下
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
(3)重新启动 mysql 容器实例再重新进入并查看字符编码
(4)重新建库建表插入一条中文数据看效果
(5)删除当前mysql实例,重新启动一个配置完全相同的实例,查看数据是否存在
数据还在。