一、前期准备
1.安装linux虚拟机(本机使用的是centOS7 64位系统);
2.配置linux虚拟机网络,使虚拟机能够联网
2.本机Navcat 软件,用于验证远程连接;
二、安装Docker
1.检查系统内核版本,必须是3.10及以上 ,如果不是3.10以上请自行升级系统内核
[[email protected] ~]#uname -r
2.安装docker
[[email protected] ~]# yum -y install docker-io
3.启动docker
[[email protected] ~]# systemctl start docker
4.查看docker状态
[[email protected] ~]# service docker status
5.每次系统重启之后就需要重启一次docker容器,比较麻烦,故将docker设置为开机启动
[[email protected] ~]# systemctl enable docker
三、docker到这里就安装完成了,现在我们我们接着安装mysql
1.搜索镜像
docker search 镜像名(如docker search mysql)
2.拉取镜像
docker pull 镜像名
3.查看容器中的本地镜像
docker images
3.根据镜像启动容器
[[email protected] ~]# docker run ‐‐name mysql01 ‐d mysql
这样启动是错误的,因为没有指定root 用户密码等,我们查看下日志
[[email protected] ~]# docker logs 42f09819908b
error: database is uninitialized and password option is not specified You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个
说明启动是没有成功的
正确的启动方式是这样的:
[[email protected] ~]# docker run ‐‐name mysql01 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
我们查看运行的容器
[[email protected] ~]# docker ps
说明已经启动成功了,但是这样我们外部并不能够连接上,因为我们mysql是在docker容器里面启动的,mysql指定端口3306是docker 容器内的,我们需要配置对外的端口,另外为了避免由于防火墙等原因导致连接异常,系统一开始建议关闭防火墙或者开放指定的端口。
现在我们关闭刚才的运行的mysql重新启动,并做外部端口映射
关闭容器:
docker stop 容器的id
[[email protected] ~]# docker stop ecd8ca39190a
做端口映射并重新启动
[[email protected] ~]# docker run ‐p 3307:3306 ‐‐name mysql02 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d
3307:外部访问端口
3306:mysql数据库的端口,即docker内部指定端口
123456:给root数据库设置密码
四、外部通过navcat连接数据库
这里如果连接成功,那么docker安装mysql就连接成功了,如果出现连接错误1251,那么请继续往下看
如果连接错误,那么就需要进入mysql里面进行设置了
[[email protected] ~]# docker exec -it dockermysql bash
docker exec 进入容器
-t 让docker分配一个伪终端,并绑定到容器的标准输入上;
-i 让容器的标准输入保持打开;
dockermysql 是容器的名字。
输入root用户并输入密码(密码是启动时设置的):
[email protected]:/# mysql -u root -p
修改用户权限:grant all privileges on *.* to 'root'@'%';
刷新权限:flush privileges;
再次在主机上使用navcat连接,如果还是不通,继续:
查看用户信息:
select host,user,plugin,authentication_string from mysql.user;
特别提醒:host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码
修改用户密码:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'newpassword'; #更新一下用户的密码 root用户密码为newpassword
再次连接就能够连接成功了。
本博客只是本人对于docker在安装mysql过程中出现的一系列问题,如果有不同的地方,欢迎大家留言讨论