基于 Spring Boot 开发 Web 应用,并通过 Docker 和 Kubernetes 实现部署。
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,可以看到应用的返回。
总结
- 开发:基于 Spring Boot 开发简单 Web 应用。
- 容器化:通过 Docker 打包 Spring Boot 应用。
- 部署:利用 Kubernetes 配置文件实现多副本部署和负载均衡。