docker安装mysql8.0
安装
1.首先从docker官方库拉去最新的mysql官方镜像
docker pull mysql:latest
注:我拉取的时候版本为8.0.12,使用docker images查看拉取成功的镜像
2.使用mysql镜像启动容器,并在后台运行
docker run -tid –name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
注1:–name 设置容器名称;-p 设置容器和主机的端口映射; -e 设置默认的root密码; -d 使容器在后台运行;最后的mysql是使用的镜像名
注2:执行后可以使用docker ps命令查看到运行的容器
3. 容器使用宿主机网络(可选)
容器使用宿主机网络后,容器IP与宿主机网络一致,直接使用宿主机IP+容器对外暴露的端口(默认3306)即可访问mysql
使用方法:添加–net=host参数
如:
docker run -tid –name mysql -e MYSQL_ROOT_PASSWORD=root –privileged=true –net=host mysql /usr/sbin/init
4. 使用自定义的mysql配置文件挂载并取代默认配置文件
在mysql容器内,配置文件位置一般为/etc/mysql/my.cnf,根据版本不同,也可能是是在/etc/mysql/conf.d或者/etc/mysql/mysql.conf.d下,
5. 将容器内数据库数据挂载到宿主机
mysql数据默认存储在容器下/var/lib/mysql目录下,如果我需要讲宿主机下/root/datadir存储mysql产生的数据,则需要配置参数 -v 宿主机目录:容器内目录,如
docker run -tid –name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root –privileged=true –net=host -v /root/datadir:/var/lib/mysql mysql /usr/sbin/init
6. 登陆数据库尝试
直接使用命令登陆数据库是会报错的,因为8.0版本的加密规则因为安全性被改了,而且也不允许外部直接登陆,默认拒绝所有非本地连接。
7. 登陆mysql容器,并使用root直接登陆
docker ps
docker exec -ti [容器id] bash
mysql -uroot -proot
8. 修改加密规则和可访问的来源,刷新数据库
use mysql;
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘root’;
alter user ‘root’@’%’ identified by ‘root’;
flush privileges;
quit;
注:use mysql后可以使用命令修改数据库配置; ‘root’@’%’中的%表示允许任意来源访问数据库,默认是localhost;mysql_native_password表示修改加密规则为原来的方式;flush privileges是刷新数据库命令;第三条命令是修改数据库密码为‘root’(建议修改为其他)
6.在容器所在虚拟机使用127.0.0.1的IP访问,在其他虚拟机使用容器所在虚拟机的公网IP访问