一、使用Docker部署Spring Boot
-
首先我们需要在本地编写好Spring Boot应用程序,并使用Maven或Gradle构建出打包好的jar包。
-
编写Dockerfile文件,用于构建Docker镜像。具体内容可以参考下面的示例:
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
- 构建Docker镜像。进入到包含Dockerfile文件的目录下,执行以下命令:
docker build -t myapp .
其中,myapp为镜像名称。
- 运行Docker容器。执行以下命令:
docker run -p 8080:8080 myapp
其中,8080为Spring Boot应用程序绑定的端口,myapp为镜像名称。
二、接入SkyWalking
- 下载SkyWalking Agent
从SkyWalking官网下载对应版本的SkyWalking Agent,并将agent配置文件(agent.config)放置到Spring Boot应用程序的所在目录下。
- 在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的地址。
- 编写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容器并存储数据。
- 启动Docker Compose
执行以下命令启动Docker Compose:
docker-compose up -d
在启动完成后,我们可以访问http://localhost:12800/进行SkyWalking的监控界面。
示例二:使用Kubernetes部署Spring Boot应用程序和SkyWalking
在这个示例中,我们将使用Kubernetes工具将Spring Boot应用程序和SkyWalking部署到同一个Kubernetes集群中,并指定SkyWalking Collector的地址。
- 编写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的整合。
- 启动Kubernetes
执行以下命令启动Kubernetes:
kubectl apply -f deployment.yaml
在启动完成后,我们可以访问Kubernetes集群中的SkyWalking Collector,进行应用程序的监控。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用docker部署spring boot并接入skywalking的方法 - Python技术站