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访问