Springboot Web部署流程浅析

484 阅读2分钟

基于 Spring Boot 开发 Web 应用,并通过 DockerKubernetes 实现部署。

1. 开发 Spring Boot Web 应用

项目结构

创建一个简单的 Spring Boot 项目,提供一个 RESTful API。

依赖

pom.xml 文件中添加以下依赖:

<dependencies>
    <!-- Spring Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Spring Boot DevTools (optional for development) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>
</dependencies>

主类

package com.example.demo;

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

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

Controller

创建一个简单的 REST API:

package com.example.demo.controller;

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, Kubernetes!";
    }
}

2. 创建 Docker 镜像

创建 Dockerfile

在项目根目录下添加 Dockerfile 文件:

# 使用官方 JDK 17 基础镜像
FROM openjdk:17-jdk-slim

# 设置应用运行目录
WORKDIR /app

# 将 Jar 包复制到容器中
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

# 暴露端口
EXPOSE 8080

# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

构建镜像

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

# 打包 Spring Boot 应用
mvn clean package

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

3. 在 Docker 中运行

使用以下命令运行镜像:

docker run -d -p 8080:8080 springboot-demo:1.0

打开浏览器,访问 http://localhost:8080/hello,应该能看到 "Hello, Kubernetes!" 的输出。


4. 使用 Kubernetes 部署

创建 Kubernetes 配置文件

1. Deployment 文件

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-demo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: springboot-demo
  template:
    metadata:
      labels:
        app: springboot-demo
    spec:
      containers:
      - name: springboot-demo
        image: springboot-demo:1.0
        ports:
        - containerPort: 8080

2. Service 文件

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: springboot-demo-service
spec:
  selector:
    app: springboot-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

5. 将镜像推送到 Docker Registry

为了在 Kubernetes 中使用镜像,需要将其推送到 Docker Registry(如 Docker Hub)。

# 登录 Docker Hub
docker login

# 打标签
docker tag springboot-demo:1.0 <your-docker-hub-username>/springboot-demo:1.0

# 推送镜像
docker push <your-docker-hub-username>/springboot-demo:1.0

deployment.yaml 中,替换 image 字段为推送后的镜像名称。


6. 部署到 Kubernetes

使用以下命令部署应用:

# 创建 Deployment 和 Service
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

检查部署状态:

kubectl get pods
kubectl get services

访问服务时,获取外部 IP 地址:

kubectl get svc

通过输出的 EXTERNAL-IP,访问 http://<EXTERNAL-IP>/hello,可以看到应用的返回。


总结

  1. 开发:基于 Spring Boot 开发简单 Web 应用。
  2. 容器化:通过 Docker 打包 Spring Boot 应用。
  3. 部署:利用 Kubernetes 配置文件实现多副本部署和负载均衡。