本文详细介绍如何在阿里云容器服务上部署Spring Boot应用,包括容器集群创建、镜像构建、推送和应用部署的完整流程。

一、创建容器集群

步骤1:登录阿里云控制台

  1. 访问 阿里云控制台
  2. 进入 容器服务Kubernetes版 控制台

步骤2:创建Kubernetes集群

  1. 点击 创建集群 按钮
  2. 选择 标准托管集群
  3. 填写集群信息:
    • 集群名称:自定义名称
    • Kubernetes版本:选择最新稳定版本
    • 地域和可用区:根据业务需求选择
    • 节点配置:根据应用规模选择合适的ECS实例规格
    • 节点数量:建议至少2个节点以保证高可用性
  4. 点击 创建集群,等待集群创建完成(通常需要10-20分钟)

二、Spring Boot应用镜像构建

方法1:使用Dockerfile手动构建

1. 创建Dockerfile

在项目根目录创建Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FROM openjdk:11-jre-slim

# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone

# 创建应用目录
WORKDIR /app

# 复制jar包
COPY target/*.jar app.jar

# 暴露端口
EXPOSE 8080

# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]

2. 构建镜像

1
2
3
4
5
# 编译项目
mvn clean package -DskipTests

# 构建Docker镜像
docker build -t springboot-app:v1.0 .

方法2:使用Maven插件构建

1. 配置pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<properties>
<docker.image.prefix>registry.cn-hangzhou.aliyuncs.com/your-namespace</docker.image.prefix>
<docker.image.name>springboot-app</docker.image.name>
<docker.image.tag>v1.0</docker.image.tag>
</properties>

<build>
<plugins>
<!-- Docker Maven Plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<repository>${docker.image.prefix}/${docker.image.name}</repository>
<tag>${docker.image.tag}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>

2. 构建并推送镜像

1
2
3
4
5
# 构建镜像
mvn clean package dockerfile:build

# 推送镜像
mvn dockerfile:push

三、推送镜像到阿里云镜像仓库

步骤1:创建镜像仓库

  1. 进入 容器镜像服务 控制台
  2. 点击 创建镜像仓库
  3. 填写仓库信息:
    • 仓库名称:springboot-app
    • 仓库类型:公开或私有
    • 摘要:Spring Boot应用镜像
  4. 点击 创建

步骤2:推送镜像

1
2
3
4
5
6
7
8
# 登录阿里云镜像仓库
docker login --username=your-username registry.cn-hangzhou.aliyuncs.com

# 标记镜像
docker tag springboot-app:v1.0 registry.cn-hangzhou.aliyuncs.com/your-namespace/springboot-app:v1.0

# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/your-namespace/springboot-app:v1.0

四、部署应用到Kubernetes集群

方法1:通过控制台部署

  1. 进入 容器服务Kubernetes版 控制台
  2. 选择目标集群,点击 应用管理无状态
  3. 点击 创建
  4. 填写应用信息:
    • 应用名称:springboot-app
    • 容器镜像:registry.cn-hangzhou.aliyuncs.com/your-namespace/springboot-app:v1.0
    • 端口映射:容器端口8080 → 服务端口8080
    • 副本数:根据需要设置
  5. 点击 创建

方法2:使用YAML文件部署

创建deployment.yaml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-app
labels:
app: springboot-app
spec:
replicas: 2
selector:
matchLabels:
app: springboot-app
template:
metadata:
labels:
app: springboot-app
spec:
containers:
- name: springboot-app
image: registry.cn-hangzhou.aliyuncs.com/your-namespace/springboot-app:v1.0
ports:
- containerPort: 8080
resources:
limits:
cpu: "1"
memory: "1Gi"
requests:
cpu: "500m"
memory: "512Mi"
---
apiVersion: v1
kind: Service
metadata:
name: springboot-app-service
spec:
selector:
app: springboot-app
ports:
- port: 80
targetPort: 8080
type: LoadBalancer

使用kubectl部署:

1
2
3
4
5
6
7
# 配置kubectl连接集群(可从阿里云控制台获取配置)
# 部署应用
kubectl apply -f deployment.yaml

# 查看部署状态
kubectl get pods
kubectl get services

五、应用访问和监控

访问应用

  1. 获取服务的外部IP:
    1
    kubectl get services springboot-app-service
  2. 在浏览器中访问:http://<external-ip>

监控应用

  1. 在阿里云容器服务控制台查看应用状态
  2. 使用Kubernetes Dashboard查看详细信息
  3. 配置日志服务收集应用日志

六、CI/CD集成

配置阿里云DevOps流水线

  1. 进入 DevOps流水线 控制台
  2. 创建流水线,配置以下阶段:
    • 代码拉取:从代码仓库拉取代码
    • 构建:执行mvn clean package dockerfile:build
    • 推送:执行mvn dockerfile:push
    • 部署:使用kubectl部署应用

七、最佳实践

  1. 镜像优化

    • 使用 Alpine基础镜像减小镜像体积
    • 采用多阶段构建减少最终镜像大小
  2. 配置管理

    • 使用ConfigMap管理应用配置
    • 使用Secret管理敏感信息
  3. 高可用性

    • 部署多个副本
    • 使用健康检查和就绪检查
  4. 资源管理

    • 合理设置资源请求和限制
    • 使用HPA进行自动扩缩容
  5. 安全措施

    • 使用私有镜像仓库
    • 定期更新基础镜像
    • 限制容器权限

八、常见问题解决

1. 镜像推送失败

问题:推送镜像时出现权限错误

解决方案

  • 检查登录凭证是否正确
  • 确保镜像仓库存在且有推送权限
  • 检查网络连接

2. 应用部署失败

问题:Pod状态为CrashLoopBackOff

解决方案

  • 查看Pod日志:kubectl logs <pod-name>
  • 检查容器配置和环境变量
  • 确保应用能正常启动

3. 服务访问失败

问题:无法通过外部IP访问应用

解决方案

  • 检查服务类型是否为LoadBalancer
  • 检查安全组规则是否允许相应端口
  • 检查应用是否在正确的端口上监听

九、参考资料