拉取镜像
docker pull mysql:8.0.20
运行容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d -p32771:3306 mysql:8.0.20
参数说明:
- --name 指定容器名称
- -e 设置环境变量,这里设置了mysql root用户的初始密码
- -d damon的缩写,指在后台运行
- -p32771:3306,将容器内mysql的3306端口映射到宿主机的32771端口
navicat客户端连接
执行docker ps
查看容器启动情况
容器已经成功启动,映射端口为32771,在navicat上连接试试。
客户端不支持服务端要求的认证协议,通过官方文档了解到8.0版本默认的身份验证插件由之前的mysql_native_password替换为caching_sha2_password,这可能会导致客户端兼容问题,我们手动改为以前的验证方式。
# 进入容器,mysql是容器的名称
docker exec -it mysql bash
# 连上mysql
mysql -p
# 更改root用户的host,以支持非本机访问
use mysql
update user set host='%' where user='root';
# 更改root用户的密码及验证插件
alter user 'root'@'%' identified with mysql_native_password by 'root';
navicate连接成功!
使用数据卷
按上述方式启动的容器,在不备份的情况下,重启后已经产生的数据将会丢失;使用数据卷可以方便的解决这个问题。
# 删除旧容器
docker rm -f mysql
# 启动新容器
docker run \
--name mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d -P mysql
- -v 挂载本地目录到容器中作为数据卷
- mysql服务器启动时会读取
/etc/mysql/my.cnf
中的配置,其中通过!includedir
引入了自定义配置目录/etc/mysql/conf.d
,将宿主机的/usr/local/mysql/conf
挂载到该目录上后,就可以在宿主机上创建和修改自定义的mysql配置文件(以.cnf
结尾)。 - 在容器的
/etc/mysql/my.cnf
配置文件中还指明了mysql的数据目录datadir=/var/lib/mysql
,将宿主机的/usr/local/mysql/data
挂载到该目录,容器重启就不会丢失已产生的数据了。