如何实现Spring Boot在本地正常启动,但在Docker上启动后又停止

引言

在现代开发中,使用Docker来管理和部署应用程序变得愈加普遍。对于刚入行的小白来说,如何让Spring Boot项目在本地能够正常启动,同时在Docker中启动后又停止,可能显得相对复杂。本文将逐步引导你完成这一过程,包括确保应用在本地运行正常,并在Docker中运行。我们会分步骤讲解,并使用表格、甘特图和旅行图来帮助理解。


整体流程

以下是完成这一任务所需的步骤概览:

步骤编号 步骤名称 描述
1 创建Spring Boot项目 使用Spring Initializr创建项目
2 编写业务逻辑 编写简单的Controller
3 在本地启动项目 使用Maven命令启动项目
4 创建Dockerfile 编写Dockerfile以构建Docker镜像
5 构建Docker镜像 使用Docker命令构建镜像
6 启动Docker容器 在Docker中启动项目
7 停止Docker容器 使用Docker命令停止容器

甘特图

gantt
    title Spring Boot Docker 项目流程
    dateFormat  YYYY-MM-DD
    section 创建项目
    创建Spring Boot项目         :active,  a1, 2023-10-01, 1d
    编写业务逻辑                :         a2, after a1, 2d
    section 本地启动
    在本地启动项目              :         a3, after a2, 1d
    section Docker操作
    创建Dockerfile              :done, a4, after a3, 1d
    构建Docker镜像              :         a5, after a4, 1d
    启动Docker容器              :         a6, after a5, 1d
    停止Docker容器              :         a7, after a6, 1d

每一步的详细介绍

1. 创建Spring Boot项目

可以通过 [Spring Initializr]( 创建一个新的Spring Boot项目。选择你需要的依赖,比如Spring Web,Spring Data JPA等。

# 进入到你希望存放项目的目录
cd /path/to/your/project

# 创建项目
curl  -o demo.zip -d artifactId=demo -d name=demo -d dependencies=web
unzip demo.zip
cd demo

2. 编写业务逻辑

src/main/java/com/example/demo路径下创建一个简单的控制器。

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}

代码解释: 这是一个简单的控制器,当访问/hello时,会返回Hello, World!

3. 在本地启动项目

使用Maven命令来编译和运行项目。

# 编译项目
./mvnw clean package

# 启动项目
./mvnw spring-boot:run

将会在http://localhost:8080/hello可以访问到你的接口。

4. 创建Dockerfile

在项目根目录下创建Dockerfile。

# 使用OpenJDK作为基础镜像
FROM openjdk:11-jre
# 设置工作目录
WORKDIR /app
# 复制jar文件到容器中
COPY target/demo-0.0.1-SNAPSHOT.jar demo.jar
# 启动应用
ENTRYPOINT ["java", "-jar", "demo.jar"]

代码解释:

  • FROM指定基础镜像。
  • WORKDIR设置工作目录。
  • COPY将编译好的jar文件复制到容器中。
  • ENTRYPOINT命令指定容器启动时要执行的操作。

5. 构建Docker镜像

在项目根目录下执行以下命令构建Docker镜像。

# 构建Docker镜像
docker build -t demo:latest .

代码解释: -t参数为镜像指定标签,.表示Dockerfile所在的当前目录。

6. 启动Docker容器

通过以下命令启动容器。

# 启动Docker容器
docker run -d -p 8080:8080 demo:latest

代码解释:

  • -d表示在后台运行容器。
  • -p参数映射主机6480端口到容器的8080端口。

7. 停止Docker容器

如果容器运行后需要停止,可以使用以下命令。

# 查看运行中的容器
docker ps

# 停止容器
docker stop <container_id>

代码解释: 在实际命令中,<container_id>需要替换为实际的容器ID。


旅行图

journey
    title Spring Boot项目开发与部署
    section 创建项目
      创建项目          : 5: 成功
    section 编写代码
      编写业务逻辑      : 4: 成功
      本地启动          : 3: 成功
    section Docker化
      创建Dockerfile    : 5: 成功
      构建镜像          : 4: 成功
      启动Docker容器    : 4: 成功
      停止Docker容器    : 4: 成功

结尾

今天我们一起完成了一个Spring Boot项目的基本搭建,并将其部署到Docker中。这些步骤从创建项目、编写代码、构建镜像到运行容器,涵盖了基础的开发与部署过程。希望通过这篇文章,你能对Spring Boot与Docker的结合有更深的理解。

在工作中可能会遇到各种问题,随时保持学习的心态,寻求帮助,解决问题。祝你在开发之路上越走越远!