Docker 快速安装&搭建 Mysql 环境
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观
本节中,我们将学习如何通过 Docker 快速安装与搭建 Mysql 环境。
一、下载 Mysql 镜像
这里以 Mysql 5.7 为例:
docker pull mysql:5.7
下载完成后,通过 docker images
检查一下镜像是否下载成功:
二、先以最简单方式启动
先以简单的方式启动:
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
-d
:以后台的方式运行;--name mysql
:指定容器的名称为 mysql;-p 3306:3306
将容器的 3306 端口挂载到宿主机的 3306 端口上;-e MYSQL_ROOT_PASSWORD=123456
:指定 root 的密码为 123456
命令执行完成后,你也可以通过 docker ps
命令来确认下容器是否启动成功。若成功,我们需要将容器中的目录文件复制到宿主机中,分别包括:
- mysql 配置文件;
- 数据存储目录,以便挂载(PS: 若不挂载到宿主机,每次启动容器数据都会丢失)
# 将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/docker/mysql/config
# 将容器中的 mysql 存储目录复制到宿主机中
docker cp mysql:/var/lib/mysql/ /usr/local/docker/mysql/data
完成这一切后,让我们将刚刚运行的容器删除掉。
docker rm -f mysql
PS: mysql 是我们运行容器时,指定的名称,当然,你也可以先执行
docker ps
, 通过容器 ID 来删除。
三、正式运行 Mysql 容器
接下来,正式运行 Mysql 容器:
docker run -d \
--name mysql \
-p 3306:3306 \
-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /usr/local/docker/mysql/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7
其他不变,额外添加了两个挂载子命令:
-v /usr/local/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/docker/mysql/config/mysqld.cnf 文件上;-v /usr/local/docker/mysql/data:/var/lib/mysql
: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/docker/mysql/data 目录下;
执行命令完成后,查看下容器是否启动:
可以看到,容器运行成功
四、通过 Mysql 客户端连接一下试试
通过 MySQL 客户端连接刚刚创建的 mysql, 看看能否连接成功:
连接成功了!
五、相关问题补充
5.1 时区不对问题
在向数据库插入数据时,总是发现时间比系统时间少 8 个小时,这是因为 Mysql 的时区并不是我们想要的东八区。
解决方案:我们可以在上面说到的,挂载到宿主机的 Mysql 配置文件 mysqld.cnf
中,添加如下参数:
default-time-zone = '+08:00'
添加改配置后,重启 MySQL 容器, 再插入数据,就发现时间正常了:
docker restart your_mysql_container_name