SpringBoot利用docker一键在服务器部署(超简单)

Time: 2025-03-30 Sunday 21:00:00

SpringBoot利用docker一键在服务器部署(超简单)

为什么需要Docker, 因为每次使用新的服务器都要下好多的软件,什么MySQL,Redis,JDK,Nodejs,Maven , Nginx, 然后一大堆配置, 程序员自然需要自动化,能不能把机械的行为自动化起来, 反正每次流程都是一样,当然了我们利用sh脚本也是可以的,把要下载的命令全部复制到文件里面,然后一起执行,不过mysql就比较麻烦了,因为需要获取临时密码,登录,修改访问权限

Docker的核心包是

1
yum install docker-ce docker-ce-cli containerd.io

官方代码(centos9)

1
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

首先docker的下载和镜像源的配置我就不说了,自己摸索,(阿里云容器容器镜像控制台可以提供镜像加速网址)

所有需要更改的地方已经指出,严格按照要求来就可以成功

对于一个传统的mysql + redis + SpringBoot项目,我们需要准备以下几个文件,你看吧核心其实就是jar包,DockerFile和compose文件

1
2
3
4
5
6
.
├── deploy.sh(可以不需要)
├── docker-compose.yml
├── Dockerfile
├── usercenter.jar
└── user-center.sql

这里我选择的策略是本地maven打成jar包再上传上去,否则5M带宽服务器maven下载包20分钟都下不完

首先写Dockerfile打包SpringBoot镜像,将usercenter.jar改成你自己的jar包,注意这里会使用application-prod.properties的配置文件

1
2
3
4
5
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY usercenter.jar ./app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]

然后写docker compose文件,该文件会启动java项目,并且配置好数据库,包括账号密码,数据存储, 在application-prod.properties里面数据库的相关配置换成这里的变量名(environment里面的变量名),在mysql.volume这里./user-center.sql: 改成你自己需要初始化的sql文件

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
services:
app:
build: .
container_name: usercenter-app
ports:
- "8080:8080"
depends_on:
- mysql
- redis
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://usercenter-mysql:3306/user-center?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=your_passwrod
- SPRING_DATA_REDIS_HOST=redis
- SPRING_DATA_REDIS_PORT=6379
- MAVEN_OPTS=-Dmaven.repo.local=/maven-repo
networks:
- usercenter-network
restart: always
volumes:
- maven-repo:/maven-repo

mysql:
image: mysql:8.0
container_name: usercenter-mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=your_password
- MYSQL_DATABASE=user-center
volumes:
- mysql-data:/var/lib/mysql
- ./user-center.sql:/docker-entrypoint-initdb.d/init.sql
networks:
- usercenter-network
restart: always

redis:
image: redis:7.0
container_name: usercenter-redis
ports:
- "6379:6379"
volumes:
- redis-data:/data
networks:
- usercenter-network
restart: always

networks:
usercenter-network:
driver: bridge

volumes:
mysql-data:
redis-data:
maven-repo:

最后我们写sh文件,并赋予该文件执行权 sudo chmod +x ./deploy.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

# 停止并删除旧容器
echo "停止并删除旧容器..."
docker compose down

# 构建新镜像
echo "构建新镜像..."
docker compose build

# 启动服务
echo "启动服务..."
docker compose up -d

# 显示容器状态
echo "容器状态:"
docker compose ps

执行该文件./deploy.sh即可完成自动化构建,项目可以通过8080运行了

application-prod.properties大概这样子,这里只留了数据库部分做参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Spring Boot 配置

# 服务器端口
server.port=8080

spring.session.store-type=redis

# 数据库配置
spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:mysql://mysql:3306/user-center?useSSL=false&serverTimezone=UTC}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:root}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:your_password}
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=false

# Redis配置
spring.data.redis.host=${SPRING_DATA_REDIS_HOST:redis}
spring.data.redis.port=${SPRING_DATA_REDIS_PORT:6379}
spring.data.redis.database=0

Docker Compose在一定程度上就是运行多个这样的Docker Run命令

image-20250324141513285


SpringBoot利用docker一键在服务器部署(超简单)
http://example.com/2025/03/24/SpringBoot利用docker一键在服务器部署(超简单)/
作者
Jack Asher
发布于
2025年3月24日
许可协议