docker一分钟部署单机mysql

2,233 阅读2分钟

拉取镜像

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查看容器启动情况

image

容器已经成功启动,映射端口为32771,在navicat上连接试试。
image

客户端不支持服务端要求的认证协议,通过官方文档了解到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连接成功!

image

使用数据卷

按上述方式启动的容器,在不备份的情况下,重启后已经产生的数据将会丢失;使用数据卷可以方便的解决这个问题。

# 删除旧容器
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挂载到该目录,容器重启就不会丢失已产生的数据了。