本文详细介绍如何在阿里云容器服务上部署Spring Boot应用,包括容器集群创建、镜像构建、推送和应用部署的完整流程。
一、创建容器集群
步骤1:登录阿里云控制台
- 访问 阿里云控制台
- 进入 容器服务Kubernetes版 控制台
步骤2:创建Kubernetes集群
- 点击 创建集群 按钮
- 选择 标准托管集群
- 填写集群信息:
- 集群名称:自定义名称
- Kubernetes版本:选择最新稳定版本
- 地域和可用区:根据业务需求选择
- 节点配置:根据应用规模选择合适的ECS实例规格
- 节点数量:建议至少2个节点以保证高可用性
- 点击 创建集群,等待集群创建完成(通常需要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
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
|
2. 构建镜像
1 2 3 4 5
| mvn clean package -DskipTests
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> <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:创建镜像仓库
- 进入 容器镜像服务 控制台
- 点击 创建镜像仓库
- 填写仓库信息:
- 仓库名称:springboot-app
- 仓库类型:公开或私有
- 摘要:Spring Boot应用镜像
- 点击 创建
步骤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:通过控制台部署
- 进入 容器服务Kubernetes版 控制台
- 选择目标集群,点击 应用管理 → 无状态
- 点击 创建
- 填写应用信息:
- 应用名称:springboot-app
- 容器镜像:registry.cn-hangzhou.aliyuncs.com/your-namespace/springboot-app:v1.0
- 端口映射:容器端口8080 → 服务端口8080
- 副本数:根据需要设置
- 点击 创建
方法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 apply -f deployment.yaml
kubectl get pods kubectl get services
|
五、应用访问和监控
访问应用
- 获取服务的外部IP:
1
| kubectl get services springboot-app-service
|
- 在浏览器中访问:
http://<external-ip>
监控应用
- 在阿里云容器服务控制台查看应用状态
- 使用Kubernetes Dashboard查看详细信息
- 配置日志服务收集应用日志
六、CI/CD集成
配置阿里云DevOps流水线
- 进入 DevOps流水线 控制台
- 创建流水线,配置以下阶段:
- 代码拉取:从代码仓库拉取代码
- 构建:执行
mvn clean package dockerfile:build
- 推送:执行
mvn dockerfile:push
- 部署:使用kubectl部署应用
七、最佳实践
镜像优化:
- 使用 Alpine基础镜像减小镜像体积
- 采用多阶段构建减少最终镜像大小
配置管理:
- 使用ConfigMap管理应用配置
- 使用Secret管理敏感信息
高可用性:
资源管理:
安全措施:
八、常见问题解决
1. 镜像推送失败
问题:推送镜像时出现权限错误
解决方案:
- 检查登录凭证是否正确
- 确保镜像仓库存在且有推送权限
- 检查网络连接
2. 应用部署失败
问题:Pod状态为CrashLoopBackOff
解决方案:
- 查看Pod日志:
kubectl logs <pod-name>
- 检查容器配置和环境变量
- 确保应用能正常启动
3. 服务访问失败
问题:无法通过外部IP访问应用
解决方案:
- 检查服务类型是否为LoadBalancer
- 检查安全组规则是否允许相应端口
- 检查应用是否在正确的端口上监听
九、参考资料