news 2026/9/27 9:30:56

使用docker-compose部署项目(mysql、springboot、vue、nginx)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用docker-compose部署项目(mysql、springboot、vue、nginx)

结合前面几篇文章:

9.如何将jar包打包成docker镜像并进行部署
10.docker如何部署一个前端网站

docker系列文章:
https://blog.csdn.net/baidu_32523857/article/details/135212681


这篇文章我们使用docker-compose来部署项目。

docker-compose是一个编排容器的工具,通过一个docker-compose.yml模板文件来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器快速部署。

我们主要创建三个容器:mysql、vue、springboot。

其中,springboot是我们后台的容器, 需要访问mysql。vue项目作为前台,需要访问后台接口。

打完包的程序:

(1) 百度网盘
通过网盘分享的文件:gg-demo.zip
链接: https://pan.baidu.com/s/1q0gJjjNWTSZ9K_LQuM_eiA?pwd=w7sp 提取码: w7sp

(2)夸克网盘
我用夸克网盘给你分享了「gg-demo.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/174b3b6jJm😕
链接:https://pan.quark.cn/s/c29f33cba986?pwd=uJgD
提取码:uJgD

1.docker-compose基本格式

docker-compose里面的内容跟我们前面书写的docker run很类似。

基本格式类似于下面这样

version:"1.2"services: containerA: image:A container_name:A ports: -80:80

描述的是容器之间的依赖、关系等

基本指令如下:

2.mysql的编写

项目目录结构:

./ ├── docker-compose.yml └── mysql ├── init │ └── init.sql ├── conf │ └── mysql.cnf ├── data

编写文件:

version:"3"services: gg-mysql: image: mysql:5.7 container_name: gg-mysql#容器名称restart: always volumes: - ./mysql/data:/var/lib/mysql#mysql数据存储- ./mysql/conf:/etc/mysql/conf.d#mysql的配置- ./mysql/init:/docker-entrypoint-initdb.d#mysql 初始化脚本environment: -MYSQL_ROOT_PASSWORD=123456# mysql数据库root账号的密码-TZ=Asia/Shanghai ports: -3306:3306#端口映射networks: - gg-network#声明网络#定义网络networks: gg-network: name: gg

我们cd到docker-compose.yml文件所在的目录下,运行命令

docker-composeup-d

我们登录到容器看看是否正常初始化我们的sql文件:

mysql-uroot-p


注意,如果容器启动后,发现没有创建数据库,需要先把宿主机data文件夹内容全部清空(就是上面 ./mysq/data 这个文件夹,用来存储数据的)。

然后删除容器后,重新docker-compose up -d

3.springboot的编写

我们编写的后台代码有一个默认接口:

localhost:8082/api/students/getList

返回的数据如下:

下面开始编写springboot的部分:

./ ├── docker-compose.yml └── mysql ├── init │ └── init.sql ├── conf │ └── mysql.cnf ├── data └── springboot ├── app1.0.jar ├── Dockerfile

我们修改springboot的配置文件,让spring boot可以在docker环境中连接到mysql。我们修改的配置文件参考如下:

server: port:8082# spring配置spring: datasource: url: jdbc:mysql://gg-mysql:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password:123456driver-class-name: com.mysql.jdbc.Driver# mybaits配置mybatis:# 配置mapper的扫描,找到所有的mapper.xml映射文件mapper-locations: classpath*:mappers/**/*Mapper.xml# 搜索指定包别名type-aliases-package: site.longkui.**.entity

主要说明的是mysql部分,这里填写的mysql的地址是gg-mysql。因为我们把mysql和springboot放在一个网络里,这里我们访问的是docker中mysql的容器名。将后台代码打成jar包。

我们先在服务器上创建一个文件夹,把我们打包好的jar包放进去

这个地方我们写的是build,而不是images。表示我们要根据APP自己构建,实际开发中,我们一般回提前把app打包成docker镜像,然后这个地方直接填写docker镜像的地址。

操作方式参考:如何将jar包打包成docker镜像并进行部署

下面继续说明build方式。

其中docker-compose.yml文件中比较重要的部分是depends_on部分,它表示后台依赖于mysql,通俗来讲,就是让mysql先启动,然后后台再启动,不然如果后台先启动就可能回出现连接数据库失败的问题。

Dockerfile文件参考如下:

#基础镜像FROM openjdk:11.0-jre-buster#拷贝jar包copy app1.0.jar /app.jar#入口ENTRYPOINT["java","-jar","/app.jar"]

注意:重新操作前,请先停止mysql容器,然后删除,记得要删除宿主机data文件夹的内容,不然重新docker-compose-up -d的时候

同时也需要注意的是,你本地开发mysql的版本和你上面使用的mysql版本要对应,不然即使构建成功,访问也会报错。

此时我们的docker-compose文件参考如下:

