『博客开发日记』项目部署之使用 DockerCompose 部署

本文最后更新于 2026年6月21日 凌晨

项目部署之使用 DockerCompose 部署


前言

前面已经使用 普通方法和DockerFile 的方法对项目进行部署

但是这有个缺点是

要写的指令和配置较多

运行的容器也比较多

还要去处理这些容器的网络,数据卷等

如果用docker命令一个个去处理还是不方便

无法集成化

而且文件需要动态更新还要一步一步来再部署很麻烦

下面使用 DockerCompose 来对项目进行集成化部署

在前面使用自定义镜像的基础上用 DockerCompose 来一键部署


实现

DockerCompose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具

有了 DockerCompose 之后你就可以在 DockerCompose yml 文件里定义好所有需要启动的容器的命令 到时候一次运行就可以把所有容器部署好

先查看 DockerCompose 是否已安装 若没安装请自行安装

1
docker compose version

需要注意的是之前在运行容器时我们有给容器命名

但在 DockerCompose 中不需要给容器命名了 我们使用服务名称来进行互联

重新构建新镜像

前面我们对镜像进行构建里面包含了大量敏感信息 这是不对的

我们现在进行重新构建镜像

也是开始一下正式的部署流程

在这之前还是对环境进行清理

这次要把旧镜像一起删掉重新构建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
==== 删除前台后端容器 ====
docker rm -f yun_blog_java

==== 删除后台后端容器 ====
docker rm -f yun_blog_admin_java

==== 删除数据库容器 ====
docker rm -f yun_blog_sql

==== 删除 redis 容器 ====
docker rm -f yun_blog_redis

==== 删除前端 nginx 容器 ====
docker rm -f yun_blog_vue

==== 删除自定义前台后端镜像 ====
docker rmi yun_blog_java:01

==== 删除自定义后台后端镜像 ====
docker rmi yun_blog_admin_java:01

==== 删除自定义前端镜像 ====
docker rmi yun_blog_vue:01

==== 删除网络 ====
docker network rm blog_network

清空环境后重新创建网络

1
docker network create blog_network

修改前台后端的 dockerFile

1
2
3
4
5
6
7
8
9
10
# 指定基础镜像
FROM openjdk:17-jdk
# 指定工作目录
WORKDIR /yun_blog_java/mengze-blog
# 添加前台工程 jar 包
ADD mengze-blog-1.0-SNAPSHOT.jar .
# 声明开放端口
EXPOSE 1314
# 指定容器的运行命令
CMD ["java", "-jar", "mengze-blog-1.0-SNAPSHOT.jar"]

运行新的前台后端的镜像

1
docker build -t yun_blog_java:v1.0.0 -f mengze_blog_java_dockerFile .

修改前台后端的 dockerFile

1
2
3
4
5
6
7
8
9
10
# 指定基础镜像
FROM openjdk:17-jdk
# 指定工作目录
WORKDIR /yun_blog_java/mengze-admin
# 添加前台工程 jar 包
ADD mengze-admin-1.0-SNAPSHOT.jar .
# 声明开放端口
EXPOSE 7616
# 指定容器的运行命令
CMD ["java", "-jar", "mengze-admin-1.0-SNAPSHOT.jar"]

运行新的后台后端的镜像

1
docker build -t yun_blog_admin_java:v1.0.0 -f mengze_admin_java_dockerFile .

前台不用编写新的但是部署流程也要走一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 指定基础镜像
FROM nginx
# 指定工作目录
WORKDIR /home/yun_blog_vue

# 复制博客前端文件
COPY ./blog/dist /usr/share/nginx/html/blog
# 复制管理后台前端文件
COPY ./admin/dist /usr/share/nginx/html/admin
# 复制 nginx 配置文件
COPY ./nginx/conf.d /etc/nginx/conf.d

# 暴露端口
EXPOSE 80

1
docker build -t yun_blog_vue:v1.0.0 -f yun_blog_vue_dockerFile .

构建后如下


先将后端的 .env 文件移动到 docker-compose.yml 的同级目录下


这里是 .env 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 开源部署环境变量模板
# 使用方法:
# 1. 将本文件复制为 `.env`
# 2. 按照下面的内容填写真实配置
# 3. 请保留 `.env` 文件私密,不要提交到 Git 仓库

