单体项目部署

确定需要部署的环境服务依赖

环境、服务依赖

服务名称英文名端口号版本号服务类别
数据库mysql3306v8环境依赖
缓存redis6379v6环境依赖
判题服务后端star-oj-backend8010java:8服务依赖

编写服务需要的dockerfile

在服务器编译打包版本

需要远程同步代码,idea开发工具,可参考博客:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Docker 镜像构建
FROM maven:3.8.1-jdk-8-slim as builder

# 将本地代码复制到容器映像
WORKDIR /app
COPY pom.xml .
COPY src ./src

# 构建一个发布工件. -DskipTests 跳过测试
RUN mvn package -DskipTests

# 在容器启动时运行web服务
CMD ["java","-jar","/app/target/staroj-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

上传jar包版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 基础镜像
FROM openjdk:8-jdk-alpine

# 指定工作目录
WORKDIR /app

# 将 jar 包添加到工作目录,比如 target/yuoj-backend-user-service-0.0.1-SNAPSHOT.jar
ADD target/staroj-backend-0.0.1-SNAPSHOT.jar .

# 暴露端口
EXPOSE 8101

# 启动命令
ENTRYPOINT ["java","-jar","/app/staroj-backend-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]

docker compose 安装

这里我们使用 Docker Compose V2 版本,相比 V1 版本统一了命令,使用更方便:
Docker Compose V2 地址:https://docs.docker.com/compose/migrate/
Docker Compose Linux 安装:https://docs.docker.com/compose/install/linux/#install-using-the-repository

1)设定安装来源

1
2
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2)安装 Docker 和 Docker Compose

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

启动 Docker

1
sudo systemctl start docker

4)测试 Docker

1
2
systemctl status docker
sudo docker run hello-world

编写docker compose

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
#  docker compose 环境依赖 启动项目必须需要的
version: '3'
services:
# Mysql
mysql:
image: mysql:8 # 使用的镜像
container_name: staroj-mysql # 启动的实例名称
environment:
MYSQL_ROOT_PASSWORD: 123456root # root 用户密码
ports:
- "3306:3306" # 端口映射
volumes:
- ./.mysql-data:/var/lib/mysql # 将数据目录挂载到本地目录以进行持久化
- ./mysql-init:/docker-entrypoint-initdb.d # 启动脚本
restart: always # 崩溃后自动重启
networks:
- mynetwork


# Redis
redis:
image: redis:6
container_name: staroj-redis
command: redis-server --appendonly yes --requirepass '123456root' #开启持久化的支持并设置认证密码
# command: redis-server /usr/local/etc/redis/redis.conf --requirepass "123456" # 配合下列config 配置
restart: always #跟随docker的启动而启动
ports:
- "6379:6379"
volumes:
- ./.redis-data:/data:rw # 持久化
# - ./.redis/conf/redis.conf:/usr/local/etc/redis/redis.conf # redis config 如果没有的话注释掉
- ./.redis/logs:/logs # 日志
environment:
- TZ=Asia/Shanghai
networks:
- mynetwork
depends_on:
- mysql


# springboot 项目
staroj-backend:
container_name: staroj-backend # 容器名称
build:
context: . # Dockerfile 路径
dockerfile: Dockerfile # 名称
ports:
- "8101:8101"
networks:
- mynetwork
# 启动顺序
depends_on:
- mysql
- redis

# 网络,不定义的话就是默认网络
networks:
mynetwork:

然后在服务器启动即可

1
2
3
4
5
docker compose -f docker-compose-name.yml up -d
-f : 指定需要执行的 yml
-d :后台启动
如果当前目录之后一个ymL文件可以直接
docker compose up -d