Spring Boot + Docker + K8S 简单示例

前言

最近看了看kubernetes(k8s),感觉用这个管理docker确实比自己写一坨脚本进步太多了,简直不是一个次原的东西。

看着k8s的官方文档随手写了个小Demo,一个基于k8s的spring boot服务。

代码:https://github.com/csonezp/echo-service

前置条件

电脑已安装docker/k8s/jdk

建议安装Docker Desktop,并启用自带k8s。

https://docs.docker.com/docker-for-mac/install/

https://github.com/gotok8s/k8s-docker-desktop-for-mac

上面是Mac的安装方法,linux可以在链接里找到。

项目结构

根本上还是一个spring boot项目,只是添加了一些docker/k8s的配置文件,和一些编译、运行脚本。

Spring Boot服务构建

这就是一个最简单的spring boot服务,主要代码:

/**
 * @author : zhangpeng
 * @date : 2019/12/27 14:57
 */
@RestController
public class EchoController {

    @GetMapping("/echo")
    public String echo(@RequestParam(required = false,defaultValue = "Hello World!") String data){
        return data;
    }
}

就提供一个rest接口用来表示服务已经启动了。

为了适配docker,pom文件做了一些修改:

<build>
        <finalName>echo-service</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

标红的这一行,让spring boot打出来的jar包里不带版本号。实际上在生产中是不应该这样做的,这里就是为了简单方便。

Docker镜像构建

为了运行spring boot程序,我们需要一个带Java环境的基础镜像。

FROM centos:centos7
MAINTAINER "Zhang Peng <[email protected]>"
LABEL description="Base Image Java 8"

RUN yum -y install java-1.8.0-openjdk && mkdir /app

然后执行一下:

docker build -f centos7-openjdk8.Dockerfile -t openjdk8:v1 .

打出一个名为 openjdk8:v1的镜像。

这个Dockerfile意思就是镜像基于centos7,一开始会执行一下jdk的安装,并创建一个/app的目录供我们以后使用。

基础镜像有了,现在就要制作我们的服务镜像了

FROM openjdk8:v1
MAINTAINER "Zhang Peng <[email protected]>"
LABEL description="Spring Boot Image"
WORKDIR /app
COPY target/echo-service.jar /app/app.jar
EXPOSE 8080
CMD java -jar /app/app.jar
docker build -f Dockerfile -t echo-service:0.0.1 .

这个Dockerfile会基于openjdk8:v1这个镜像构建,主要做的操作就是将我们spring boot打出来的jar包:echo-service.jar复制到/app/app.jar,然后再执行这个jar包。

k8s配置

docker镜像准备完毕,下面要编写一个k8s的配置文件,来告诉k8s该如何运行和管理我们的服务了。

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: echo-service
spec:
  replicas: 2 # tells deployment to run 2 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: echo-service
    spec:
      containers:
        - name: echo-service
          image: echo-service:0.0.1
          ports:
            - containerPort: 8080

Deployment是k8s的一种常用控制器(点我),可以告诉k8s如何运行你的服务。

这个文件的意思就是会有一个服务,有两个分片,名字叫echo-service,使用的镜像是echo-service:0.0.1,会对外暴露8080的接口提供服务。

脚本部分

build-img.sh

#!/bin/bash
mvn package -Dmaven.test.skip=true
docker build -f centos7-openjdk8.Dockerfile -t openjdk8:v1 .
docker build -f Dockerfile -t echo-service:0.0.1 .

首先对spring boot项目进行打包,这时会在./target目录下生成echo-service.jar;

然后根据centos7-openjdk8.Dockerfile 来构建openjdk8:v1这个基础镜像;

最后构建echo-service:0.0.1镜像。

run.sh

kubectl create -f k8s.yaml
kubectl expose deployment echo-service --type="LoadBalancer"

1、创建k8s的pods;

2、将Deployment对外暴露

运行

进入项目根目录,先执行:

sh build-img.sh

再执行:

