参考文献:
https://blog.youkuaiyun.com/Ber_Bai/article/details/116572207
https://www.cnblogs.com/wjw1014/p/12149399.html
https://blog.youkuaiyun.com/weixin_43956484/article/details/116499061
查找mysql镜像
docker search mysql

下载mysql镜像(:5.7 表示5.7版本)
docker pull mysql:5.7

上图是已经拉取过 拉取第二次的结果。
宿主机和容器的配置文件设置。
方式一:
先第一次启动
docker run -d \
-p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:5.7
docker exec -it mysql bash
mysql -uroot -p
# Enter password:
# mysql> show variables like '%datadir%';
show variables like '%datadir%';
show variables like '%datadir%';会输出数据文件的存放路径 /var/lib/mysql/

拷贝容器配置文件
docker cp mysql:/etc/mysql /usr/local/mysql/conf
mysql容器的配置文件存在 /etc/mysql 下
docker stop mysql
docker rm mysql
方式二:手动配置容器MySQL数据、配置、日志挂载宿主机目录
# 宿主机创建数据存放目录映射到容器
mkdir -p /usr/local/docker_data/mysql/data
# 宿主机创建配置文件目录映射到容器
mkdir -p /usr/local/docker_data/mysql/conf #(需要在此目录下创建"conf.d"、"mysql.conf.d"两个目录)
mkdir -p /usr/local/docker_data/mysql/conf/conf.d # (建议在此目录创建my.cnf文件并进行相关MySQL配置)
mkdir -p /usr/local/docker_data/mysql/conf/mysql.conf.d
# 宿主机创建日志目录映射到容器
mkdir -p /usr/local/docker_data/mysql/logs
重新启动容器
docker run \
-d \
--privileged=true \
-p 3306:3306 \
--name mysql \
-v /usr/local/docker/mysql/conf/mysql:/etc/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql/ \
-v /usr/local/docker/mysql/logs:/var/log/mysql/ \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart always \
mysql:5.7 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

注解:
docker run | run 是运行一个容器 |
-d \ | 表示后台运行 |
--privileged=true \ | 设值MySQL 的root用户权限, 否则外部不能使用root用户登陆 |
-p 3306:3306 \ | 端口映射(宿主机端口:容器端口) |
--name mysql \ | 容器名称 |
-v /usr/local/docker/mysql/conf/mysql:/etc/mysql \ | 容器MySQL配置目录映射(宿主机:容器) |
-v /usr/local/docker/mysql/data:/var/lib/mysql/ \ | 容器MySQL数据目录映射(宿主机:容器) |
-v /usr/local/docker/mysql/logs:/var/log/mysql/ \ | 容器MySQL日志目录映射(宿主机:容器) |
-e MYSQL_ROOT_PASSWORD=123456 \ | 容器的环境变量(root账号初始化密码) |
--restart always \ | 表示docker启动,nysql也会启动。 |
mysql:5.7 \ | 指定docker镜像 (可以是镜像名称或者镜像ID) |
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci | 设值数据库默认编码 |
run run 是运行一个容器
-d 表示后台运行
-p 表示容器内部端口和服务器端口映射关联
--privileged=true 设值MySQL 的root用户权限, 否则外部不能使用root用户登陆
-v /usr/local/docker/mysql/conf/mysql:/etc/mysql 将服务器中的配置映射到docker中的/docker/mysql配置
-v /usr/local/docker/mysql/data:/var/lib/mysql/ / 同上,映射数据库的数据目录, 避免以后docker删除重新运行MySQL容器时数据丢失
-e MYSQL_ROOT_PASSWORD=123456 设置MySQL数据库root用户的密码
--name mysql 设值容器名称为mysql
--restart always 表示docker启动,nysql也会启动。
mysql:5.7 表示从docker镜像mysql:5.7中启动一个容器
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 设值数据库默认编码
数据库登录验证:


创建账户
docker exec -it mysql5.7 bash
mysql -u root -p
# 创建用户并开启远程登录
CREATE USER '你的账号'@'%' IDENTIFIED BY '你的密码';
# 创建数据库并设置字符集
CREATE DATABASE `库名` CHARACTER SET 'utf8mb4';
# 给账号授权数据库
GRANT ALL PRIVILEGES ON 库名.* TO '你的账号'@'%';
docker 常用命令
# 删除容器(参数可以是容器名称或容器ID)
docker rm mysql5.7
# 删除镜像
docker rmi mysql5.7
# 启动容器
docker start mysql5.7
# 启动容器/重启容器
docker restart mysql5.7
# 停止容器
docker stop mysql5.7
# 进入容器
docker exec -it mysql5.7 bash