1、拉取官方镜像
docker pull mysql:5.7
2、创建宿主机配置文件相关
创建一个目录,用于存放配置文件相关,这样就不用每次都进入容器内部进行更改
mkdir docker
mkdir mysql
mkdir conf data logs
cd conf
vi my.cnf
3、运行容器
docker run -p 3306:3306 --privileged=true --restart=always --name mysql -v /opt/docker/mysql/conf:/etc/mysql/conf.d -v /opt/docker/mysql/logs:/var/log/mysql -v /opt/docker/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-p 3307:3306 指定端口映射,将容器的3306端口映射到宿主机的3307端口,格式为:主机(宿主)端口:容器端口(这个地方是由于我宿主机已经装了MySQL了,3306:3306会报端口占用,我只好写成3307)
–restart=always 不受Exit Code的影响,总是重启
–name mysql 为容器指定一个名称
-v /opt/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf 挂载目录,将主机当前目录下的 /opt/docker/mysql/conf/my.cnf 挂载到容器的 /etc/mysql/conf.d/my.cnf (可以指定是一个文件夹,也可以是一个文件)
-v /etc/localtime:/etc/localtime 将宿主机的时间挂载到容器内部,如果不挂载这个,可能会出现容器内部时间和当前时间不匹配,就会出现我们数据库数据出现时间不对问题
-e MYSQL_ROOT_PASSWORD=123456设置环境变量;这里我们初始化 root 用户的密码为123456
-d mysql:5.7 后台运行容器,并返回容器ID;(版本不是latest,需要带上对应的版本号)
–privileged=true 给特定的权限
授权 :GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;