哈喽,大家好,我是强哥。
最近强哥在学习一个开源项目,由于想要在本地部署项目以便更好的进行项目预研,所以需要在本地搭建项目环境。
项目中有用到MySQL和Redis,可是如果在本地直接安这两个软件强哥又觉得很不舒服,机子上有各种各样的开发软件以后也不好维护。恰巧,自己机子上安装了Docker,那为什么不直接把MySQL和Redis安到Docker上呢?
说干就干,这篇文章只是简单的记录下Docker安装MySQL和Redis的步骤方法,可以说是个备忘录吧。毕竟搭建环境还是可能时不时要用到的,自己实践好的拿来就用,比较省时间。
安装Mysql
1、查找镜像
docker search mysql
2、下载镜像
选择自己想要的版本,然后下载镜像
docker pull centos/mysql-57-centos7
3、通过镜像创建容器并运行:
# 启动容器,端口映射到3308,挂载之前的数据卷 docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 \ -p 3306:3306 f83a2938370c
命令解释:
f83a2938370c
为Image ID- -d 是说让我们的容器在后台运行
- -e 给新创建的数据库设置root密码
- -p 3306:3306 把所有对宿主机3306端口的tcp报文转发到容器的3306端口
4、配置外部连接
容器运行起来后,Mysql还不能直接连,需要配置权限、密码相关信息。
//进入容器: docker exec -it 62349aa31687 /bin/bash //进入mysql: mysql -uroot -p123456 //使用mysql库 mysql> use mysql; //更新域属性,'%'表示允许外部访问: mysql> update user set host='%' where user ='root'; //刷新权限: mysql> flush privileges; //授权用户,你想root使用密码从任何主机连接到mysql服务器 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION; mysql> flush privileges; //如果你想允许用户root从ip为192.168.1.104的主机连接到mysql服务器 mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.104' IDENTIFIED BY 'admin123' WITH GRANT OPTION; mysql> flush privileges;
配置完上面的信息之后,就可以直接在外部连接到Docker中的Mysql容器了
这里要说明一点,如果使用的是Dbeaver连接的MySQL8的话,如果直接连还会报错:Public Key Retrieval is not allowed
。
这时,只需要在Dbeaver中,连接设置->驱动属性中的allowPublicKeyRetrieval
设置成true
:
之后就能正常连接了:
5、Linux和Windows的区别
对了,强哥在安完Mysql并成功连接后,在使用项目的初始化脚本时,还遇到一个坑,就是项目的sql脚本使用的是小写的表名。会使得项目在初始化的时候报错:提示表不存在问题:Table 'xxx.QRTZ_LOCKS' doesn't exist。
这时候就要确认mysql数据库是否区分大小写。方法:使用show Variables like '%table_names'
查看lower_case_table_names
的值,0代表区分,1代表不区分。
LINUX下的MYSQL默认是要区分表名大小写的 ,而在Windows下表名不区分大小写
所以,如果是Docker安装Mysql的话,肯定就是区分大小写了,让MYSQL不区分表名大小写的方法其实很简单:
- 修改/etc/my.cnf
- 在[mysqld]下加入一行:
lower_case_table_names=1
- 重新容器即可
安装Redis
其实有了上面安装Mysql的经验,按差不多的顺序安装Redis就可以了。
1、查找镜像
docker search redis
2、下载镜像
选择自己想要的版本,然后下载镜像
docker pull redis
3、运行Redis容器
docker run --name redis -d -p 6379:6379 5d44f444e409
5d44f444e409
为Image ID
4、外部连接
Redis相对没有Mysql这么麻烦,还要配权限什么的。Redis容器启动后,直接外部就可以连啦:
当然,./redis-cli
这个也是要本地有redis的包才行,可以用Redis-manager测试连接或者写一段代码测试连接效果一样哈。
写在最后
其实,这篇文章内容相对来说,没有太多的技术含量,不过是一篇备忘录而已。当然,对于强哥这种有点健忘症的人来说,记录收藏一下,还是挺有用的。有时候往往是最简单的东西,最容易浪费时间和出错。尤其是你浪费了一大把时间在与目标无关紧要的东西上时,非常容易让人恼火。强哥记录这篇也是有切身经历的。
整个用Docker安装软件的流程就大体这样,比如之后还要用到其他的一些软件之类的,其实有Docker真的能方便很多。安装流程也大体如此,比较简单。安装一次Docker之后,便一劳永逸啦,比在本机安装真的会方便不少。