version:"3"services:# 数据库:mysqlgg-mysql: image: mysql:5.7 container_name: gg-mysql#容器名称restart: always volumes: - ./mysql/data:/var/lib/mysql#mysql数据存储- ./mysql/conf:/etc/mysql/conf.d#mysql的配置- ./mysql/init:/docker-entrypoint-initdb.d#mysql 初始化脚本environment: -MYSQL_ROOT_PASSWORD=123456# mysql数据库root账号的密码-TZ=Asia/Shanghai ports: -3306:3306#端口映射networks: - gg-network#声明网络# 后台:springbootgg-springboot: build: context: ./springboot dockerfile: Dockerfile container_name: gg-springboot ports: -8080:8082#后台端口映射networks: - gg-network#声明网络depends_on: - gg-msyql#声明依赖关系#定义网络networks: gg-network: name: gg

这个地方简单说明一下后台端口的映射问题,我这里用8080:8082。其中8080是物理机端口,如果你用云服务器,要先开通8080端口,不然也是无访问到的。

执行docker compose up -d后,看到我们的容器正常启动。

然后访问接口。


可以看到,接口正常访问,而且读取了数据库的内容。

注:如果你自己写后台,请保证你后台代码mysql的版本和docker的保持一致,否则访问数据库时回报错。

4.vue的编写

前面部署了mysql和sprinboot。我们简单用vue写了个前台页面,默认访问的上面的接口。我们部署一下vue部分。

目录结构:

./ ├── docker-compose.yml └── mysql ├── init │ └── init.sql ├── conf │ └── mysql.cnf ├── data └── springboot ├── app1.0.jar ├── Dockerfile └── nginx ├── dist ├── nginx.conf

dist就是我们前台文件打包后的文件夹。

nginx.conf是我们nginx的配置文件。

nginx.conf的配置文件参考如下:

worker_processes1;events{worker_connections1024;}http{include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout65;#gzip on;server{listen80;server_name vue-test;location /{# root html/dist; #本地测试位置root /usr/share/nginx/html;#nginx容器规定位置index index.html index.htm;}location /api{# rewrite /api/(.*) /$1 break;proxy_pass http://gg-springboot:8082;}error_page500502503504/50x.html;location=/50x.html{root html;}}}

需要说明的是,这个地方的代理地址写的gg-springboot,这是在docker中我们后台springboot的容器名称。

/api是我们代理,表示前台接口只要是以api开头的,就转发到http://gg-springboot:8082 这个地址。这样就能访问到我们的后台了。

关于nginx部分,我们再增加一个,整体参考如下

version:"3"services:# 数据库:mysqlgg-mysql: image: mysql:5.7 container_name: gg-mysql#容器名称restart: always volumes: - ./mysql/data:/var/lib/mysql#mysql数据存储- ./mysql/conf:/etc/mysql/conf.d#mysql的配置- ./mysql/init:/docker-entrypoint-initdb.d#mysql 初始化脚本environment: -MYSQL_ROOT_PASSWORD=123456# mysql数据库root账号的密码-TZ=Asia/Shanghai ports: -3306:3306#端口映射networks: - gg-network#声明网络# 后台:springbootgg-springboot: build: context: ./springboot dockerfile: Dockerfile container_name: gg-springboot ports: -8080:8082#后台端口映射networks: - gg-network#声明网络depends_on: - gg-msyql#声明依赖关系#前台:vuegg-nginx-vue: image: nginx container_name: gg-nginx-vue ports: -80:80 volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/dist:/usr/share/nginx/html depends_on: - gg-springboot networks: - gg-network#定义网络networks: gg-network: name: gg

我们修改后,在相应的文件夹下执行docker compose up -d

再访问我们的公网地址(项目网址,默认是IP),就可以看到我们编写的前台页面了,点击“查询所有”就能从后台的springboot获取数据了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 9:23:04

动态住宅IP免费用!免费用! 全球200+国家,4700W+动态IP !

【全球代理IP免费测试】 📍 24 小时单 IP 最高使用时长 : 支持 24 小时灵活切换 IP 地址,适应不同网络场景,满足多样化业务需求🛡️ 4700 万全球 IP 池 : 遍布 190 个国家的真实家庭住宅代理,合规获取&…

作者头像 李华
网站建设 2026/9/27 9:17:24

苹果新款Mac台式机:以降低算力成本为卖点

苹果新款Mac台式机当地时间周二开始发货,公司高管向企业买家抛出一个不寻常的卖点:购买新机比租用云端算力更便宜。据媒体当地时间9月22日报道,苹果新款Mac mini和Mac Studio当天开始发货。这批最高售价接近2万美元的新机,支持端侧…

作者头像 李华
网站建设 2026/9/27 9:17:14

义安区统计年鉴(2022-2024)

义安区统计年鉴(2022-2024)数据来源:义安区统计局数据年份:2022-2024数据格式:word

作者头像 李华