Docker Compose部署Spring Cloud 微服务系统

我们将为你的环境(CentOS + Docker Compose + Maven + JDK 17)生成并部署一个基础的 Spring Cloud 微服务系统。整个项目结构将包括以下组件:

✅ 项目模块结构(Spring Cloud Alibaba 示例)

bash 复制代码
springcloud-demo/
├── eureka-server/       # 注册中心
├── config-server/       # 配置中心(可选)
├── gateway/             # 网关服务
├── service-user/        # 用户微服务
├── service-order/       # 订单微服务
└── docker-compose.yml   # 一键部署入口

一、构建服务模块

我们先从最核心的 eureka-server 开始。以下是所需关键文件:

1. eureka-server/pom.xml

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>eureka-server</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>eureka-server</name>
  <description>Eureka Server for Spring Cloud</description>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.5</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <java.version>17</java.version>
    <spring-cloud.version>2022.0.5</spring-cloud.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
  </dependencies>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

2. eureka-server/src/main/resources/application.yml

bash 复制代码
server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

3. EurekaServerApplication.java

java 复制代码
package com.example.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

4. Dockerfile

bash 复制代码
FROM openjdk:17
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

二、构建其他模块(如 gatewayservice-user 等)

1. gateway/pom.xml

XML 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>gateway</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>gateway</name>
  <description>Spring Cloud Gateway</description>
  <packaging>jar</packaging>

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

  <properties>
    <java.version>17</java.version>
    <spring-cloud.version>2022.0.5</spring-cloud.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
  </dependencies>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

2. gateway/src/main/resources/application.yml

bash 复制代码
server:
  port: 8080
spring:
  cloud:
    gateway:
      routes: []
eureka:
  client:
    service-url:
      defaultZone: http://eureka-server:8761/eureka

3. GatewayApplication.java

java 复制代码
package com.example.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

4. Dockerfile

bash 复制代码
FROM openjdk:17
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

可以根据上面结构复用类似配置,接入 Eureka,并配置简单 REST Controller + 注册信息。


三、docker-compose.yml 示例(部署所有服务)

bash 复制代码
version: '3.8'
services:
  eureka-server:
    build: ./eureka-server
    ports:
      - "8761:8761"

  gateway:
    build: ./gateway
    ports:
      - "8080:8080"
    depends_on:
      - eureka-server

  user-service:
    build: ./service-user
    ports:
      - "8081:8081"
    depends_on:
      - eureka-server

networks:
  default:
    name: springcloud-net

四、部署步骤

  1. 上传项目至 CentOS(如:/root/springcloud-demo)

  2. 构建服务

    cd /root/springcloud-demo mvn clean package -DskipTests

进入项目解压目录,依次执行以下命令:

cd eureka-server

mvn clean package -DskipTests

cd ../gateway

mvn clean package -DskipTests

cd ../user-service

mvn clean package -DskipTests

cd ../order-service

mvn clean package -DskipTests

cd ../auth-service

mvn clean package -DskipTests

  1. 构建 & 启动容器

    docker compose up --build -d

  2. 访问 Eureka 控制台

    http://<你的服务器IP>:8761

访问 user后台 控制台

http://<你的服务器IP>:8081/hello

相关推荐
Wpa.wk2 小时前
容器编排 - K8s - 配置文件参数说明和基础命令
经验分享·测试工具·docker·云原生·容器·kubernetes
猿小羽4 小时前
深入理解 Microservice Control Proxy(MCP) 的 AI 实战指南
微服务·ai·推荐系统·service mesh·microservice·mcp·ai 实战
LCG米4 小时前
基于PyTorch的TCN-GRU电力负荷预测:从多维数据预处理到Docker云端部署
pytorch·docker·gru
掘根6 小时前
【即时通讯系统】项目框架与微服务拆分设计
微服务·云原生·架构
Warren986 小时前
接口测试理论
docker·面试·职场和发展·eureka·ansible
杭州杭州杭州6 小时前
Docker
运维·docker·容器
编程彩机7 小时前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
编程彩机7 小时前
互联网大厂Java面试:从Spring WebFlux到分布式事务的技术场景解析
java·微服务·面试·分布式事务·spring webflux
造夢先森7 小时前
Clawdbot(OpenClaw)安装部署教程
人工智能·微服务·云原生
等什么君!8 小时前
Docker 数据卷:MySQL 数据同步实战
运维·docker·容器