在开始 Docker 部署之前,首先需要确保 Spring Boot 项目已经打包为可执行的 JAR 文件。
使用 Maven 进行构建:
mvn clean package -DskipTests
或者使用 Gradle 进行构建:
gradle build -x test
打包完成后,JAR 文件通常位于 target/
目录下(Maven)或 build/libs/
目录下(Gradle)。
如果 Linux 服务器尚未安装 Docker,可以按照以下步骤进行安装:
# 更新软件源
sudo apt-get update
# 安装 Docker
sudo apt-get install docker.io -y
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证 Docker 是否安装成功
docker --version
如果使用 CentOS,可以运行以下命令安装 Docker:
yum install -y docker
yum install -y containerd.io
docker version
在 Spring Boot 项目根目录下创建 Dockerfile
文件,内容如下:
# 使用 OpenJDK 作为基础镜像
FROM openjdk:11-jre-slim
# 设置工作目录
WORKDIR /app
# 复制 JAR 文件到容器中
COPY target/YOUR_PROJECT_NAME.jar app.jar
# 暴露 Spring Boot 端口
EXPOSE 8080
# 设置 JVM 参数(可选)
ENV JAVA_OPTS="-Xmx512m -Xms256m"
# 运行 Spring Boot 应用
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/app.jar"]
将 YOUR_PROJECT_NAME.jar
替换为实际的 JAR 文件名称。
进入项目根目录,执行以下命令构建镜像:
docker build -t springboot-app:1.0.0 .
构建完成后,可以使用以下命令查看生成的镜像:
docker images
docker run -d \
-p 8080:8080 \
--name springboot-container \
springboot-app:1.0.0
检查容器状态:
docker ps
查看容器日志:
docker logs -f springboot-container
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
docker-compose.yml
如果 Spring Boot 项目需要依赖 MySQL 数据库,可以使用 Docker Compose:
version: '3.8'
services:
springboot-app:
image: springboot-app:1.0.0
container_name: springboot-container
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- mysql-db
mysql-db:
image: mysql:8.0
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: userpass
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
docker-compose up -d
# 停止容器
docker stop springboot-container
# 启动已停止的容器
docker start springboot-container
# 删除容器
docker rm springboot-container
# 删除镜像
docker rmi springboot-app:1.0.0
# 进入容器 Shell
docker exec -it springboot-container /bin/bash
在 Dockerfile
中增加:
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 第一阶段:使用 Maven 构建 JAR
FROM maven:3.8.6-openjdk-11 AS build
WORKDIR /app
COPY src ./src
COPY pom.xml .
RUN mvn clean package -DskipTests
# 第二阶段:运行环境
FROM openjdk:11-jre-slim
COPY --from=build /app/target/YOUR_PROJECT_NAME.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
访问 http://服务器IP:8080
测试应用接口,或使用以下命令检查:
curl http://localhost:8080/health
如果 8080
端口被占用,可以更换端口,例如 -p 9090:8080
。
检查 Dockerfile
中 COPY
命令的路径,确保 JAR 文件正确复制到容器。
在 application.properties
中,使用 jdbc:mysql://mysql-db:3306/app_db
作为数据库连接 URL,而不是 localhost
。
通过以上步骤,您可以在 Linux 服务器上顺利部署 Spring Boot 项目,结合 Docker 和 Docker Compose,实现高效的容器化管理。