1.查看仓库可用mysql版本
docker search mysql
2.拉取mysql镜像
指定版本的话命令如下
docker pull 镜像名称:版本号
我这里拉取最新的
docker pull mysql:latest
3.查看镜像是否下载成功
docker images
4.运行容器
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
参数说明:
docker run // 启动容器
--name mysql-test // 指定容器名称为mysql8.0
-e MYSQL_ROOT_PASSWORD=123456 // 配置环境变量,指定root用户的密码为123456
-p 3306:3306 // 映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
5.查看容器是否安装成功
docker ps
6.宿主机连接mysql,会发现连接失败,主要原因是mysql服务器要求的认证插件版本与客户端不一致造成的。
7.进入容器
docker exec -it mysql-test /bin/bash
8.登录mysql
mysql -u root -p 123456
9.查看认证插件
select user,plugin from user
可以看到root用户使用的plugin是caching_sha2_password,mysql官方网站有如下说明:
意思是说caching_sha2_password是8.0默认的认证插件,必须使用支持此插件的客户端版本。两种方式一种是升级客户端,另一种是修改插件认证为 mysql_native_password,我们看一下第二种。
// 修改root的密码为'root',摒弃原来的旧密码。
//使用mysql_native_password对新密码进行编码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
// 刷新权限
FLUSH PRIVILEGES;
重新使用客户端工具navicat mysql发现可以连接上容器里的mysql
10.在容器里创建一个测试数据库,验证宿主机是否一样
创建前的数据库
create database test
打开navicat 查看
11.添加新用户
#创建用户
CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
#分配权限
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
#刷新权限
FLUSH PRIVILEGES;