Spring Boot Docker 化部署全流程:从打包到 K8s 集群编排

🌟博主介绍:Java、Python、js全栈开发 “多面手”,精通多种编程语言和技术,痴迷于人工智能领域。秉持着对技术的热爱与执着,持续探索创新,愿在此分享交流和学习,与大家共进步。
📖全栈开发环境搭建运行攻略:多语言一站式指南(环境搭建+运行+调试+发布+保姆级详解)
👉感兴趣的可以先收藏起来,希望帮助更多的人
在这里插入图片描述

Spring Boot Docker 化部署全流程:从打包到 K8s 集群编排

一、引言

在当今的软件开发和部署领域,容器化技术和编排工具已经成为了主流。Docker 作为一种轻量级的容器化解决方案,能够将应用程序及其依赖项打包成一个独立的容器,实现了应用的快速部署和迁移。而 Kubernetes(K8s)作为一个强大的容器编排工具,能够自动化地管理和调度这些容器,提高了应用的可靠性和可扩展性。本文将详细介绍 Spring Boot 应用从打包成 Docker 镜像到在 K8s 集群中进行编排部署的全流程。

二、Spring Boot 项目准备

2.1 创建 Spring Boot 项目

我们可以使用 Spring Initializr(https://start.spring.io/)来快速创建一个 Spring Boot 项目。选择所需的依赖,如 Web、Actuator 等,然后下载项目压缩包并解压到本地。

2.2 编写简单的 Spring Boot 应用

src/main/java 目录下创建一个简单的控制器类,例如:

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

2.3 测试本地运行

在 IDE 中运行 DemoApplication 类,访问 http://localhost:8080/hello,如果看到 Hello, Spring Boot! 则说明项目可以正常运行。

三、Spring Boot 项目打包

3.1 使用 Maven 打包

在项目根目录下,打开终端并执行以下命令:

mvn clean package

该命令会清理项目并将项目打包成一个可执行的 JAR 文件,通常位于 target 目录下。

3.2 验证打包结果

target 目录下可以看到生成的 JAR 文件,例如 demo-0.0.1-SNAPSHOT.jar。可以通过以下命令来验证 JAR 文件是否可以正常运行:

java -jar target/demo-0.0.1-SNAPSHOT.jar

再次访问 http://localhost:8080/hello,确保应用可以正常响应。

四、Docker 化 Spring Boot 应用

4.1 安装 Docker

根据不同的操作系统,从 Docker 官方网站(https://www.docker.com/get-started)下载并安装 Docker。安装完成后,通过以下命令验证 Docker 是否安装成功:

docker --version

4.2 创建 Dockerfile

在项目根目录下创建一个名为 Dockerfile 的文件,内容如下:

# 基础镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 复制 JAR 文件到容器中
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

# 暴露端口
EXPOSE 8080

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

4.3 构建 Docker 镜像

在项目根目录下,打开终端并执行以下命令来构建 Docker 镜像:

docker build -t spring-boot-demo:1.0 .

其中,-t 用于指定镜像的名称和标签,. 表示使用当前目录下的 Dockerfile 进行构建。

4.4 验证 Docker 镜像

执行以下命令查看本地的 Docker 镜像列表:

docker images

可以看到刚刚构建的 spring-boot-demo:1.0 镜像。

4.5 运行 Docker 容器

执行以下命令来运行刚刚构建的 Docker 镜像:

docker run -p 8080:8080 spring-boot-demo:1.0

其中,-p 用于将容器的 8080 端口映射到主机的 8080 端口。访问 http://localhost:8080/hello,确保应用在 Docker 容器中可以正常运行。

五、将 Docker 镜像推送到镜像仓库

5.1 选择镜像仓库

常见的镜像仓库有 Docker Hub、阿里云镜像仓库等。这里以 Docker Hub 为例进行介绍。

5.2 登录 Docker Hub

在终端中执行以下命令登录 Docker Hub:

docker login

输入 Docker Hub 的用户名和密码进行登录。

5.3 为镜像打标签

为了将镜像推送到 Docker Hub,需要为镜像打上正确的标签。执行以下命令:

docker tag spring-boot-demo:1.0 your-dockerhub-username/spring-boot-demo:1.0

其中,your-dockerhub-username 是你的 Docker Hub 用户名。

5.4 推送镜像到 Docker Hub

执行以下命令将镜像推送到 Docker Hub:

docker push your-dockerhub-username/spring-boot-demo:1.0

推送完成后,可以在 Docker Hub 的网页上看到刚刚推送的镜像。

六、K8s 集群准备

6.1 安装和配置 K8s 集群

可以使用 Minikube 来快速搭建一个本地的 K8s 集群,也可以使用云提供商(如阿里云、腾讯云等)提供的 K8s 服务。这里以 Minikube 为例进行介绍。

6.1.1 安装 Minikube

根据不同的操作系统,从 Minikube 官方网站(https://minikube.sigs.k8s.io/docs/start/)下载并安装 Minikube。

6.1.2 启动 Minikube

在终端中执行以下命令启动 Minikube:

minikube start
6.1.3 配置 kubectl

kubectl 是 K8s 的命令行工具,用于与 K8s 集群进行交互。可以通过以下命令来配置 kubectl

minikube kubectl -- get po -A

6.2 验证 K8s 集群

执行以下命令查看 K8s 集群的节点信息:

kubectl get nodes

如果可以看到节点信息,则说明 K8s 集群已经正常启动。

七、在 K8s 集群中部署 Spring Boot 应用

7.1 创建 Deployment

在项目根目录下创建一个名为 deployment.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-demo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: spring-boot-demo
  template:
    metadata:
      labels:
        app: spring-boot-demo
    spec:
      containers:
      - name: spring-boot-demo-container
        image: your-dockerhub-username/spring-boot-demo:1.0
        ports:
        - containerPort: 8080

执行以下命令来创建 Deployment:

kubectl apply -f deployment.yaml

7.2 验证 Deployment

执行以下命令查看 Deployment 的状态:

kubectl get deployments

7.3 创建 Service

为了能够从外部访问 Spring Boot 应用,需要创建一个 Service。在项目根目录下创建一个名为 service.yaml 的文件,内容如下:

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

执行以下命令来创建 Service:

kubectl apply -f service.yaml

7.4 验证 Service

执行以下命令查看 Service 的状态:

kubectl get services

如果使用的是 Minikube,可以通过以下命令来获取 Service 的访问地址:

minikube service spring-boot-demo-service

访问该地址,确保 Spring Boot 应用可以正常访问。

八、总结

通过以上步骤,我们完成了 Spring Boot 应用从打包到 Docker 化,再到在 K8s 集群中进行编排部署的全流程。容器化和编排技术为应用的部署和管理带来了极大的便利,提高了应用的可靠性和可扩展性。在实际项目中,可以根据需求对 Deployment 和 Service 进行进一步的配置和优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanxbl957

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值