路径:
[root@ecs-01-0002 temp]# pwd/opt/temp

Dockerfile文件如下:
ROM openjdk:8-jre-alpineVOLUME /tmpADD ./agent/ /agent/#下面两个是指定语言和安装字体相关的包ENV LANG en_US.UTF-8RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
第一行的ROM的基础镜像可以使用自己制作的基础镜像也是可以的,前提是需要带有java的环境jre是最小的运行环境或者是装有JDK的环境配置
在该路径下执行如下命令:
1.docker build -t openjdk:8-jre-alpine-apm-8.11 .在当前路径下构建应用的基础镜像,名称为:openjdk:8-jre-alpine-apm-8.112.docker tag openjdk:8-jre-alpine-apm-8.11仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11推送私有hub仓库打的tag3.docker push 仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11

推送应用基础镜像下面两步骤可以不用执行,除非此服务是安装了jenkins的服务器且有构建记录,需要把之前构建的openjdk:8-jre-alpine-apm-8.11这个镜像删除,否则jenkins构建项目是默认使用本地已经存在的镜像,就不会去远端私有镜像仓库中拉取docker rmi -f 镜像id--xxxxx4.docker pull 仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11重新从私有仓库拉取openjdk:8-jre-alpine-apm-8.115.docker tag 仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11 openjdk:8-jre-alpine-apm-8.11如果没有tag为openjdk:8-jre-alpine-apm-8.11的镜像需要重新给拉取的镜像打tag为openjdk:8-jre-alpine-apm-8.11
注意该jenkiens服务器上需要配置hub推送免密登录的配置,这个就自行百度了
项目中的Dockerfile文件如下

FROM openjdk:8-jre-alpineVOLUME /tmpADD target/*.jar app.jarRUN echo "Asia/Shanghai" > /etc/timezoneENTRYPOINT java ${JAVA_OPTS} ${JAVA_PARAMETERS} ${SERVER_NAME} -jar /app.jar

<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.4.0</version></dependency><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.4.0</version></dependency>

pipeline {agent anyenvironment {image_tag="xxxx"git_address="xxxx"git_branch="xxxx"git_auth="xxxxx"registry_name="xxxx"registry_pwd="xxx"container_name="xxxx"JAVA_OPTS="-Xms512m -Xmx512m -Xss256K"}stages {stage("拉取代码") {steps {git branch: "${git_branch}", credentialsId: "${git_auth}",url: "${git_address}"}}stage('质量扫描') {steps {echo '跳过扫描'}}stage('maven编译') {steps {sh 'mvn -B -f ./pom.xml clean install -DskipTests'}}stage('编译镜像') {steps {sh '''cp target/*.jar ./docker build -t ${image_tag} .'''sh 'docker login --username=${registry_name} --password=${registry_pwd} harbor.yndysc.com'sh 'docker push ${image_tag}'sh 'docker rmi ${image_tag}'}}}}
xxxx-server.yml
apiVersion: apps/v1 #版本kind: Deployment #k8s资源类型是Deploymentmetadata: #Deployment 的元数据name: xxx #资源名称 (xxx-deployment)namespace: xxxxx #资源所属namespacelabels:#绑定要选择镜像的标签app: xxxxx #容器名字spec:replicas: 4 #容器发布的副本个数selector:#标签选择器matchLabels:app: xxxx #容器名字template: #模板配置metadata: #模板元数据labels:#模板标签(标签选择器)app: xxxx #容器名字spec:#副本containers: #数组可以有多个- name: xxxx #镜像名字image: xxxxx #镜像名称(tag:版本)imagePullPolicy: Always #镜像拉取策略(总是拉取)ports:- containerPort: 80 #容器端口env: #容器运行的环境变量配置(是一个数组可以有多个)- name: JAVA_OPTS #java启动参数环境变量配置valueFrom: #环境变量的值来自于configMap的资源configMapKeyRef:name: nacos-elk-configmapkey: JAVA_OPTS- name: JAVA_PARAMETERSvalueFrom:configMapKeyRef:name: nacos-elk-configmapkey: JAVA_PARAMETERS- name: SERVER_NAMEvalue: -Dskywalking.agent.service_name=[链路追踪的服务名称xxx]livenessProbe:#应用探活配置(探针)httpGet:path: /actuator/healthport: 80initialDelaySeconds: 50timeoutSeconds: 2readinessProbe:#读取探活配置(探针)httpGet:path: /actuator/healthport: 80initialDelaySeconds: 50timeoutSeconds: 2resources:#pod资源限制配置requests:ephemeral-storage: "1Gi"memory: "1Gi"cpu: 200mlimits:ephemeral-storage: "10Gi"memory: "2Gi"cpu: 1000mimagePullSecrets: #镜像拉取策略- name: secret-name-harbor #私服拉取dnsConfig: #dns配置options:- name: ndotsvalue: "5"
kubectl create -f xxxx-server.yml
发布服务
Pod服务启动后进入容器:


参看:
https://www.cnblogs.com/shaozhiqi/p/12442065.html
https://www.cnblogs.com/ricklz/p/14930801.html#%E7%90%86%E8%A7%A3configmap
lkubectl get configmap nacos-elk-configmap -n xxx-system -o yaml
lnacos-elk-configmap:config的名字
lxxx-system 是configMap资源所属的nameSpace
查看configMap的yml
apiVersion: v1data:JAVA_OPTS: -Xms512m -Xmx512mJAVA_PARAMETERS: -javaagent:/agent/skywalking-agent.jar -Dskywalking.trace.ignore_path=/,Lettuce/**,Jedis/scriptLoad,/Lettuce/INFO,/actuator/**,/**/actuator/health,Redisson/AUTH-Dspring.profiles.active=prod -Dcloud.nacos_url=nacous注册中心的地址-Dcloud.nacos_namespace=nacous中的namespace的id -Delk.logger.destination=elk的地址 -Dskywalking.collector.backend_service=skywalking服务server的ip:portkind: ConfigMap
微服务项目的pom文件中需要加入如下pom依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.3.2.RELEASE</version></dependency>
Nacos中加入配置:
management:endpoints:web:exposure:#设置health端点include: "health"
curl 172.16.0.38:9001/actuator/health
curl pod的ip:应用的端口,看到如下打印信息是只有health断点暴露了,没有其它的断点暴露

kubectl logs pod名称 -n xxxx-system -f | grep 'xxx2' -C 200 #搜索日志中含有xxx2日志的前后200行输出k -n xxx-system get po -o wide | grep xxxxx #简写查pod信息Kubectl logs pod名称 -n xxxx-system -f #查日志kubectl delete pod pod名称-n xxxx-system #删除pod后重新拉取一个新的podkubectl get pod -n xxxx-system | grep xxxxkubectl exec -it pod名称 -n xxx-system sh #进入pod中kubectl cp xxx-system/pod名称:/xxx-server.jar /root/xxx_yaml/xx-server.jar将从某个nameSpace/pod中的某个路径下的某个文件 拷贝到 服务的某路径下的某文件kubectl get configmap configmap的 -n xxxx-system -o yaml 参看conMap的yml信息
参考博客:
https://juejin.cn/post/7094245157456838687
https://www.modb.pro/db/381045
https://www.cnblogs.com/linyb-geek/p/14597848.html
原文作者:Java大飞哥;如有侵权,请联系管理员删除。