使用docker部署spring boot并接入skywalking的方法

一、使用Docker部署Spring Boot

  1. 首先我们需要在本地编写好Spring Boot应用程序,并使用Maven或Gradle构建出打包好的jar包。

  2. 编写Dockerfile文件,用于构建Docker镜像。具体内容可以参考下面的示例:

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  1. 构建Docker镜像。进入到包含Dockerfile文件的目录下,执行以下命令:
docker build -t myapp .

其中,myapp为镜像名称。

  1. 运行Docker容器。执行以下命令:
docker run -p 8080:8080 myapp

其中,8080为Spring Boot应用程序绑定的端口,myapp为镜像名称。

二、接入SkyWalking

  1. 下载SkyWalking Agent

从SkyWalking官网下载对应版本的SkyWalking Agent,并将agent配置文件(agent.config)放置到Spring Boot应用程序的所在目录下。

  1. 在Dockerfile文件中添加SkyWalking Agent

在Dockerfile文件中添加以下内容:

ENV AGENT_VERSION 6.6.0

ADD https://archive.apache.org/dist/skywalking/${AGENT_VERSION}/apache-skywalking-apm-${AGENT_VERSION}.tar.gz /skywalking
WORKDIR /skywalking
RUN tar -xvf apache-skywalking-apm-${AGENT_VERSION}.tar.gz && \
    rm apache-skywalking-apm-${AGENT_VERSION}.tar.gz && \
    mv apache-skywalking-apm-${AGENT_VERSION} apm && \
    cd apm/agent && \
    mkdir -p /skywalking-agent && \
    cp -r * /skywalking-agent/

ENV SW_AGENT_NAME=myapp
ENV SW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap:11800
ENV JAVA_OPTS="-javaagent:/skywalking-agent/skywalking-agent.jar"

