知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 中 Docker Compose 支持

Docker,Spring Boot
HongKong
4
11:23 AM · Dec 06 ,2025

1. 概述

Spring Boot 3 引入了新的功能,例如將我們的應用程序構建為 GraalVM 原生鏡像或 Java 17 基線。 然而,Docker Compose 的支持同樣重要。

在本教程中,我們將學習如何將 Docker Compose 工作流集成到 Spring Boot 3 中。

2. Spring Boot 3 Docker Compose 支持提供什麼?

通常,我們使用 docker-compose up 命令啓動容器,使用 docker-compose down 命令停止容器,基於 docker-compose.yml 文件。現在,Spring Boot 3 可以委託這些 Docker Compose 命令。當 Spring Boot 應用程序啓動或停止時,它也會管理我們的容器。

此外,它內置了對多個服務的管理,例如 SQL 數據庫、MongoDB、Cassandra 等。因此,我們可能不需要在應用程序資源文件中複製配置類或屬性。

最後,我們會發現我們可以使用這項支持與自定義 Docker 鏡像和 Docker Compose 配置文件一起使用。

3. 安裝配置

我們需要 Docker Compose 和 Spring Boot 3 才能探索這項新的支持。

3.1. Docker Compose

Docker Compose 需要已經安裝了 Docker 引擎。雖然安裝過程相對簡單,但具體步驟可能會因操作系統而異。

Docker 在我們的主機上以服務的方式運行。我們可以從 Docker 鏡像中運行輕量級進程作為容器,在系統中構建鏡像層,這些鏡像層疊加在最小的 Linux 內核之上。

3.2. Spring Boot 3

有幾種方法可以設置 Spring Boot 3 項目。例如,我們可以使用 Spring 從版本 3.1.0 起的 初始化器。但是,我們始終需要為項目包含的依賴項使用 Spring Boot 3 starter 庫。

首先,我們添加一個 父POM

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <relativePath />
</parent>

我們希望將 REST 端點用於我們的應用程序,因此我們需要 web 依賴項;

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

我們將會連接到一個示例數據庫。 默認情況下,提供了多種支持。 我們將使用 MongoDB

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

為了確認我們的應用程序已啓動並運行,我們將使用 Spring Boot Actuator 進行檢查:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

最後,我們將添加 Docker Compose 依賴項。 如果我們想使用其他項目功能但排除 Docker Compose 支持,則可以添加 optional 標籤集為 true

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-docker-compose</artifactId>
    <version>3.1.1</version>
</dependency>

如果使用 Gradle,我們可能會考慮使用 Spring Boot Gradle Plugin 來實現類似 BOM 的依賴管理。

4. 使用 Docker Compose 啓動 Spring Boot 3 應用

我們將使用 MongoDB 數據庫創建一個 Spring Boot 3 應用。 一旦我們啓動時引入了 spring-boot-docker-compose 依賴,我們的應用程序將啓動 docker-compose.yml 文件中的所有服務。

4.1. Docker Compose 文件

首先,讓我們創建一個 docker-compose.yml 文件:

version: '3.8'
services:
  db:
    image: mongo:latest
    ports:
      - '27017:27017'
    volumes:
      - db:/data/db
volumes:
  db:
    driver:
      local

4.2. Spring 配置文件

我們需要告訴 Spring Boot 3 Docker Compose 文件的名稱和路徑。我們可以通過在 application-{profile} 屬性文件中或 YAML 文件中添加這些信息來實現。 我們將使用一個 docker-compose Spring 配置文件。 因此,我們將創建一個 application-docker-compose.yml 配置文件的內容:

spring:
  docker:
    compose:
      enabled: true
      file: docker-compose.yml

4.3. 數據庫配置

我們不需要進行數據庫配置。Docker Compose 支持將創建一個默認配置。但是,我們仍然可以使用配置文件(例如)添加我們的 MongoDB 配置:

@Profile("!docker-compose")

這樣一來,我們就可以選擇是否使用 Docker Compose 支持。如果未指定任何配置文件,應用程序將期望數據庫已經運行。

4.4. 模型

然後,我們創建一個簡單的 Document 類,用於處理通用項:

@Document("item")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item {

    @Id
    private String id;
    private String name;
    private int quantity;
    private String category;
}

4.5. REST 控制器

最後,讓我們定義一個控制器,幷包含一些 CRUD 操作:

@RestController
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemController {
    ....
    @PostMapping(consumes = APPLICATION_JSON_VALUE)
    public ResponseEntity<Item> save(final @RequestBody Item item) {
        return ResponseEntity.ok(itemRepository.save(item));
    }
    // other endpoints
}

