本文最后更新于 2026年6月21日 凌晨
项目部署之使用 DockerCompose 部署
前言
前面已经使用 普通方法和DockerFile 的方法对项目进行部署
但是这有个缺点是
要写的指令和配置较多
运行的容器也比较多
还要去处理这些容器的网络,数据卷等
如果用docker命令一个个去处理还是不方便
无法集成化
而且文件需要动态更新还要一步一步来再部署很麻烦
下面使用 DockerCompose 来对项目进行集成化部署
在前面使用自定义镜像的基础上用 DockerCompose 来一键部署
实现
DockerCompose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具
有了 DockerCompose 之后你就可以在 DockerCompose yml 文件里定义好所有需要启动的容器的命令 到时候一次运行就可以把所有容器部署好
先查看 DockerCompose 是否已安装 若没安装请自行安装
需要注意的是之前在运行容器时我们有给容器命名
但在 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
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
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
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: 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
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-compose.yml 里写的都是和前面 docker run 命令差不多的命令
可以理解为 docker-compose.yml 的作用就是将多容器的 docker run 都集成起来
这样就可以统一运行和统一停止了
最后 cd 到 docker-compose.yml 所在根目录下运行
出现下面日志表示运行成功
浏览器能正常浏览
PS:该系列只做为作者学习开发项目做的笔记用
不一定符合读者来学习,仅供参考
预告
后续会记录博客的开发过程
每次学习会做一份笔记来进行发表
“一花一世界,一叶一菩提”
版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/