使用Docker和Kubernetes打包Spring应用

使用 Docker 和 Kubernetes 将 Spring Boot 应用程序容器化。

微信搜索关注《Java学研大本营》,加入读者群,分享更多精彩

介绍

容器化已成为管理和部署应用程序的流行方法,提供了一种跨不同环境一致地打包、分发和运行应用程序的简便方法。在这篇博文中,将介绍使用 Docker 将 Spring Boot 应用程序容器化并将其部署到 Kubernetes 集群的过程。还将提供代码示例和分步说明,以简化流程。

先决条件

  1. Java 开发工具包 (JDK) 8 或更高版本

  2. Maven 或 Gradle

  3. Docker

  4. Kubernetes 集群(例如,Minikube、EKS 或 GKE)

第 1 步:创建 Spring Boot 应用程序

首先,使用 Spring Initializr Web 服务创建一个简单的 Spring Boot 应用程序。可以通过访问https://start.spring.io/并选择所需的选项,或者通过在 Spring Boot CLI 中使用以下命令来执行此操作:

$ spring init --dependencies=web my-spring-boot-app

此命令创建一个 Spring Boot 应用程序,该web应用程序在名为my-spring-boot-app

第 2 步:构建应用程序

切换到应用程序目录并使用 Maven 或 Gradle 构建应用程序。

Maven:

$ cd my-spring-boot-app 
$ ./mvnw clean install

Gradle:

$ cd my-spring-boot-app 
$ ./gradlew clean build

第 3 步:创建 Dockerfile

在应用程序目录的根目录中,创建一个名为Dockerfile以下内容的文件:

FROM openjdk:8-jdk-alpine 
EXPOSE 8080 
ARG JAR_FILE=target/*.jar 
COPY ${JAR_FILE} app.jar 
ENTRYPOINT ["java", "-jar", "/app.jar"]

这个 Dockerfile 指定基础镜像,公开应用程序端口,将构建的 JAR 文件复制到容器,并定义运行应用程序的入口点。

第 4 步:构建 Docker 镜像

使用以下命令构建 Docker 镜像:

$ docker build -t my-spring-boot-app:latest

第 5 步:将 Docker 镜像推送到注册表

将 Docker 映像推送到注册表,例如 Docker Hub、Google Container Registry 或 Amazon Elastic Container Registry。替换<your-dockerhub-username>为您的 Docker Hub 用户名。

$ docker tag my-spring-boot-app:latest <your-dockerhub-username>/my-spring-boot-app:latest 
$ docker push <your-dockerhub-username>/my-spring-boot-app:latest

第 6 步:创建 Kubernetes 部署

创建一个名为deployment.yaml以下内容的文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-spring-boot-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-spring-boot-app
  template:
    metadata:
      labels:
        app: my-spring-boot-app
    spec:
      containers:
      - name: my-spring-boot-app
        image: <your-dockerhub-username>/my-spring-boot-app:latest
        ports:
        - containerPort: 8080

此配置定义了一个 Kubernetes 部署,其中包含 Spring Boot 应用程序的三个副本。

第 7 步:创建 Kubernetes 服务

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

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

此配置定义了一个 Kubernetes 服务,该服务在端口 80 上公开 Spring Boot 应用程序并负载平衡副本之间的流量。

第 8 步:部署到 Kubernetes

使用以下命令将 Kubernetes 配置应用到您的集群:

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

第 9 步:访问应用程序

等待将外部 IP 地址分配给服务。使用以下命令检查服务的外部 IP:

$ kubectl get svc my-spring-boot-app

外部 IP 可用后,在浏览器或任何 HTTP 客户端中使用 IP 地址和端口 80 访问应用程序。

结论

在这篇博文中,介绍了使用 Docker 将 Spring Boot 应用程序容器化并将其部署到 Kubernetes 集群的过程。这种方法有助于管理应用程序的生命周期、简化部署并确保跨不同环境的行为一致。Docker 和 Kubernetes 等容器化和编排技术已成为现代应用程序开发和部署的重要工具。

推荐书单

《项目驱动零起点学Java》

《项目驱动零起点学Java》共分 13 章,围绕 6 个项目和 258 个代码示例,分别介绍了走进Java 的世界、变量与数据类型、运算符、流程控制、方法、数组、面向对象、异常、常用类、集合、I/O流、多线程、网络编程相关内容。《项目驱动零起点学Java》总结了马士兵老师从事Java培训十余年来经受了市场检验的教研成果,通过6 个项目以及每章的示例和习题,可以帮助读者快速掌握Java 编程的语法以及算法实现。扫描每章提供的二维码可观看相应章节内容的视频讲解。

《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。

马士兵,马士兵教育创始人,毕业于清华大学,著名IT讲师,所讲课程广受欢迎,学生遍布全球大厂,擅长用简单的语言讲授复杂的问题,擅长项目驱动知识的综合学习。马士兵教育获得在线教育“名课堂”奖、“最受欢迎机构”奖。

赵珊珊,从事多年一线开发,曾为国税、地税税务系统工作。拥有7年一线教学经验,多年线上、线下教育的积累沉淀,培养学员数万名,讲解细致,脉络清晰。

《项目驱动零起点学Java》(马士兵,赵珊珊)【摘要 书评 试读】- 京东图书京东JD.COM图书频道为您提供《项目驱动零起点学Java》在线选购,本书作者:,出版社:清华大学出版社。买图书,到京东。网购图书,享受最低优惠折扣!icon-default.png?t=N658https://item.jd.com/13607758.html

精彩回顾

数据架构演进史(上)

数据架构演进史(下)

如何选择适合的后端框架

微信搜索关注《Java学研大本营》

访问【IT今日热榜】,发现每日技术热点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值