5. 應用程序測試

我們可以通過從我們最喜歡的 IDE 或命令行啓動主 Spring Boot 3 類來啓動應用程序。

5.1. 應用程序啓動

請記住提及 Spring 配置文件。例如,通過命令行,我們可以使用 Spring Boot Maven 插件

mvn spring-boot:run -Pdocker-compose -Dspring-boot.run.profiles=docker-compose

我們還添加了一個專門的 Maven 構建配置文件 (-Pdocker-compose),以防將來存在類似需求。

現在,如果執行 docker ps,我們將看到我們的 MongoDB 容器正在運行。

CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS            PORTS                                           NAMES
77a9667b291a   mongo:latest      "docker-entrypoint.s…"   21 hours ago   Up 10 minutes     0.0.0.0:27017->27017/tcp, :::27017->27017/tcp   classes-db-1

我們現在可以對我們的應用程序進行現場測試。

5.2. 應用程序檢查

我們可以使用 actuator 端點來檢查我們的應用程序是否已啓動並運行:

curl --location 'http://localhost:8080/actuator/health'

如果一切正常,我們應該收到一個 200 狀態碼:

{
    "status": "UP"
}

為了進行數據庫檢查,我們添加一些項目,通過 POST 調用在端點 http://localhost:8080/item。例如,讓我們查看一個 curl POST 請求:

curl --location 'http://localhost:8080/item' \
--header 'Content-Type: application/json' \
--data '{
    "name" : "Tennis Ball",
    "quantity" : 5,
    "category" : "sport"
}'

我們將會收到帶有指定項目的響應:

{
    "id": "64b117b6a805f7296d8412d9",
    "name": "Tennis Ball",
    "quantity": 5,
    "category": "sport"
}

5.3. 應用關閉

最後,關閉 Spring Boot 3 應用也會停止我們的容器。我們可以通過執行 docker ps -a 來驗證這一點。

CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS                     PORTS     NAMES
77a9667b291a   mongo:latest      "docker-entrypoint.s…"   22 hours ago   Exited (0) 5 seconds ago             classes-db-1

6. Docker Compose 支持功能

讓我們快速説明 Docker Compose 的主要支持功能 功能

6.1. 服務連接

該支持將在啓動時自動發現若干服務。我們已觀察到 MongoDB。但還有 Redis 或 ElasticSearch 等其他服務。服務連接將查找並使用本地映射端口。我們可以跳過配置類或屬性。這由 Spring Boot 通過 <a href="https://spring.io/blog/2023/06/19/spring-boot-31-connectiondetails-abstraction">ConnectionDetails</a> 抽象實現。

6.2. 自定義鏡像

我們可以通過應用一個 標籤</em label> 來使用自定義 Docker 鏡像。

version: '3.8'
services:
  db:
    image: our-custom-mongo-image
    ports:
      - '27017:27017'
    volumes:
      - db:/data/db
    labels:
      org.springframework.boot.service-connection: mongo
volumes:
  db:
    driver:
      local

6.3. 等待容器就緒

有趣的是,Spring Boot 3 將會自動檢查容器是否就緒。容器可能需要一些時間才能完全就緒。因此,該功能使我們能夠使用 健康檢查 命令來查看容器是否就緒。

6.4. 激活 Docker Compose 配置文件

我們可以在運行時在不同的 Docker Compose 配置文件之間切換。 我們的服務定義可能很複雜,因此我們可能希望選擇要啓用的配置文件,例如在調試或生產環境中。 我們可以通過使用配置屬性來實現這一點:

spring.docker.compose.profiles.active=myprofile

7. Docker Compose 支持的優勢

在生產環境中,我們的 Docker 服務可以分佈在不同的實例上。因此,在這種情況下,我們可能不需要此支持。但是,我們可以激活一個 Spring 配置文件,從一個 docker-compose.yml 定義加載,僅用於本地開發。

此支持與我們的 IDE 完美集成,我們無需在命令行之間來回切換以啓動和停止 Docker 服務。

此支持從版本 3.1 開始。總的來説,已經有許多不錯的特性,例如多服務連接、默認的服務就緒檢查以及使用 Docker Compose 配置文件等。

8. 結論

在本文中,我們學習了 Spring Boot 3.1.0 中新增的 Docker Compose 支持。我們瞭解瞭如何使用它設置和創建 Spring Boot 3 應用。

遵循 Spring Boot 易於開發的特性,這項支持非常實用,並且已經具備了良好的功能。在啓動和停止應用程序時,Spring Boot 3 會管理我們的 Docker 服務生命週期。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.