1、宿主机创建映射目录
mkdir -p /data/mysql/log
mkdir -p /data/mysql/data
mkdir -p /data/mysql/conf
这里我放在了/data/mysql目录下
2、拉取mysql镜像
docker pull mysql:5.7
注意是5.7版本,如果是8版本操作会略有不同,下篇文章介绍安装8版本的操作。
查看镜像
docker images
3、创建运行实例
docker run -p 13306:3306 --name mysql \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD='123456' \
-d mysql:5.7
参数说明:
- -p 13306:3306 将容器的3306端口映射到主机的13306端口
- -v /mysql/mysql/conf:/etc/mysql 将配置文件夹挂载到主机
- -v /mysql/mysql/log:/var/log/mysql 将日志文件夹挂载到主机
- -v /mysql/mysql/data:/var/lib/mysql 将数据文件夹挂载到主机
- -e MYSQL_ROOT_PASSWORD=123456 初始化root用户的密码
4、查看运行容器
docker ps
5、添加/修改配置文件
vim /data/mysql/conf/my.cnf
配置文件示例如下:
[client]
default-character-set=utf8[mysql]
default-character-set=utf8[mysqld]
init_connect='SET collection_connection=utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
注意:解决MySQL连接慢的问题
在配置文件中加入如下,并重启mysql
[mysqld]
skip-name-resolve
解释:
skip-name-resolve:跳过域名解析
设置自动启动
docker update mysql --restart=always
重启mysql容器
docker restart mysql
查看日志
docker logs -f --tail 1000 mysql
6、其他问题
如果启动容器后执行docker ps
未发现容器,可执行docker logs -f --tail 1000 mysql
查看日志,如上问题时,先去掉配置文件的映射启动容器
docker run -p 33060:3306 --name mysql \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
--privileged=true \
-e MYSQL_ROOT_PASSWORD='123456' \
-d mysql:5.7
容器启动正常后将容器的配置文件复制到主机对应目录
docker cp mysql:/etc/my.cnf /data/mysql/conf/my.cnf
再删除掉容器
# 注意这里是强制删除
docker rm --force mysql
# 下面是正常删除流程,先停止再删除
docker stop mysql
docker rm mysql
最后再重新启动mysql容器
docker run -p 33060:3306 --name mysql \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf/my.cnf:/etc/my.cnf \
--privileged=true \
-e MYSQL_ROOT_PASSWORD='123456' \
-d mysql:5.7