在 Linux 上使用 Docker 部署 Spring Boot 项目

4 阅读2分钟

目录

  1. 准备工作 1.1 Spring Boot 项目打包 1.2 安装 Docker
  2. 编写 Dockerfile
  3. 构建 Docker 镜像
  4. 运行 Docker 容器
  5. 使用 Docker Compose(可选) 5.1 安装 Docker Compose 5.2 编写 docker-compose.yml 5.3 启动 Docker Compose
  6. 常用管理命令
  7. 高级配置(可选) 7.1 设置时区 7.2 使用多阶段构建减少镜像体积
  8. 验证部署
  9. 常见问题及解决方案 9.1 端口冲突 9.2 JAR 文件路径错误 9.3 数据库连接失败
  10. 准备工作 1.1 Spring Boot 项目 打包 在开始 Docker 部署之前,首先需要确保 Spring Boot 项目已经打包为可执行的 JAR 文件。

使用 Maven 进行构建:

mvn clean package -DskipTests

或者使用 Gradle 进行构建:

gradle build -x test

打包完成后,JAR 文件通常位于 target/ 目录下(Maven)或 build/libs/ 目录下(Gradle)。

1.2 安装 Docker 如果 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

2. 编写 Dockerfile 在 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 文件名称。

  1. 构建 Docker 镜像 进入项目根目录,执行以下命令构建镜像:

docker build -t springboot-app:1.0.0 .

构建完成后,可以使用以下命令查看生成的镜像:

docker images

  1. 运行 Docker 容器

     docker run -d \
       -p 8080:8080 \
       --name springboot-container \
       springboot-app:1.0.0
    

检查容器状态:

docker ps

查看容器日志:

docker logs -f springboot-container

5. 使用 Docker Compose(可选) 5.1 安装 Docker Compose

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

5.2 编写 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:

5.3 启动 Docker Compose docker-compose up -d

  1. 常用管理命令

     # 停止容器
     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
    
  2. 高级配置(可选) 7.1 设置时区 在 Dockerfile 中增加:

    ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/TZ /etc/localtime && echo TZ > /etc/timezone

7.2 使用多阶段构建减少镜像体积

# 第一阶段:使用 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"]

8. 验证部署 访问 http://服务器IP:8080 测试应用接口,或使用以下命令检查:

curl http://localhost:8080/health

9. 常见问题及解决方案 9.1 端口冲突 如果 8080 端口被占用,可以更换端口,例如 -p 9090:8080。

9.2 JAR 文件路径错误 检查 Dockerfile 中 COPY 命令的路径,确保 JAR 文件正确复制到容器。

9.3 数据库连接 失败 在 application.properties 中,使用 jdbc:mysql://mysql-db:3306/app_db 作为数据库连接 URL,而不是 localhost。

通过以上步骤,您可以在 Linux 服务器上顺利部署 Spring Boot 项目,结合 Docker 和 Docker Compose,实现高效的容器化 管理。

原文链接:blog.csdn.net/qq_56694800…