docker下载MySQL8.0镜像并运行

MySQL8.0与MySQL5.7版本有稍微差别。
首先到dockerhub搜索需要下载的MySQL镜像版本,这里下载的是8.0.18
docker下载MySQL8.0镜像并运行_第1张图片
拉取镜像

docker pull mysql:8.0.18

在这里插入图片描述
创建挂载文件(把MySQL配置文件以及数据库文件挂载到容器外,即宿主机路径下)

为什么需要挂载?便于修改数据库配置文件,以及确保数据的不丢失;因为停掉并删掉容器,然后再新开一个时,在没有挂载的前提下,旧的删掉了的容器的数据会丢失。所以我们需要将数据库的数据挂载到容器外。

在/media/docker/mysql8.0路径下创建conf以及data两个文件:

mkdir -p /media/docker/mysql8.0/{conf,data}

说明:

  • -p, --parents 需要时创建上层目录,如目录早已存在则不当作错误
  • {conf,data}文件集合,需要创建conf以及data两个文件

进入/media/docker/mysql8.0/conf路径下,创建数据库配置文件:

touch my.conf

然后编辑文件,可以直接引用默认配置文件,也可以自行添加自己需要的配置:

vim my.conf

添加一下内容:

[client]     
default-character-set=utf8
[mysql]   
default-character-set=utf8
[mysqld]
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
character_set_server=utf8
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

MySQL8.0版本必须配置secure_file_priv,不然启动状态为Exited(1),通过docker logs -f -t --tail 70 mysql8.0查看日志命令,会发现相关的报错提示:
在这里插入图片描述
同时,假如需要用工具(比如Navicat)连接数据库,需要配置Navicat的密码规则default_authentication_plugin=mysql_native_password,不然也会以下报错:
docker下载MySQL8.0镜像并运行_第2张图片

最后执行启动命令
docker run -d -p 3306:3306 --privileged=true -v /media/docker/mysql8.0/conf/my.cnf:/etc/mysql/my.cnf -v /media/docker/mysql8.0/data:/var/lib/mysql -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 --name mysql8.0 mysql:8.0.18
说明:

  • –privileged=true:容器内的root拥有跟宿主机root一样的权限
  • -v /media/docker/mysql8.0/conf/my.cnf:/etc/mysql/my.cnf
    将宿主机的/media/docker/mysql8.0/conf/my.cnf挂载到容器内的/etc/mysql/my.cnf
  • -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime
    同步宿主机时间,不然容器时间比东八区慢8个小时;也可以通过-e TZ=PRC设置环境变量同步时间
  • -e MYSQL_ROOT_PASSWORD=123456 设置数据库密码

最后用Navicat工具连接成功!

另外,启动postgres镜像也类似,命令为docker run --name postgres -v /media/docker/postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e TZ=PRC -p 5432:5432 -d f88dfa384cc4

你可能感兴趣的:(docker)