一、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
- -p [宿主机端口]:[容器端口]:将容器内暴露的端口 3306 映射到宿主机端口 3306。
- -e [key=value]:给容器内的 Linux 设置环境变量 MYSQL_ROOT_PASSWORD,该环境变量的值是 Mysql root 密码。
- -d:后台启动。
- 进入容器,并进入 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
- -d:后台启动。
- -p [宿主机端口]:[容器端口]:将容器内暴露的端口 3306 映射到宿主机端口 3306。
- --privileged=true:扩大容器的权限解决挂载目录没有权限的问题。
- -v [宿主机路径]:[容器路径]:容器数据卷映射。
- -e [key=value]:给容器内的 Linux 设置环境变量 MYSQL_ROOT_PASSWORD,该环境变量的值是 Mysql root 密码。
- --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实例,重新启动一个配置完全相同的实例,查看数据是否存在
数据还在。