SpringBoot容器化部署之Docker与Kubernetes操作指南

 更新时间:2025年12月12日 14:46:45   作者:fanxbl957  
本文介绍了如何将SpringBoot应用进行容器化部署,通过Docker和Kubernetes进行编排和管理,涵盖了从项目创建、Dockerfile编写、镜像构建、容器运行到Kubernetes部署、监控和维护的全流程

一、引言

在当今的软件开发和部署领域,容器化技术已经成为了主流趋势。

Spring Boot作为一个广泛使用的Java开发框架,结合Docker和Kubernetes进行容器化部署,可以极大地提高应用的开发效率、部署灵活性和可维护性。

本文将详细介绍如何将Spring Boot应用进行容器化,并通过Kubernetes进行编排和管理,涵盖从基础环境搭建到最终部署的全流程。

二、Spring Boot应用基础

2.1 创建Spring Boot项目

我们可以使用Spring Initializr来快速创建一个Spring Boot项目。

访问 Spring Initializr 网站,进行如下配置:

  • Project:选择Maven Project
  • Language:选择Java
  • Spring Boot:选择合适的版本
  • GroupArtifact:根据自己的项目命名
  • Dependencies:添加Spring Web依赖

点击“Generate”按钮下载项目压缩包,解压后导入到IDE中。

2.2 编写简单的Spring Boot应用

src/main/java 目录下创建一个控制器类,例如 HelloController.java

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!";
    }
}

运行项目,访问 http://localhost:8080/hello,如果看到 “Hello, Spring Boot!” 则说明项目正常运行。

三、Docker基础

3.1 Docker简介

Docker是一个用于开发、部署和运行应用程序的开源平台。

它使用容器化技术,将应用及其依赖打包成一个独立的容器,实现了应用的隔离和可移植性。

3.2 安装Docker

不同的操作系统安装Docker的方法略有不同,以下是常见操作系统的安装步骤:

  • Linux(以Ubuntu为例)

1. 更新系统包列表:

sudo apt update

2. 安装必要的依赖:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

3. 添加Docker的官方GPG密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4. 添加Docker的软件源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu$(lsb_release -cs) stable"

5. 更新包列表并安装Docker:

sudo apt update
sudo apt install docker-ce

6. 验证Docker是否安装成功:

sudo docker run hello-world
  • Windows

下载并安装Docker Desktop for Windows,从 Docker官方网站 下载安装包。

安装完成后,启动Docker Desktop。

  • Mac

下载并安装Docker Desktop for Mac,从 Docker官方网站 下载安装包。

安装完成后,启动Docker Desktop。

3.3 创建Dockerfile

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

# 使用官方的OpenJDK基础镜像
FROM openjdk:11-jdk-slim

# 设置工作目录
WORKDIR /app

# 复制项目的JAR文件到容器中
COPY target/*.jar app.jar

# 暴露应用的端口
EXPOSE 8080

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

3.4 构建Docker镜像

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

docker build -t spring-boot-demo .

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

3.5 运行Docker容器

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

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

-p 用于将容器的8080端口映射到主机的8080端口。访问 http://localhost:8080/hello,如果能看到 “Hello, Spring Boot!” 则说明容器运行正常。

四、Kubernetes基础

4.1 Kubernetes简介

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。它提供了强大的功能,如自动伸缩、负载均衡、滚动更新等。

4.2 安装Kubernetes环境

可以使用Minikube在本地搭建一个单节点的Kubernetes集群。以下是安装步骤:

  • 安装Minikube

Linux

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
- **Windows**:从 [Minikube官方网站](https://minikube.sigs.k8s.io/docs/start/) 下载安装包进行安装。
- **Mac**:
brew install minikube
  • 启动Minikube
minikube start

4.3 创建Kubernetes部署文件

在项目根目录下创建一个 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: spring-boot-demo
        ports:
        - containerPort: 8080

这个文件定义了一个Deployment,它会创建3个副本的Spring Boot应用容器。

4.4 创建Kubernetes服务文件

创建一个 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,它会将外部请求转发到Deployment中的容器。

4.5 部署到Kubernetes

执行以下命令将Deployment和Service部署到Kubernetes集群中:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

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

kubectl get deployments
kubectl get services

五、监控和维护

5.1 使用Kubernetes Dashboard监控

Kubernetes Dashboard是一个基于Web的用户界面,用于管理和监控Kubernetes集群。

可以使用以下命令启动Dashboard:

minikube dashboard

打开浏览器,访问Dashboard的URL,即可查看集群的状态和资源使用情况。

5.2 日志查看

可以使用 kubectl logs 命令查看容器的日志:

kubectl logs <pod-name>

其中,<pod-name> 是要查看日志的Pod的名称。

5.3 滚动更新

当需要更新应用版本时,可以使用滚动更新的方式。修改 deployment.yaml 文件中的镜像版本,然后执行以下命令:

kubectl apply -f deployment.yaml

Kubernetes会自动进行滚动更新,确保应用的高可用性。

六、总结

通过本文的介绍,我们详细了解了如何将Spring Boot应用进行容器化,并通过Kubernetes进行编排和管理。

从创建Spring Boot项目,到构建Docker镜像,再到部署到Kubernetes集群,整个流程涵盖了容器化部署的关键步骤。

希望本文能帮助技术人员更好地掌握Spring Boot容器化部署的方法,提高应用的开发和部署效率。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 分析Java中为什么String不可变

    分析Java中为什么String不可变

    Java中为什么String是不可变性的。今天我们从多角度解析为什么Java把String做成不可变的。
    2021-06-06
  • 5分钟快速上手Spring Boot

    5分钟快速上手Spring Boot

    这篇文章主要介绍了5分钟快速上手Spring Boot,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • java byte数组与16进制间相互转换的示例

    java byte数组与16进制间相互转换的示例

    这篇文章主要介绍了java byte数组与16进制间相互转换的示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • Java中try catch处理异常示例

    Java中try catch处理异常示例

    这篇文章主要给大家介绍了关于Java中try catch 的基本用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • java 中Thread.join()的使用方法

    java 中Thread.join()的使用方法

    这篇文章主要介绍了java 中Thread.join()的使用方法的相关资料,需要的朋友可以参考下
    2017-04-04
  • 提升性能秘密武器Java Unsafe类面试精讲

    提升性能秘密武器Java Unsafe类面试精讲

    这篇文章主要为大家介绍了提升性能秘密武器Java Unsafe类面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Spring boot整合Mybatis实现级联一对多CRUD操作的完整步骤

    Spring boot整合Mybatis实现级联一对多CRUD操作的完整步骤

    这篇文章主要给大家介绍了关于Spring boot整合Mybatis实现级联一对多CRUD操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    Set接口深入剖析之HashSet、LinkedHashSet和TreeSet

    这篇文章主要介绍了Set接口深入剖析之HashSet、LinkedHashSet和TreeSet,LinkedHashSet是HashSet的子类,实现了Set接口,LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表,需要的朋友可以参考下
    2023-09-09
  • Java利用Phantomjs实现生成图片的功能

    Java利用Phantomjs实现生成图片的功能

    这篇文章主要介绍了Java利用Phantomjs实现生成图片的功能,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 解析Java多线程之常见锁策略与CAS中的ABA问题

    解析Java多线程之常见锁策略与CAS中的ABA问题

    本篇文章介绍了常见的锁策略,并说明了synchronized关键字加的锁类型不是单一一种锁类型的,根据可重入锁与非可重入锁引出了死锁的概念与死锁条件,最后介绍了CAS指令以及CAS锁产生的ABA问题及其解决方案,需要的朋友可以参考下
    2022-06-06

最新评论