Docker安装MySQL
安装MySQL
MySQL简介
MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。
查找MySQL镜像
我们可以使用 docker search 镜像名称,命令来搜索镜像
1 | docker search mysql |
参数解释
搜索出来的有这么多镜像,怎么选择呢
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建。
根据参数,我们一般选择 官方发布的,并且stars多的。
下载镜像
可以使用
docker pull 镜像名称
来拉取镜像,我们选择了第一个Mysql的镜像,我们把它给拉取下来
1 | docker pull mysql |
注意事项
- 如果不写版本号默认拉取最新的版本好
latest
。 - 拉取的时候是多个层一起拉取的,这样可用让其他镜像复用分层
- 如果拉取的镜像不写仓库地址默认就是
docker.io/library/
下载指定版本的镜像
我们上面下载的镜像不符合我们的预期,我们需要Mysql5.7的镜像
查找指定镜像
可以登录 https://hub.docker.com 地址搜索镜像
输入需要搜索的镜像名称,并选择对应镜像名称
选择
tag
标签,这个就是版本的信息
找到符合的版本 的mysql镜像,这里我们选择
5.7.33
下载指定版本镜像
刚才我们已经找到了
5.7.33
版本的Mysql的镜像,我们使用docker pull
命令下载,镜像后面跟的是tag也就是版本名称
1 | docker pull mysql:5.7.34 |
我们发现,我们的新拉取的mysql镜像共用了 部分分层
查看镜像
安装完镜像后,我们需要看一下我们的本地镜像,使用
docker images
可用查看本地镜像
1 | docker images |
这里有两个镜像,一个是最新版本的一个是我们刚才下载的
5.7.33
版本的
MySQL配置
配置MySQL忽略大小写
创建MySQL挂载目录,等会会解释什么是挂载路径
1 | 创建MySQL配置的文件夹 |
配置MySQL忽略大小写,在我们创建的MySQL配置文件挂载点的目录的my.cnf文件加入如下内容
1 | [mysqld] |
创建MySQL数据目录
因为默认MySQL启动后他的文件是在容器中的,如果我们删除容器,数据也将会消失,我们需要将数据挂载出来。
1 | 创建mysql存储的目录 |
启动MySql
使用
docker run
启动容器
1 | docker run -d -p 3306:3306 -v /tmp/etc/mysql:/etc/mysql/mysql.conf.d/ -v /tmp/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7.34 |
到这里MySQL已经后台运行了
参数解释
- -d:是指容器后台运行,如果不加
-d
,当用户断开客户端时容器会结束运行 - -p:将容器的3306端口映射到主机的3306端口,用来暴漏端口的
- -v:这个命令是用来挂载目录的,将本地目录挂载到容器中,这样容器操作的就是本地目录
- -e:这个命令是配置环境参数的,这里
MYSQL_ROOT_PASSWORD=root
指的是用root用户运行mysql,可以登录Docker容器通过ENV
命令查看 - –name:这个命令是配置Mysql的容器名称的,如果不配置,默认是随机生成的名字
检查MySQL运行状态
现在并不能确认MySQL的运行状态,我们需要去看下
查看容器运行状态
使用
docker ps
可以看到运行中的容器
1 | docker ps |
执行命令后,我们看到mysql的服务已经起来了
查看MySQL运行日志
现在MySQL容器起来了,并不代表MySQL已经成功启动,我们需要使用
docker logs
命令查看MySQL的日志
1 | docker logs -f mysql |
该命令可以查看容器日志
-f
是追踪打印日志,可以看到MySQL已经启动了
客户端连接MySQL
因为我们已经暴漏端口了,可以使用客户端工具连接MySQL
检查配置的大小写参数是否生效
1 | SHOW VARIABLES LIKE '%case_table%'; |
查看容器挂载的配置文件
可以通过
docker exec -ti mysql /bin/bash
命令登录容器,检查挂载的配置文件情况
1 | 登录容器 |
该命令含义是在mysql容器中以
我们可以看到我们修改的配置文件已经被挂载到了docker内部,这里面用到了exec命令,主要是在deocker容器中运行命令,下面我们介绍下
命令格式
主要是在deocker容器中运行命令
1 | docker exec [options] container command [arg...] |
命令参数
名称 | 简写 | 描述 |
---|---|---|
–detach | -d | 后台运行模式,在后台执行命令相关命令 |
–detach-keys | 覆盖容器后台运行的一些参数信息 | |
–env | -e | 设置环境变量 |
–interactive | -i | 展示容器输入信息STDIN |
–privileged | 为命令提供一些扩展权限 | |
–tty | -t | 命令行交互模式 |
–user | -u | 设置用户名(format: <name|uid>[:<group|gid>]) |
–workdir | -w | 指定容器内的目录 |
查看挂载的数据文件
可以看下挂载的数据文件是否存在
1 | cd /tmp/data/mysql/ && ll |
我们看到数据文件已经写入了
MySQL准备数据
MySql需要导入一些数据用来操作,我们用MySQL官方提供的数据库来操作
下载并导入数据
下载MySQL测试数据库
到测试数据官网 下载数据库文件
直接导入无法导入,需要编辑
employees.sql
文件的一些地方
set storage_engine = InnoDB;
修改为:set default_storage_engine = InnoDB;
select CONCAT('storage engine: ', @@storage_engine) as INFO;
修改为:select CONCAT('storage engine: ', @@default_storage_engine) as INFO;
1 | ..... |
导入测试数据
下载解压后,在本地执行命令导入到mysql服务器
1 | mysql -uroot -h192.168.64.152 -p < employees.sql |
客户端检查数据
在登陆客户端就能看到数据库以及表了