注意事项:如果需要将 Spring Boot 项目的日志文件挂载到本地,则在打包前需要先在 yml 进行如下配置:
logging:
file:
path: /app/logs
level:
root: info
这里的 info
指的是日志等级,可以根据需要进行修改,日志等级主要有以下几种:
trace
:最低的日志级别,用于记录非常详细的信息,通常仅在诊断问题时使用。debug
:用于调试信息,通常在开发过程中使用。info
:用于显示信息,这些信息是应用程序正常运行所需要的。warn
:用于显示可能的问题或警告信息,这些信息可能会影响应用程序的正常运行。error
:用于显示错误信息,这些信息表明应用程序发生了严重错误。fatal
:最高的日志级别,用于显示致命的错误信息,这些信息表明应用程序无法继续运行。
在生产环境上,一般建议使用以下日志级别:
info
:这是默认的日志级别,可以显示应用程序正常运行所需要的必要信息。error
:用于记录错误信息,这些信息表明应用程序发生了严重错误。
根据实际需求,可以进一步调整日志级别,以满足不同的监控和故障排查需求。
1. 创建 Docker 网络
docker network create backend-network
backend-network
指的是网络名称,根据自己需要进行更改
2. 启动 MySQL 容器
docker run -d \
--network backend-network \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=root \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/init:/docker-entrypoint-initdb.d \
--restart always \
mysql:5.7
-d
:后台运行容器,保证在退出终端后容器继续运行--network
:容器使用的网络,这里的名称要跟上面创建的 Docker 网络名称一致,如果未指定网络,通常会使用默认的 bridge 网络–name
:容器名,此处命名为mysql
-p
:端口映射,此处映射 主机3306端口 到 容器的3306端口-e TZ=Asia/Shanghai
:配置信息,此处设置了时区为上海-e MYSQL_ROOT_PASSWORD=root
:配置信息,此处设置mysql
的root用户的登陆密码-v ./mysql/conf:/etc/mysql/conf.d
:将宿主机上的./mysql/conf
目录挂载到容器的/etc/mysql/conf.d
目录,在宿主机上修改 MySQL 的配置文件,这些更改会反映到容器内-v ./mysql/data:/var/lib/mysql
:将宿主机上的./mysql/data
目录挂载到容器的/var/lib/mysql
目录,这是 MySQL 的数据目录,所有数据库的数据都会存储在这里-v ./mysql/init:/docker-entrypoint-initdb.d
:将宿主机上的./mysql/init
目录挂载到容器的/docker-entrypoint-initdb.d
目录,这个目录中的文件会在容器启动时被执行,通常用于初始化数据库或进行其他设置--restart always
: 设置容器的重启策略为"总是",表示当容器退出时,它会自动重启mysql:5.7
:指定了要运行的 Docker 镜像的名称和标签,即 MySQL 的 5.7 版本
3. 进入容器,设置远程连接
sudo docker exec -it mysql bash
4. 登录MySQL
mysql -uroot -proot
# 添加远程连接用户
alter user 'root'@'%' identified with mysql_native_password by 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
# 刷新权限
flush privileges;
5. 在 root 目录下新建一个 redis 文件夹,再在 redis 文件夹里创建 conf 文件夹和 data 文件夹,并将 Redis 的配置文件放入 conf 文件夹
Redis 配置文件内容(仅作参考,根据自己的需求进行更改):
# Redis 配置文件示例
# 网络相关设置
bind 0.0.0.0 # 监听所有网络接口,允许远程连接
port 6379 # Redis 监听的端口
protected-mode no # 禁用保护模式
# 通用设置
daemonize yes # 以守护进程方式运行 Redis
pidfile /var/run/redis/redis-server.pid # PID 文件路径
logfile /var/log/redis/redis-server.log # 日志文件路径
# 数据库快照
save 900 1 # 如果 900 秒内至少有 1 个键被修改,则保存数据库
save 300 10
save 60 10000
# 认证
# 如果需要密码认证,请取消下一行的注释,并设置一个强密码
# requirepass your_strong_password
# 性能
rdbcompression yes # 压缩 RDB 文件
maxmemory 2GB # Redis 可以使用的最大内存量
maxmemory-policy volatile-lru # 达到 maxmemory 时的淘汰策略
maxclients 10000 # 最大连接客户端数
# 追加写入模式
appendonly yes # 启用追加写入文件以进行持久化
appendfilename "appendonly.aof" # 追加写入文件名
# 安全性
# 如果 Redis 在公共网络上,请使用防火墙等其他手段确保安全
# 请注意启用密码认证以保护 Redis 数据
# 快照
stop-writes-on-bgsave-error yes # 如果最后一次保存失败,则停止所有写入
# 杂项
dir /var/lib/redis # Redis 工作目录
6. 在命令行进入 root 文件夹,启动 Redis 容器
docker run -d --name redis -p 6379:6379 \
-v ./redis/conf/redis.conf:/etc/redis/redis.conf \
-v ./redis/data:/data \
--network backend-network \
-e TZ=Asia/Shanghai \
--restart always \
redis:5.0 redis-server /etc/redis/redis.conf
-d
:以后台(detached)模式运行容器。--name redis
:将容器命名为redis
-p 6379:6379
:将主机的6379端口映射到容器的6379端口-v ./redis/conf/redis.conf:/etc/redis/redis.conf
:将本地Redis配置文件./redis/conf/redis.conf
挂载到容器内的/etc/redis/redis.conf
文件-v ./redis/data:/data
:将本地目录./redis/data
挂载到容器内的/data
目录,通常用于持久化Redis数据--network backend-network
:将容器连接到名为backend-network
的 Docker 网络-e TZ=Asia/Shanghai
:设置容器的时区为亚洲/上海--restart always
:配置容器始终自动重启,除非显式停止redis:5.0
:使用Docker Hub上的Redis 5.0版本镜像redis-server /etc/redis/redis.conf
:指定在容器内运行的命令,即使用提供的配置文件启动Redis服务器
7. 编写 Dockerfile 文件
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 暴露9090端口
EXPOSE 9090
# 拷贝jar包,这里的jar包名需要根据实际情况进行修改
COPY spring-boot-router-0.0.1-SNAPSHOT.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
8. 在 root 目录下新建一个 springboot 文件夹,将打包好的 jar 包和 Dockerfile 文件放到 springboot 文件夹下
9. 在命令行进入 springboot 文件夹,执行命令构建镜像
docker build -t spring-boot-router .
-t spring-boot-router
:-t
选项用于为新的Docker镜像指定一个标签(tag),这里给新镜像指定了标签名spring-boot-router.
:这表示Dockerfile的位置,.
表示Dockerfile在当前目录下
10. 启动 Spring Boot 容器
docker run -d --network backend-network --name spring-boot-router -p 9090:9090 -v ./log:/app/logs --restart always spring-boot-router
-d
: 后台运行容器,保证在退出终端后容器继续运行--network
: 为容器指定一个网络,这里指定的网络是backend-network
,要跟上面创建的 Docker 网络名称一致--name
: 为容器指定一个名称,这里指定的名称是spring-boot-router
-p
: 将容器内的9090端口映射到宿主机的9090端口,这样就可以通过宿主机的9090端口访问容器内的服务-v ./log:/app/logs
:将当前目录下的log
文件夹挂载到容器内的/app/logs
路径,即容器内的/app/logs
路径下的文件和当前目录下的log
文件夹下的文件是共享的,如果不需要保存日志文件,可以不加这个选项--restart always
: 设置容器的重启策略为"总是",表示当容器退出时,它会自动重启spring-boot-router
: 运行的 Docker 镜像的名称
启动完成后就可以使用服务器 IP 和端口去发起请求