本文详细介绍了如何使用传统的 nohup
方法和 Docker 容器化部署 Spring Boot 项目,包括步骤、注意事项和两种方法的对比。
1. 使用 nohup
部署 JAR 包
nohup
是一个常用的 Linux 命令,可以在后台运行进程,即使关闭终端,进程仍然会继续运行。
1.1 部署步骤
上传 JAR 文件到服务器
例如,将
your-application.jar
文件上传到服务器的/home
目录。使用
nohup
命令启动 JAR 文件nohup java -jar your-application.jar > output.log 2>&1 &
解释:
nohup
:在后台运行命令。java -jar your-application.jar
:执行 JAR 文件。> output.log 2>&1
:将标准输出和错误输出重定向到output.log
文件。&
:将进程放到后台运行。
查看日志和进程状态
查看日志:
tail -f output.log
查看运行中的进程:
ps -ef | grep java
1.2 注意事项
数据库连接:确保数据库连接配置正确。如果连接到 Docker 容器中的 MySQL 数据库,连接地址应设置为容器的服务名。
端口占用:确保端口未被其他服务占用。
日志管理:定期清理日志文件,以避免占用过多磁盘空间。
2. 使用 Docker 部署 JAR 包
Docker 提供了一种高效的应用程序及其依赖项管理方式,通过容器化实现。
2.1 编写 Dockerfile
在项目根目录下创建一个 Dockerfile
文件,内容如下:
# 使用 OpenJDK 8 基础镜像
FROM openjdk:8-jdk-alpine
# 设置工作目录
WORKDIR /app
# 将 JAR 文件复制到 Docker 镜像中
COPY your-application.jar /app/your-application.jar
# 运行 JAR 文件的命令
CMD ["java", "-jar", "/app/your-application.jar"]
2.2 构建 Docker 镜像
运行以下命令构建 Docker 镜像:
docker build -t your-application:v1.0 .
解释:
-t your-application:v1.0
:将镜像命名为your-application
,版本为v1.0
。
2.3 创建 Docker 网络
为了确保容器之间能够相互通信,需要创建一个自定义 Docker 网络:
docker network create my-network
2.4 启动 MySQL 容器并添加到网络
如果使用 MySQL,启动 MySQL 容器并将其添加到同一网络中:
docker run -d \
--name my-mysql-container \
--network my-network \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=my_database \
mysql:8.0
2.5 启动 Spring Boot 容器
运行以下命令启动 Spring Boot 容器:
docker run -d \
--name your-application-container \
--network my-network \
-p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://my-mysql-container:3306/my_database?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&useSSL=false" \
-e SPRING_DATASOURCE_USERNAME="your-username" \
-e SPRING_DATASOURCE_PASSWORD="your-password" \
your-application:v1.0
解释:
-d
:在后台运行容器。--name
:为容器指定名称。--network
:将容器连接到指定网络。-p
:将容器端口映射到主机端口。-e
:设置数据库连接的环境变量。
2.6 查看容器日志
为了排查问题,可以查看容器日志:
docker logs your-application-container
2.7 将现有容器添加到网络
如果 MySQL 容器未在同一网络中,可以手动将其连接到网络:
docker network connect my-network my-mysql-container
2.8 通用命令中的替换项
your-application:替换为你的应用程序名称。
my-network:替换为你的 Docker 网络名称。
my-mysql-container:替换为你的 MySQL 容器名称。
my_database:替换为你的数据库名称。
your-username 和 your-password:替换为你的数据库用户名和密码。
3. 对比 nohup
和 Docker 部署方法
4. 总结
nohup
部署:适合简单的小型项目,部署过程简单但扩展性较弱。Docker 部署:适合容器化环境,提供更好的扩展性、资源管理和一致的部署环境。
根据项目需求选择合适的部署方法。如果项目依赖较多且更新频繁,推荐使用 Docker。对于简单应用,nohup
方式也足够。