Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
上面是百度百科中Docker
的介绍,因为Docker
的诸多好处,准备在产品中使用,最近做了些技术的预研,本文主要介绍在CentOS7
中使用Docker
来安装MySql
。
在https://hub.docker.com,搜索mysql
,结果如下:
选择上图红框的镜像,执行下面命令进行镜像的安装
docker pull mysql/mysql-server
执行下面命令来启动容器
docker run -d -p:3307:3306 --name mysqltest mysql/mysql-server
容器启动成功后,这时还不能通过工具连接到MySql
,需要进入到MySql
中进行相关的设置。
首先执行下面命令查看容器日志,找到MySql
的root
账户的密码
docker logs mysqltest
找到下图红框部分就是root
账户的密码
执行下面命令进入到容器中,进入容器又很多中方法,参考https://www.cnblogs.com/xhyan/p/6593075.html
docker exec -it mysqltest bash
再执行命令进入到MySql中
mysql -uroot -p
会提示输入密码,密码为上图中的红框部分的密码,如果看到下图欢迎界面表示密码正确,已经进入到MySql
的环境中了
修改root账户密码,网上有不少修改密码的Sql语句如下
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password123');
但上面的语句在MySql8.0.11
版本中会报错
如果您的版本和我一样,请执行下面代码来修改root
密码
alter user 'root'@'localhost' identified by 'password123';
修改完root密码后,可以使用下面代码切换到mysql数据库
use mysql
查看下用户信息
select user,host from user
可以看到root
的host
为localhost
,说明root
账户不能被外部连接,现在来创建一个新的用户,并赋相关的权限让外部可以连接,依次执行下面语句
CREATE USER 'fengwei'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON *.* TO 'fengwei'@'localhost' WITH GRANT OPTION;
CREATE USER 'fengwei'@'%' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON *.* TO 'fengwei'@'%' WITH GRANT OPTION;
执行两次exit
命令回到CentOS
中,执行下面命令重启MySql
容器,在容器重启的过程中MySql
也就重启了
docker restart mysqltest
此刻我们使用Sqlyog
来连接该容器了测试下,发现会报如下错误
执行命令进入到容器中的MySql
中,执行下面的Sql
语句
ALTER USER 'fengwei'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password123';
再用SQLyog
进行测试,发现已经连接成功。
本文介绍的方法虽然最终可以连接成功,但MySql
的配置文件和数据都在容器内,如果由于配置原因导致容器无法启动,数据内容将会丢失,所以更好的做法是将配置文件和数据存储挂接到宿主机中,下一篇讲介绍怎样在MySql
的容器中讲配置文件和数据目录挂接到宿主机中。