1. 拉取镜像

# 拉取mysql镜像
docker pull mysql
# 查看镜像是否拉取成功
docker images

2. 创建持久化数据文件夹

# 挑选一个你感兴趣的目录
cd /home
# 创建一个你喜欢的目录
mkdir docker
cd docker
# 创建你喜欢的mysql持久化文件夹目录
mkdir mysql

3. 启动mysql容器

#MYSQL_ROOT_PASSWORD即为数据库登录密码
docker run -d --restart=always --name mysq-8.0 -p 5831:3306  -e MYSQL_ROOT_PASSWORD=Yt,6JhDEoaTZVFAm -v /home/docker/mysql:/var/lib/mysql mysql --lower_case_table_names=1

4. 进入容器开启远程配置

# 查看运行的容器Id
docker ps
#找到mysql的容器ID
docker exec -it 容器ID /bin/bash
#登录mysql
mysql -uroot -p
mysql> use mysql;
mysql> select user,host from user;
#增加远程登录权限
mysql> update user set host='%' where user='root';
#修改mysql的plugin,使用mysql_native_password
mysql> alter user root@'%' identified with mysql_native_password by '你要设置的密码';
mysql> exit;

5. 防火墙开放端口

如果你是云服务器,想要开放端口,请在安全组中设置
#开放5831端口
firewall-cmd --zone=public --add-port=5831/tcp --permanent
#防火墙服务重启,以便加载新开放的端口
systemctl restart firewalld.service

6. 开放远程访问

8.0版本以前

# 使用用户名密码登录 mysql
mysql - uroot - p
# 切换至 mysql 数据库
USE mysql; 
# 假设你的用户名为 root ,密码是 12345678,那么以上语句允许 IP 为 114.114.114.114 的用户登录至数据库。
GRANT ALL PRIVILEGES ON *.* TO root 114.114.114.114 IDENTIFIED BY "12345678" WITH GRANT OPTION;
# 使更改生效
FLUSH PRIVILEGES;

8.0以后

# 使用用户名密码登录 mysql
mysql - uroot - p
# 切换至 mysql 数据库
USE mysql; 
# 更新域属性,'%'表示允许所有外部 IP 访问数据库。
update user set host='%' where user ='root';
# 授权语句,授权 root 用户使用任意 IP 访问数据库。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
# 使更改生效
FLUSH PRIVILEGES;