Docker-MySQL
安装MySQL
MySQL简介
MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。
查找MySQL镜像
我们可以使用 docker search 镜像名称,命令来搜索镜像
docker search mysql
参数解释
搜索出来的有这么多镜像,怎么选择呢
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
根据参数,我们一般选择 官方发布的,并且stars多的。
下载镜像
可以使用
docker pull 镜像名称
来拉取镜像,我们选择了第一个Mysql的镜像,我们把它给拉取下来
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也就是版本名称
docker pull mysql:5.7.34
我们发现,我们的新拉取的mysql镜像共用了 部分分层
查看镜像
安装完镜像后,我们需要看一下我们的本地镜像,使用
docker images
可用查看本地镜像
docker images
这里有两个镜像,一个是最新版本的一个是我们刚才下载的
5.7.33
版本的
MySQL配置
配置MySQL忽略大小写
创建MySQL挂载目录,等会会解释什么是挂载路径
# 创建MySQL配置的文件夹
mkdir -p /tmp/etc/mysql
# 编辑my.cnf配置文件
vi /tmp/etc/mysql/my.cnf
配置MySQL忽略大小写,在我们创建的MySQL配置文件挂载点的目录的my.cnf文件加入如下内容
[mysqld]
lower_case_table_names=1
创建MySQL数据目录
因为默认MySQL启动后他的文件是在容器中的,如果我们删除容器,数据也将会消失,我们需要将数据挂载出来。
#创建mysql存储的目录
mkdir -p /tmp/data/mysql
启动MySql
使用
docker run
启动容器
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
可以看到运行中的容器
docker ps
执行命令后,我们看到mysql的服务已经起来了
查看MySQL运行日志
现在MySQL容器起来了,并不代表MySQL已经成功启动,我们需要使用
docker logs
命令查看MySQL的日志
docker logs -f mysql
该命令可以查看容器日志
-f
是追踪打印日志,可以看到MySQL已经启动了
客户端连接MySQL
因为我们已经暴漏端口了,可以使用客户端工具连接MySQL
检查配置的大小写参数是否生效
SHOW VARIABLES LIKE '%case_table%';
查看容器挂载的配置文件
可以通过
docker exec -ti mysql /bin/bash
命令登录容器,检查挂载的配置文件情况
# 登录容器
docker exec -ti mysql /bin/bash
该命令含义是在mysql容器中以
我们可以看到我们修改的配置文件已经被挂载到了docker内部,这里面用到了exec命令,主要是在deocker容器中运行命令,下面我们介绍下
命令格式
主要是在deocker容器中运行命令
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 | 指定容器内的目录 |
查看挂载的数据文件
可以看下挂载的数据文件是否存在
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;
.....
set default_storage_engine = InnoDB;
-- set storage_engine = MyISAM;
-- set storage_engine = Falcon;
-- set storage_engine = PBXT;
-- set storage_engine = Maria;
select CONCAT('storage engine: ',@@default_storage_engine) as INFO;
.....
导入测试数据
下载解压后,在本地执行命令导入到mysql服务器
mysql -uroot -h192.168.64.152 -p < employees.sql
客户端检查数据
在登陆客户端就能看到数据库以及表了