开发者

SpringBoot+Docker+K8s云原生部署全流程(从零到发布)

目录
  • 从零到发布:SpringBoot + docker + K8s 云原生部署全流程
    • 一、前言
    • 二、环境准备
      • 2.1 开发环境搭建
      • 2.2 Docker 环境安装
      • 2.3 Kubernetes 环境搭建
    • 三、Spring Boot 项目开发
      • 3.1 创建 Spring Boot 项目
      • 3.2 编写简单的 RESTful API
      • 3.3 项目打包
    • 四、Docker 镜像构建与管理
      • 4.1 编写 Dockerfile
      • 4.2 构建 Docker 镜像
      • 4.3 运行 Docker 容器进行测试
      • 4.4 推送 Docker 镜像到镜像仓库
    • 五、Kubernetes 部署应用
      • 5.1 创建 Deployment
      • 5.2 创建 Service
      • 5.3 查看部署状态
      • 5.4 访问应用
    • 六、持续集成与持续部署(CI/CD)
      • 6.1 选择 CI/CD 工具
      • 6.2 配置 github Actions
      • 6.3 触发 CI/CD 流程
    • 七、总结

    从零到发布:SpringBoot + Docker + K8s 云原生部署全流程

    一、前言

    在当今的软件开发领域,云原生技术已经成为主流趋势。Spring Boot 以其快速开发和便捷配置的特性,成为 Java 开发者构建 Web 应用的首选框架;Docker 为应用提供了轻量级的容器化解决方案,实现了应用的隔离和可移植性;Kubernetes(K8s)则是容器编排的事实标准,能够高效地管理和调度容器化应用。本文将详细介绍如何将一个 Spring Boot 应用从开发到通过 Docker 打包,最终使用 K8s 进行云原生部署的全流程。

    二、环境准备

    2.1 开发环境搭建

    1. Java 开发环境
      • 确保系统安装了 JDK 8 或更高版本。可以从 oracle 官网或 OpenJDK 官网下载对应系统的安装包进行安装。安装完成后,配置 JAVA_HOMEPATH 等环境变量。例如,在 linux 系统中,可以编辑 /etc/profile 文件添加如下内容:
    export JAVA_HOME=/path/to/your/jdk
    export PATH=$JAVA_HOME/bin:$PATH
    - 验证 Java 安装是否成功,在终端执行 `java -version` 命令,若输出 Java 版本信息,则说明安装成功。
    1. Maven 或 Gradle 构建工具
      • Maven:从 Maven 官网下载二进制包,解压到指定目录。配置 MAVEN_HOMEPATH 环境变量,同样在 /etc/profile 文件中添加:
    export MAVEN_HOME=/path/to/your/maven
    export PATH=$MAVEN_HOME/bin:$PATH
    - 验证 Maven 安装,执行 `mvn -v` 命令,若输出 Maven 版本信息则安装成功。
    - **Gradle**:也可以选择 Gradle 作为构建工具,从 Gradle 官网下载安装包,按照官方文档进行安装和配置。

    2.2 Docker 环境安装

    1. Linux 系统
      • 对于 Ubuntu 系统,可以使用以下命令安装 Docker:
    sudo apt-get update
    sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu$(lsb_release -cs) stable"
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    - 安装完成后,使用 `sudo docker run hello-world` 命令验证 Docker 是否安装成功。
    1. Windows 系统
      • 从 Docker 官网下载 Docker Desktop for Windows 安装包,运行安装程序,按照提示完成安装。安装完成后,启动 Docker Desktop,在命令提示符或 PowerShell 中执行 docker run hello-world 进行验证。

    2.3www.devze.com Kubernetes 环境搭建

    1. 本地开发环境 - Minikube
      • Minikube 是一个在本地快速搭建单节点 K8s 集群的工具。从 Minikube 官网下载对应系统的二进制文件,添加到系统 PATH 中。
      • 启动 Minikube,执行以下命令:
    minikube start
    - 配置 `kubectl` 与 Minikube 集群交互:
    kubectl config use-context minikube
    1. 云环境 - 以阿里云 ACK 为例
      • 登录阿里云控制台,进入容器服务 ACK 页面,创建一个 K8s 集群。按照向导完成集群的配置,包括节点数量、节点规格等。
      • 下载并配置 kubectl,通过阿里云提供的凭证信息连接到创建的集群。

    三、Spring Boot 项目开发

    3.1 创建 Spring Boot 项目

    1. 使用 Spring Initializr
      • 访问 Spring Initializr 网站(https://start.spring.io/),选择项目的元数据,如项目类型(Maven Project 或 Gradle Project)、Java 版本、Spring Boot 版本等。
      • 添加所需的依赖,例如 Spring Web 用于构建 Web 应用。点击 Generate 按钮下载项目压缩包,解压到本地开发环境。
    2. 使用 IDE 创建项目
      • 在 IntelliJ IDEA 中,选择 File -> New -> Project,在左侧选择 Spring Initializr,按照向导完成项目创建。

    3.2 编写简单的 RESTful API

    1. 创建 Controller 类
      • src/main/java 目录下创建一个 Controller 类,示例代码如下:
    package com.example.demo.controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframewandroidork.web.bind.annotation.RestController;
    @RestController
    public class HelloController {
        @GetMapping("/hello")
        public String hello() {
            return "Hello, Spring Boot!";
        }
    }
    1. 运行项目进行测试
      • 在 IDE 中运行 Spring Boot 应用的主类(通常是带有 @SpringBootApplication 注解的类)。
      • 打开浏览器或使用工具(如 Postman)访问 http://localhost:8080/hello,若看到返回 Hello, Spring Boot!,则说明 API 编写成功。

    3.3 项目打包

    1. Maven 打包
      • 在项目根目录下执行以下命令进行打包:
    mvn clean package
    - 打包完成后,在 `target` 目录下会生成一个 `.jar` 文件。
    1. Gradle 打包
      • 若使用 Gradle,执行以下命令:
    gradle build
    - 生成的 `.jar` 文件位于 `build/libs` 目录下。

    四、Docker 镜像构建与管理

    4.1 编写 Dockerfile

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

    # 基础镜像
    FROM openjdk:11-jre-slim
    # 设置工作目录
    WORKDIR /app
    # 将打包好的 Spring Boot 应用复制到容器中
    COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
    # 暴露应用端口
    EXPOSE 8080
    # 启动应用
    CMD ["java", "-jar", "app.jar"]

    4.2 构建 Docker 镜像

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

    docker build -t springboot-demo:1.0 .

    其中,springboot-demo:1.0 是镜像的名称和版本号,. 表示使用当前目录下的 Dockerfile 进行构建。

    4.3 运行 Docker 容器进行测试

    构建完成后,使用以下命令运行 Docker 容器:

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

    -p 8080:8080 表示将容器的 8080 端口映射到宿主机的 8080 端口。访问 http://localhost:8080/hello,若能看到之前编写的 API 返回结果,则说明容器运行正常。

    4.4 推送 Docker 镜像到镜像仓库

    1. 注册镜像仓库账号
      • 可以选择公共的镜像仓库,如 Docker Hub,也可以使用云服务商提供的私有镜像仓库,如阿里云容器镜像服务。注册并登录相应的镜像仓库。
    2. 登录镜像仓库
      • 以 Docker Hub 为例,在终端执行以下命令登录:
    docker login

    输入用户名和密码完成登录。

    3. 标记镜像

    - 为了将镜像推送到指定的镜像仓库,需要给镜像添加合适的标签:

    docker tag springboot-demo:1.0 your-dockerhub-username/springboot-demo:1.0
    1. 推送镜像
      • 执行以下命令将镜像推送到 Docker Hub:
    docker push your-dockerhub-username/springboot-demo:1.0

    五、Kubernetes 部署应用

    5.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: your-dockerhub-username/springboot-demo:1.0
            ports:
            - containerPort: 8080

    执行以下命令创建 Deployment:

    kubectl apply -f deployment.yaml

    replicas: 3 表示创建 3 个副本,确保应用的高可用性。

    5.2 创建 Service

    创建一个名为 service.yaml 的文件,内容如下:

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

    执行以下命令创建 Service:

    kubectl apply -f service.yaml

    type: LoadBalancer 表示创建一个负载均衡器,将外部流量分发到后端的 Pod 上。

    5.3 查看部署状态

    使用以下命令查看 Deployment 和 Service 的状态:

    kubectl get deployments
    kubectl get services

    确保 Deployment 的 READY 状态为 3/3,Service 分配到了外部 IP 地址。

    5.4 访问应用

    如果使用 Minikube,可以执行以下命令获取应用的访问地址:

    minikube service springboot-demo-service

    如果是云环境,使用 Service 分配的外部 IP 地址访问 http://<external-ip>/hello,若能看到 API 返回结果,则说明应用部署成功。

    六、持续集成与持续部署(CI/CD)

    6.1 选择 CI/CD 工具

    可以选择 Jenkins、GitLab CI/CD、GitHub Actions 等工具实现 CI/CD 流程。这里以 GitHub Actions 为例进行介绍。

    6.2 配置 GitHub Actions

    1. 在项目根目录下创建 .github/workflows 目录。
    2. 在该目录下创建一个名为 ci-cd.yml 的文件,内容如下:
    name: Spring Boot CI/CD
    on:
      push:
        branches:
          - main
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout code
            uses: actions/checkout@v2
          - name: Set up Java
            uses: actions/setup-java@v1
            with:
              java-version: 11
          - name: Build with Maven
            run: mvn clean package
          - name: Set up Docker Buildx
            uses: docker/setup-buildx-action@v1
          - name: Login to Docker Hub
            uses: docker/login-action@v1
            with:
              username:${{ secrets.DOCKERHUB_USERNAME }}
              password:${{javascript secrets.DOCKERHUB_PASSWORD }}
          - name: Build and push Docker image
            uses: docker/build-push-action@v2
            with:
              context: .
              push: true
              tags: your-dockerhub-username/springboot-demo:latest
          - name: Set up kubectl
            uses: azure/setup-kubectl@v1
          - name: Deploy to Kubernetes
            run: |
              kubectl config set-cluster my-cluster --server=${{ secrets.K8S_SERVER }}
              kubectl config set-credentials my-user --token=${{ secrets.K8S_TOKEN }}
              kubectl config set-context my-context --cluster=my-cluster --user=my-user
              kubectl config use-context my-context
              kubectl apply -f deployment.yaml
              kubectl apply -f service.yaml
    1. 在 GitHub 项目的设置中添加 DOCKERHUB_USERNAMEDOCKERHUB_PASSWORDK8S_SERVERK8S_TOKEN 等 Secrets,确保敏感信息的安全。

    6.3 触发 CI/CD 流程

    每次向 main 分支推送代码时,GitHub Actions 会自动触发 CI/CD 流程,完成代码构建、镜像打包、推送和 K8s 部署等操作。

    七、总结

    通过以上步骤,我们完成了从 Spring Boot 项目开发到 Docker 镜像构建,再到使用 K8s 进行云原生部署的全流程。并且通过 CI/CD 工具实现了代码的自动化部署,提高了开发和部署效率。在实际项目中,可以根据需求对各个环节进行优化和扩展,确保应用的高可用性、可扩展性和安全性。

    到此这篇关于SpringBoot+Docker+K8s云原生部署全流程(从零到发布)的文章就介绍到这了,更多相关SpringBoot+Docker+K8s云原生部署内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大js家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