sh run.sh

此时服务已经正常启动。

浏览器访问:http://localhost:8080/echo

服务启动成功。

原文地址:https://www.cnblogs.com/csonezp/p/12121448.html

时间: 2024-10-10 20:20:51

Spring Boot + Docker + K8S 简单示例的相关文章

spring boot 结合jsp简单示例

引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- jstl是?个JSP标签集合,它封装了JSP应?的通?核?功能. --> <dependency> <groupId>javax.servle

Spring Boot文件上传示例(Ajax和REST)

本文介绍如何使用Ajax请求在Spring Boot Web应用程序(REST结构)中上传文件. 本文中使用的工具: Spring Boot 1.4.3.RELEASE Spring 4.3.5.RELEASE Thymeleaf jQuery (webjars) Maven Embedded Tomcat 8.5.6 Google Chrome浏览器 1. 项目结构 一个标准的Maven项目结构.如下图所示 - 2. 项目依赖 声明一个额外的jQuery webjar依赖关系,适用于HTML格

基于 spring boot + mybatis-plus实现简单的转账业务

需求:aa向bb转账2000 1.准备工作 简单的数据库 2.创建springboot项目,添加依赖pom.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

阿里微服务专家手写Spring Boot 实现一个简单的自动配置模块

为了更好的理解 Spring Boot 的 自动配置和工作原理,我们自己来实现一个简单的自动配置模块. 假设,现在项目需要一个功能,需要自动记录项目发布者的相关信息,我们如何通过 Spring Boot 的自动配置,更好的实现功能呢? 实战的开端 – Maven搭建 先创建一个Maven项目,我来手动配置下 POM 文件. 参数的配置 - 属性参数类 首先,我们定义一个自定义前缀,叫做 custom 吧.之前说到,这里的配置参数,可以通过 application.properties 中直接设置

spring boot多数据源配置示例

1. application.properties #\u4E3B\u5E93\u914D\u7F6E spring.datasource.primary.url=jdbc:mysql://mysql.test.xxxxx.com:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.primary.username=root spring.datasource.primary.pas

spring boot 之@JsonView 简单介绍

@JsonView是jackson json中的一个注解,spring webmvc也支持这个注解. 这个注解的作用就是控制输入输出后的json. 假设我们有一个用户类,其中包含用户名和密码,一般情况下如果我们需要序列化用户类时,密码也会被序列化,在一般情况下我们肯定不想见到这样的情况.但是也有一些情况我们需要把密码序列化,如何解决这两种不同的情况呢? 使用@JsonView就可以解决. 看下面的简单例子: public class User { public interface Without

Spring Boot + docker +mongo

启动mongo镜像 docker run --name mongo-container -d -P mongo 连接到容器内 docker exec -it eb sh 输入:mongo 输入:show dbs 输入:db.stats() 下载mongo客户端:https://robomongo.org/download 按ctrl+c 和 exit 退出容器,输入:docker ps 这里自动映射的端口为32768,打开Robo 3T,输入地址,点击test 在左侧就能看到库了 新建sprin

Spring boot 集成Dubbo简单版,准备工作,

一.GitHub上找寻Dubbo资源 阿里巴巴在其GitHub上已经写好一个Github案例所以我们只要进入其Git上就可以看到和clone这个项目 二.阿里巴巴GitHub使用 https://github.com/alibaba      首页      然后再搜索框输入,boot,就会找到springboot,如图      点开红圈部分,就可以看到其使用的方法 原文地址:https://www.cnblogs.com/liuyangfirst/p/9311502.html

spring boot web开发 简单的增删改查和spring boot 自带的Junit测试 案例

创建 web项目 配置pom.xml文件   ------相当于jar包 配置application.yml -----配置文件(spring数据库连接.server服务.logging日志等) 创建 package  (entity.controller.service.configuration.repository.interceptor等) 小例子: entity:Person 数据持久化(dao): controller: spring 自带Junit测试@SpringBootTest