本文是自己先前在语雀中记录的一篇笔记,现在搬运到博客上,也请大家多多链接点赞:《20200315 Win10 使用 Docker 安装 MySQL8.0》
win10如何安装docker请看我的上一篇博客 《Win10 用Hyper-V和容器安装 Docker》
步骤概览
- 基础 docker 知识:
- 镜像相关操作:
- 容器的相关操作:
- MySQL镜像
- 一条指令执行安装
- 不挂载本地磁盘(重启后数据不会丢失,挂载本地默认文件)
- 挂载本地磁盘(不随系统自动启动)
- 挂载本地磁盘(随系统自动启动)
- 分步安装
- 拉取镜像
- 运行镜像
- 设置mysql
- 进入mysql容器
- 修改 mysql 的 root 远程连接权限和密码
- 连接 MySQL
- 最后
基础 docker 知识:
镜像相关操作:
docker基础中已经包含指令解释:详情点击 镜像的查看、拉取、删除
docker pull 镜像名称
docker pull 镜像名称 : 版本
docker image ps
容器的相关操作:
详细笔记内容点击:容器的相关操作指令与解释
本次安装的的全部指令
》 搜索镜像 docker hub
docker search 关键词
》docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录 镜像id或者镜像名:tag
# --name 指定容器名,可以自定义,不指定自动命名
# -i 以交互模式运行容器
# -t 分配一个伪终端,即命令行,通常-it组合来使用
# -p 宿主机port:容器port
# -d 后台运行并返回容器ID
# -v 宿主机目录:容器内目录,默认是rw读写模式,ro表示只读
》交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签
docker exec -it 容器名称 (或者容器ID) /bin/bash
》停止 / 启动容器
docker stop 容器名称(或者容器ID)
docker start 容器名称(或者容器ID)
》文件拷贝
docker cp 需要拷贝的文件或目录 容器名称:容器目录docker cp 容器名称:容器目录 需要拷贝的文件或目录如果你共享的是多级的目录,可能会出现权限不足的提示
安装mysql可以一条指令,也可以多条指令进行。一条指令的适合我们熟悉全部的指令后简便
MySQL镜像
打开 PowerShell 搜索 mysql 镜像
docker search mysql
安装,可以直接一步安装,因为执行 run 指令后,会搜索本地镜像,本地没有镜像会去 docker hub 上拉取镜像,也可以先拉取镜像。
一条指令执行安装
不挂载本地磁盘(重启后数据不会丢失,挂载本地默认文件)
docker run -itd --name mysql8 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.0
# -it 交互式方式创建容器
# --name mysql8 容器的名称设置为 mysql8
# -e 传入的环境变量参数 MySQL必须需要一个初始的MYSQL_ROOT_PASSWORD参数作为 mysql root 用户的密码,才能构建启动。
#-p 宿主机port:容器port映射
#-d 后台运行镜像
挂载本地磁盘(不随系统自动启动)
docker run --name mysql8 -p 3306:3306 -v /d/DockerSpace/mysql/data:/var/lib/mysql -v /d/DockerSpace/mysql/log:/var/log/mysql -v /d/DockerSpace/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
# -v 宿主机目录:容器内目录,默认是rw读写模式,ro表示只读,默认只读
/d/DockerSpace/... 是Windows系统中 D:/DockerSpace/... 执行指令的时候弹出确认是否挂载分享盘符D盘,点击确认即可
注意一点:
本地配置文件 my.cnf 不能为空,需要添加必要的配置信息(自行百度)。如下是我的 my.cnf 内容:
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#服务端使用的字符集默认为8比特编码的latin1字符集
character_set_server = utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#设置不区分大小写
# 必须在安装好MySQL后 修改mySQL配置文件设置为不敏感,一旦启动后,再设置是无效的,而且启动报错;
# 如果已经晚了,那必须把MySQL数据库文件全部 删除,修改配置文件再启动。
lower_case_table_names=1
挂载本地磁盘(随系统自动启动)
docker run --name mysql8 -p 3306:3306 -v /d/DockerSpace/mysql/data:/var/lib/mysql -v /d/DockerSpace/mysql/log:/var/log/mysql -v /d/DockerSpace/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root --restart=always -d mysql:8.0
# --restart=always 创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。
分步安装
拉取镜像
默认拉取最新版
docker pull mysql
运行镜像
参见上面的 一条指令执行安装,第一次运行选择一种启动方式运行即可。
挂载默认磁盘目录:docker run -itd --name mysql8 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.0
挂载自定义磁盘目录:docker run --name mysql8 -p 3306:3306 -v /d/DockerSpace/mysql/data:/var/lib/mysql -v /d/DockerSpace/mysql/log:/var/log/mysql -v /d/DockerSpace/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
后续直接运行对应的容器即可:docker run mysql:8.0
设置mysql
这时候如果用工具去连接mysql会提示不能登录,
先用 docker ps 查看运行中的容器,我的容器名称是 mysql8 以下文中容器名称都是使用 mysql8 来进行
进入mysql容器
docker exec -it mysql8 bash
docker exec -it mysql8 /bin/bash
修改 mysql 的 root 远程连接权限和密码
#容器内进入mysql
mysql -u root -p
#查看用户信息
select host,user,plugin,authentication_string from mysql.user;
#修改用户信息
ALTER user ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
#刷新配置
flush privileges;
#查看用户信息,即可看到信息被修改
select host,user,plugin,authentication_string from mysql.user;
#退出mysql
exit;
#退出容器控制台
exit
连接 MySQL
在 Win10 中连接 Docker 中的 MySQL
最后
到此,可以利用 Docker 安装 MySQL 结束了,最后多说两点:
- 根据自己的需求使用随系统启动和不随系统启动,老版本可能不挂载本地文件夹重启数据会丢失,现在版本应该不存在了,这个我们可以自己去验证一下。
- 使用命令 docker inspect 容器id或名称 (例如 docker inspect mysql8)查看容器的详细配置信息,我们查找到 Mounts 配置项可以看到共享文件夹的映射配置
- 使用容器安装一个应用,就像在文件夹中复制一个文件一样方便快捷, 一定要多动手,构建不成功可以删除容器(docker rm mysql8)重新构建。简而言之,言而总之,大胆造!