先讲Docker的
Docker
先简单认识一下Docker,经常使用Docker的都知道里面有镜像和容器两个东西。三者之间最重要的一句话是:Docker 用镜像做出容器
Docker里面可以有很多镜像 镜像里面可以创建很多容器
- 一个镜像,可以跑出很多个容器,互相不影响。
- 容器里改的东西,删掉容器就没了;镜像本身不会变。
- 容器不是天天新建,停止后还在,只是没在运行。
所以镜像相当于一个模板,而容器就是它的一个实例
这里要用的镜像就是mysql 8.4,所创建的容器就是ai-kb-mysql,如下图
这里解释一下:
图中的ai-knowledge-base是什么它是Docker Compose 的项目名(project),来自你
docker-compose.yml所在的文件夹名ai-knowledge-base。Compose 的逻辑是:一个 yml 文件 = 一个项目,项目里可以有多个服务,每个服务跑出一个容器。Docker Desktop 就按项目把容器归成一组,方便你看和批量操作。
所以这里创建了两个容器,分别有自己的镜像,本节只讲mysql相关的
启动容器
方法一
打开Docker Desktop,图形界面里点一下 ▶就启动了容器
方法二
用命令行
先打开Docker Desktop
在含有docker-compose.yml的目录下的终端输入:
docker compose up -d # 启动
docker compose ps # 用来检查,看状态,应为 running
这里再扩展一下compose的一些细节
docker compose up不带-f时,只会自动找这四个名字(在当前目录):compose.yaml ✅ compose.yml ✅ docker-compose.yaml ✅ docker-compose.yml ✅ ← 最常用注意是
.yml或.yaml都行,但不能是docker-compose.yaml.txt(记事本可能偷偷加后缀)、也不能是docker-mysql.yml这种自定义名。如果带-f,就直接
docker compose -f 文件名 up -d-d 后面还可以跟要打开的镜像名称例如:
docker compose -f docker-compose.yml up -d mysql
连接
先理解一下项目中存在的一些配置文件
docker-compose.yml用来统一描述和启动项目依赖的服务
services: mysql: image: mysql:8.4 container_name: ai-kb-mysql restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: root123456 # 首次初始化:root 密码 MYSQL_DATABASE: ai_knowledge_base # 首次初始化:自动建库(已有卷则不会重建) TZ: Asia/Shanghai ports: - "3307:3306" volumes: - mysql_data:/var/lib/mysql redis: image: redis:7.4 container_name: ai-kb-redis restart: unless-stopped ports: - "6379:6379" volumes: - redis_data:/data volumes: mysql_data: redis_data:这个配置主要启动两个服务分别是:
mysql:项目使用的 MySQL 数据库redis:项目后续用于缓存、验证码等功能的 Redis
当执行
docker compose up -d mysql启动docker后,Docker 会根据配置:
- 下载
mysql:8.4镜像(如果本地没有) - 创建名为
ai-kb-mysql的容器 - 设置数据库密码和数据库名
- 把电脑的
3307端口映射到容器的3306端口 - 保存数据库数据,避免容器删除后数据丢失
application.properties负责告诉 Spring Boot 如何连接它
spring.application.name=backend # MySQL ????? spring.datasource.url=jdbc:mysql://localhost:3307/ai_knowledge_base?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=root123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Redis?? spring.data.redis.host=localhost spring.data.redis.port=6379 jwt.secret=${JWT_SECRET}spring.datasource.url=jdbc:mysql://localhost:3307/ai_knowledge_base
这一句是和上面的
docker-compose.yml的一些信息对上的
所以,事实上在配置信息正确的情况下 想要让项目连接上数据库 只需要正常启动后端就行(点击绿色小图标或者cd backend mvn spring-boot:run)
再插一嘴,这里是让项目连接数据库,并不是让自己去对数据库进行操作,如果想操作数据库,就是另外的方法:
mysql -h 127.0.0.1 -P 3307 -u root -p*******
如果直接写密码-p和密码之间不能有空格,但一般是先写-p,回车,再填密码(这样会安全一点)也可以mysql -h localhost -P 3307 -u root -p*******
这里127.0.0.1和localhost的区别在大多数情况下不用管,但是还是值得深究的(有大佬可以讲解一下)
本地
Get-Service MySQL用来查询 MySQL 服务的状态
Start-Service MySQL用来启动一个已停止的 MySQL 服务
连接
在配置信息正确的情况下 想要让项目连接上数据库 只需要正常启动后端就行
这里要和Docker区分的是他们两个的端口不一样,本地的一般就是3306,Docker(做演示的)是3307,所以在配置文件中会略有区别
当然,一个端口里可以有很多个库