# 后端 MySQL 数据源配置
# url 里的 yun_blog_sql 和你下面 docker-compose.yml 里的 redis 服务名一一对应
SPRING_DATASOURCE_URL=jdbc:mysql://yun_blog_sql:3306/yun_blog?characterEncoding=utf8&serverTimezone=Asia/Shanghai
SQL_USERNAME=your_sql_username
SQL_PASSWORD=your_sql_password

# redis 配置
# 这里的 host 应该要和你下面 docker-compose.yml 里的 redis 服务名一样
SPRING_REDIS_HOST=yun_blog_redis

# 后端 Spring Security 默认账号配置
SECURITY_USER_NAME=your_security_username
SECURITY_USER_PASSWORD=your_security_password

# QQ 邮箱 SMTP 配置,用于发送邮件
QQ_EMAIL_USERNAME=your_qq_email_username
QQ_EMAIL_KEY=your_qq_email_key

# 七牛云 OSS 配置,用于文件上传和访问
OSS_ACCESS_KEY=your_access_key
OSS_SECRET_KEY=your_secret_key
OSS_BUCKET_NAME=your_bucket_name
OSS_VISIT_DOMAIN=your_oss_visit_domain

# 阿里云短信配置,用于发送验证码
ALIYUN_ACCESS_KEY_ID=your_access_key_id
ALIYUN_ACCESS_KEY_SECRET=your_access_key_secret

# 前端地址,用于邮件链接和跳转(此处应该填你的域名)
BLOG_FRONTEND_URL=http://yun-mi-manchi.top

# 和风天气 API 配置
WEATHER_KEY_ID=your_key_id
WEATHER_PROJECT_ID=your_project_id
WEATHER_API_HOST=your_api_host
WEATHER_PRIVATE_KEY=your_weather_private_key

# DeepSeek API 密钥,用于 AI 相关功能
DEEPSEEK_API_KEY=your_deepseek_api_key

编写 docker-compose.yml

这个文件只需要写和前面 docker run 差不多的命令就行了

就是一些环境变量要改一下

你 .env 里的参数怎么写在 docker-compose.yml 里也要怎么写

这里需要注意的是 --spring.redis.host=yun_blog_redis

因为 redis 是通过 docker 网络进行连接的 所以这里写容器名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
services:
# mysql
yun_blog_sql:
image: mysql:8.0
volumes:
- /home/mysql_date:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: you_sql_password
TZ: Asia/Shanghai
restart: always
networks:
- blog_network

# redis
yun_blog_redis:
image: redis
volumes:
- /home/redis_date:/data
ports:
- 6379:6379
restart: always
command: ['redis-server','--appendonly','yes']
networks:
- blog_network

# 前台后端
yun_blog_java:
image: yun_blog_java:v1.0.0
ports:
- 1314:1314
environment:
TZ: Asia/Shanghai
env_file:
- .env
command:
- java
- -jar
- /yun_blog_java/mengze-blog/mengze-blog-1.0-SNAPSHOT.jar
networks:
- blog_network
restart: always

# 后台后端
yun_blog_admin_java:
image: yun_blog_admin_java:v1.0.0
ports:
- 7616:7616
environment:
TZ: Asia/Shanghai
env_file:
- .env
command:
- java
- -jar
- /yun_blog_java/mengze-blog/mengze-blog-1.0-SNAPSHOT.jar
networks:
- blog_network
restart: always

# 前端
yun_blog_vue:
image: yun_blog_vue:v1.0.0
ports:
- 80:80
restart: always

# 定义网络
networks:
blog_network:

# 定义数据卷 (如果你使用 docker 的命名卷挂载时就用)
# 我这里用的是和宿主机的挂载卷,就不用了
#volumes:
# /home/mysql_date:
# /home/redis_date:

这里可以看到 docker-compose.yml 里写的都是和前面 docker run 命令差不多的命令

可以理解为 docker-compose.yml 的作用就是将多容器的 docker run 都集成起来

这样就可以统一运行和统一停止了

最后 cd 到 docker-compose.yml 所在根目录下运行

1
2
# -d 表示后台运行
docker compose up -d

出现下面日志表示运行成功


浏览器能正常浏览





PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记』项目部署之使用 DockerCompose 部署
http://example.com/2026/06/20/『博客开发日记』项目部署之使用 DockerCompose 部署/
作者
云梦泽
发布于
2026年6月20日
更新于
2026年6月21日
许可协议