前后端分离项目用docker打包成镜像连接数据库并开启日志
·
1、application.yml 数据库配置(容器互联)
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://mysql:3306/campus_room?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
sql:
init:
mode: never
schema-locations: classpath:schema.sql
data-locations: classpath:data.sql
encoding: UTF-8
cache:
type: simple
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
- org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration
jackson:
time-zone: Asia/Shanghai
serialization:
WRITE_DATES_AS_TIMESTAMPS: false
date-format: yyyy-MM-dd HH:mm:ss
deserialization:
ADJUST_DATES_TO_CONTEXT_TIME_ZONE: true
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
mybatis-plus:
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: auto
jwt:
secret: 4c2f7b3d1e5a9c8b4d6f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d
expire-minutes: 120
logging:
level:
root: info
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: when_authorized
2、docker-compose.yml

version: '3.9'
networks:
app_network:
driver: bridge
volumes:
mysql_data:
services:
mysql:
image: mysql:8.0
container_name: project_mysql
restart: always
# 统一使用全局定义的app_network
networks:
- app_network
# - 后加空格,修正volumes语法
volumes:
- mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: campus_meeting
ports:
- "3306:3306"
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
command: --default-authentication-plugin=mysql_native_password
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
backend:
# 移除build,使用你已构建好的镜像
image: meeting-backend:1.0
restart: always
depends_on:
- mysql
networks:
- app_network
# 修正-. 缺少空格 → - ./
volumes:
- ./backend_logs:/app/logs
environment:
# 数据库host改为mysql容器名 project_mysql
- SPRING_DATASOURCE_URL=jdbc:mysql://project_mysql:3306/campus_meeting?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=123456
ports:
- "8080:8080"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
frontend:
# 移除build,使用你已构建好的前端镜像
image: meeting-front:1.0
container_name: project_frontend
restart: always
depends_on:
- backend
# 统一网络app_network
networks:
- app_network
volumes:
- ./nginx_logs:/var/log/nginx
ports:
- "80:80"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
3、backend/Dockerfile
#FROM openjdk:17-jdk-slim
FROM eclipse-temurin:17-jdk-alpine
WORKDIR /app
COPY meeting-backend-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
4、后端打包


5、构建后端镜像
# 进入后端源码目录
cd /mnt/d/campus-meeting/campus-meeting-platform_v2.0/backend
# 构建镜像
docker build -t meeting-backend:1.0 .
6、前端打包生成dist文件
# 安装依赖
npm install
# 生产打包,生成dist文件夹
npm run build
7、frontend/nginx.conf
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
# Vue history模式刷新404处理
location / {
try_files $uri $uri/ /index.html;
}
# 接口转发到compose后端服务名 backend
location /api/ {
proxy_pass http://backend:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
8、frontend/Dockerfile
FROM nginx:alpine
COPY dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
9、构建前端镜像
# 进入前端目录
cd /mnt/d/campus-meeting/campus-meeting-platform_v2.0/frontend
# 构建镜像
docker build -t meeting-front:1.0 .
10、拉取数据库镜像
docker pull mysql:8.0
11、查看镜像
docker images
12、后台启动所有容器
切换到项目根目录(必须先做),确认目录内存在 docker-compose.yml 文件,执行查看
docker compose up --build -d

13、查看容器运行清单
确认三个容器持续处于 Up 状态。
docker ps

14. 查看后端启动日志,确认数据库连接无报错
docker logs -f campus-meeting-platform_v20-backend-1
15、本地浏览器访问地址
http://localhost
更多推荐
所有评论(0)