ADD target/*.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

在Dockerfile中,我们使用ADD命令下载SkyWalking Agent,并将其放置到/skywalking目录。然后我们在SkyWalking Agent的目录下解压文件,并将其放置到/skywalking-agent目录下。接着,我们使用JAVA_OPTS环境变量来指定SkyWalking Agent的位置,并指定应用程序名称及SkyWalking Collector的地址。

至此,我们已经完成了将Spring Boot应用程序部署到Docker容器,并接入SkyWalking的整个过程。

示例一:使用Docker Compose部署Spring Boot应用程序和SkyWalking

在这个示例中,我们将使用Docker Compose工具将Spring Boot应用程序和SkyWalking部署到同一个Docker网络中,并指定SkyWalking Collector的地址。

  1. 编写docker-compose.yml文件
version: "3.7"
services:
  myapp:
    build: .
    ports:
      - 8080:8080
    environment:
      SW_AGENT_NAME: myapp
      SW_AGENT_COLLECTOR_BACKEND_SERVICES: skywalking-oap:11800
      JAVA_OPTS: "-javaagent:/skywalking-agent/skywalking-agent.jar"
    networks:
      - mynetwork
  skywalking-oap:
    image: apache/skywalking-oap-server:6.6.0-es7
    environment:
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
    ports:
      - 12800:12800
    depends_on:
      - elasticsearch
    networks:
      - mynetwork
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    environment:
      - node.name=elasticsearch
      - cluster.name=elasticsearch
      - discovery.seed_hosts=elasticsearch
      - cluster.initial_master_nodes=elasticsearch
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    networks:
      - mynetwork
networks:
  mynetwork:
    driver: bridge
volumes:
  esdata:

在docker-compose.yml文件中,我们定义了三个服务:myapp、skywalking-oap和elasticsearch。myapp服务表示我们编写的Spring Boot应用程序,指定了SkyWalking Agent的环境变量,并映射了应用程序的端口。而skywalking-oap和elasticsearch服务则代表了SkyWalking Collector和Elasticsearch,提供了接收SkyWalking数据和存储SkyWalking数据的功能。

在docker-compose.yml中,我们还声明了一个网络和一个数据卷,用于连接不同的Docker容器并存储数据。

  1. 启动Docker Compose

执行以下命令启动Docker Compose:

docker-compose up -d

在启动完成后,我们可以访问http://localhost:12800/进行SkyWalking的监控界面。

示例二:使用Kubernetes部署Spring Boot应用程序和SkyWalking

在这个示例中,我们将使用Kubernetes工具将Spring Boot应用程序和SkyWalking部署到同一个Kubernetes集群中,并指定SkyWalking Collector的地址。

  1. 编写deployment.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myapp:latest
          ports:
            - containerPort: 8080
          env:
            - name: SW_AGENT_NAME
              value: myapp
            - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
              value: skywalking-oap:11800
            - name: JAVA_OPTS
              value: -javaagent:/skywalking-agent/skywalking-agent.jar
          volumeMounts:
            - name: agent-config-volume
              mountPath: /skywalking-agent/config
            - name: agent-logs-volume
              mountPath: /skywalking-agent/logs
      volumes:
        - name: agent-config-volume
          configMap:
            name: agent-config-map
            items:
              - key: agent.config
                path: agent.config
        - name: agent-logs-volume
          emptyDir: {}
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: agent-config-map
data:
  agent.config: |-
    collector.backend_service=skywalking-oap:11800
    collector.sample_n_per_3_secs=-1
    agent.service_name=myapp
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: skywalking-oap-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: skywalking-oap
  template:
    metadata:
      labels:
        app: skywalking-oap
    spec:
      containers:
        - name: skywalking-oap
          image: apache/skywalking-oap-server:6.6.0-es7
          env:
            - name: SW_STORAGE
              value: elasticsearch7
            - name: SW_STORAGE_ES_CLUSTER_NODES
              value: elasticsearch:9200
          ports:
            - containerPort: 12800
      volumes:
        - name: agent-config-volume
          configMap:
            name: agent-config-map
            items:
              - key: agent.config
                path: agent.config
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
        - name: elasticsearch
          image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
          env:
            - name: node.name
              value: elasticsearch
            - name: cluster.name
              value: elasticsearch
            - name: discovery.seed_hosts
              value: elasticsearch
            - name: cluster.initial_master_nodes
              value: elasticsearch
            - name: bootstrap.memory_lock
              value: "true"
            - name: ES_JAVA_OPTS
              value: -Xms512m -Xmx512m
          resources:
            limits:
              cpu: 1
              memory: 512Mi
            requests:
              cpu: 0.5
              memory: 256Mi
          volumeMounts:
            - name: elasticsearch-data
              mountPath: /usr/share/elasticsearch/data
      volumes:
        - name: elasticsearch-data
          emptyDir: {}

在deployment.yaml文件中,我们定义了三个Deployment:myapp-deployment、skywalking-oap-deployment和elasticsearch-deployment。其中,myapp-deployment代表了我们的Spring Boot应用程序,skywalking-oap-deployment代表了SkyWalking Collector,elasticsearch-deployment代表了Elasticsearch。

在deployment.yaml文件中,我们为每个Deployment定义了一个或多个容器,每个容器都有自己的环境变量、资源请求、端口暴露和数据卷定义。我们可以在这些容器中实现对SkyWalking Agent和SkyWalking Collector的整合。

  1. 启动Kubernetes

执行以下命令启动Kubernetes:

kubectl apply -f deployment.yaml

在启动完成后,我们可以访问Kubernetes集群中的SkyWalking Collector,进行应用程序的监控。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用docker部署spring boot并接入skywalking的方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringBoot搭建全局异常拦截

    一、概述 在使用Spring Boot开发Web应用的过程中,我们经常会遇到程序抛出异常的情况。如何优雅地处理这些异常,返回友好的错误信息给客户端,是很重要的一件事情。Spring Boot提供了全局异常处理机制,可以方便地实现统一的异常处理逻辑,减少代码重复,提高开发效率。 本文将介绍如何使用Spring Boot自带的全局异常处理机制,搭建一个通用的全局…

    Java 2023年5月27日
    00
  • spirngmvc js传递复杂json参数到controller的实例

    下面是关于“Spring MVC中如何传递复杂JSON参数到Controller”的完整攻略,包含两个示例说明。 Spring MVC中如何传递复杂JSON参数到Controller 在Spring MVC中,我们可以使用AJAX来传递复杂JSON参数到Controller。本文将介绍如何实现这一功能。 示例1:使用@RequestBody注解 1. 编写前…

    Java 2023年5月17日
    00
  • jspsmart文件上传与邮件发送的实例

    下面是关于“jspsmart文件上传与邮件发送的实例”的完整攻略。 1. 背景介绍 jspsmart是一个Java开发Web应用程序的基础框架,它提供了很多方便的方法和工具类。本文将重点讲解如何使用jspsmart实现文件上传和邮件发送的功能。 2. 文件上传 2.1 准备工作 在使用jspsmart实现文件上传功能之前,需要确保以下几点: 确保已经引入了j…

    Java 2023年6月15日
    00
  • 10k+点赞的 SpringBoot 后台管理系统教程详解

    首先我们需要明确一下什么是SpringBoot后台管理系统。SpringBoot是一个Java开发框架,它能够帮助开发者快速搭建一个Java Web应用程序,尤其适用于后台管理系统的开发。而SpringBoot后台管理系统,就是指采用SpringBoot框架开发的一个管理后台,用于管理数据和业务逻辑。 接下来,我将详细讲解如何制作一个10k+点赞的Sprin…

    Java 2023年5月15日
    00
  • Spring @Cacheable redis异常不影响正常业务方案

    Spring提供了基于注解的缓存机制,其中@Cacheable就是其中之一,它可以将方法返回值缓存起来,下次使用时直接获取缓存值而不再执行方法体。当然,@Cacheable也支持多种缓存源,其中Redis就是其中之一。 在使用Spring @Cacheable结合Redis进行缓存时,我们需要考虑如何解决Redis出现异常并且不影响我们正常业务的方案。下面是…

    Java 2023年5月27日
    00
  • Java实现简易购物系统

    Java实现简易购物系统完整攻略 系统概述 Java实现简易购物系统是一个基于Java编程语言的开源系统,可以帮助商家搭建自己的网上商城平台。该系统依据用户需求,设计了多种功能模块,包括商品展示、购物车管理、地址管理、订单管理等。用户可以在界面友好的页面上完成商品浏览和购买流程,并通过本系统管理个人信息和完成订单等操作。 准备工作 为了更好的完成该系统,需要…

    Java 2023年5月18日
    00
  • Java实现四则混合运算代码示例

    下面详细讲解一下”Java实现四则混合运算代码示例”的攻略。 一、分析需求 在实现四则混合运算之前,我们需要先分析需求,根据问题的实际情况,确定实现的功能和需求。 四则混合运算包括”加、减、乘、除”四种基本运算,以及括号嵌套。我们需要考虑以下几个方面的需求: 支持四则运算以及括号嵌套。 具有运算符优先级和算数优先级, 先乘除后加减。 括号中的表达式优先级最高…

    Java 2023年5月19日
    00
  • 浅谈JSP与Servlet传值及对比(总结)

    浅谈JSP与Servlet传值及对比(总结)是一篇比较详细介绍 JSP 和 Servlet 之间数据传递的文章。在该文章中,作者讲述了JSP和Servlet传值的几种方式以及它们在不同情况下的使用情况。 1. JSP与Servlet JSP和Servlet是相互联系的,JSP可以添加Java代码,Servlet可以生成HTML代码。JSP和Servlet重点…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部