Docker学习(二十五)构建 Arthas 基础镜像

news2024/12/24 3:25:07

目录

    • 一、简介
    • 二、构建基础镜像
      • 2.1 下载 Arthas
      • 2.2 编写 Dockerfile
      • 2.3 构建镜像
      • 2.4 创建容器
      • 2.5 测试

一、简介

Arthas 是一款由 阿里巴巴 开发的 线上监控诊断工具。通过全局视角实时查看应用负载、内存、GC、线程等信息,能在不修改代码的情况下,对业务问题进行诊断,包括:查看方法调用的输入参、异常,检测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

在如今的开发运维过程中,容器化部署遍地开花,如何将 Arthas 工具构建到基础镜像中呢?


二、构建基础镜像

2.1 下载 Arthas

由于我们的生产环境一般都是不能访问公网的,所以这里我们采用离线的方式进行部署,先将 Arthas 的文件下载下来:

  • 下载地址: https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.7.2/arthas-packaging-3.7.2-bin.zip

下载后文件如下所示:

压缩包内容如下所示:

2.2 编写 Dockerfile

创建一个目录 arthas-tool,创建 Dockerfile 文本文件,输入如下内容:

# 基础镜像(大小:155MB)
FROM quay.io/centos/centos:stream9
# 配置JAVA的环境变量
ENV JAVA_DIR=/usr/local
ENV JAVA_HOME=$JAVA_DIR/jdk1.8.0_351
# 配置到PAHT中
ENV PATH=$PATH:$JAVA_HOME/bin
# 添加 JDK
ADD jdk-8u351-linux-x64.tar.gz $JAVA_DIR
# 添加 Arthas
ADD arthas-packaging-3.7.2-bin.zip /usr/local
# 安装、更新基础控件
RUN yum -q -y update && yum -q -y upgrade \
	&&  yum install -y tzdata vim less ncurses telnet wget zip unzip traceroute procps net-tools iproute tcpdump \
	&&  ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
	&&  yum clean all \
	&&  unzip -d /usr/local/arthas /usr/local/arthas-packaging-3.7.2-bin.zip && rm -f /usr/local/arthas-packaging-3.7.2-bin.zip \
	&&  echo "alias ls='ls --color'" >> ~/.bashrc \
	&&  echo "alias ll='ls -l'" >> ~/.bashrc \
	&&  echo "alias arthas='java -jar /usr/local/arthas/arthas-boot.jar'" >> ~/.bashrc

# 启动命令(因为是基础镜像的Dockerfile,这里轮询让容器可以访问即可)
ENTRYPOINT ["/bin/bash","-c","while true; do sleep 300; done;"]
# 暴露端口
EXPOSE 8888

注意:

  • 由于 Arthas 依赖于 Java 环境,构建 Java 基础镜像的相关内容可以参考:https://blog.csdn.net/qq_33204709/article/details/129429590。
  • java 基本包(jdk-8u351-linux-x64.tar.gz)下载地址:https://share.weiyun.com/nfcGt0cj。

2.3 构建镜像

将我们下载好的 Arthas 压缩包和 Dockerfile 放到同一目录下:

在该目录下执行如下命令即可构建镜像:

docker build -t acgkaka.cn:8080/myweb/arthas-tool:v1 .

我们可以使用如下命令查询镜像是否创建成功:

# Windows 平台
docker images | findstr arthas
# Linux 平台
docker images | grep arthas

可以看到镜像已经构建好了。

2.4 创建容器

镜像已经构建好了,我们可以使用如下命令根据镜像创建容器:

docker run -d --name=arthas-tool acgkaka.cn:8080/myweb/arthas-tool:v1

我们可以使用如下命令查看容器是否正常启动:

docker ps

可以看到,容器已经正常启动了。

2.5 测试

容器已经创建好并且正常启动了,下面我们进入容器中执行一下 arthas 命令测试下。(arthas 命令是之前在 Dockerfile 中设置好的别名)

# 进入容器
docker exec -it arthas-tool bash
# 测试命令
arthas

我们可以看到,arthas 通过命令已经成功启动了,只不过镜像中没有 java 进程所以自动退出了。

整理完毕,完结撒花~ 🌻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1631354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应用层协议了解

一 HTTP前置知识 这篇博客会有点长,但对我来说非常有意义,这是我从一无所知到理解网络的重大突破,在前两个月我对网络非常恐惧,还十分不理解什么是网络,什么是协议。接下来先介绍几个概念。 1 流量 我们把数据给别人&…

测试开发不用做业务测试吗

在探讨测试开发与业务测试的关系时,许多人可能会有这样的疑问:作为测试开发工程师,是否就意味着不再需要关心业务测试?并不是这样的,测试开发和业务测试是软件测试领域中密不可分的两个方面。 测试开发,通…

Spring Data JPA Criteria查询、部分字段查询

前言 在上一篇SpringBoot集成JPA及基本使用-CSDN博客,里面讲解了通过Spring Data JPA的命名规范实现数据库查询以及自定义SQL语句查询。而在开发中,不定个数的多条件查询是一种很常见的场景,如根据注册起止日期、用户名、用户级别等查询用户…

HTTP网络协议,接口请求的内容类型 content-type(2024-04-27)

1、简介 Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载…

【MySQL 5.7安装时候 出现2503报错,解决方案】

MySQL5.7 安装遇 2503问题如何解决 1.能正常安装就点这里2.出现2503问题就看这2.1先看问题2.1.1在官网下载好安装包后,首先先确认安装包是否完整,排除安装包损坏的问题2.1.2 安装时候出现这个2503问题 2.2上解决方案2.2.1 打开任务管理器2.2.2 解决 1.能…

python按时间分割日志

背景介绍 现在的项目都是RotatingFileHandler,指定每个文件大小,指定日志文件的份数。有一个缺点就是要看某一天的日志,需要把这一天之前的最后一份日志和这一天之后的第一份日志都拷贝下来,很多不是自己想要的内容。 需求 想要一个按时间,最好能按天分割日志。查看Pyth…

C语言入门课程学习笔记3

C语言入门课程学习笔记3 第12课 - if 语句编程练习第13课 - switch 多分支选择语句第14课 - 程序中的循环结构第15课 - while 语句编程练习第16课 - do...while 与 for第17课 - break 与 continue 本文学习自狄泰软件学院 唐佐林老师的 C语言入门课程,图片全部来源于…

解锁文件管理新境界:自定义命名与大写扩展名,让文件井然有序

在数字化时代,文件管理成为我们日常生活和工作中不可或缺的一部分。然而,面对杂乱无章的文件名和扩展名,我们时常感到无从下手。如何轻松掌握文件管理,让您的文件井然有序呢?今天,就让我们一起探索自定义命…

Innodb底层原理与Mysql日志机制到底怎么个事???

在学完Innodb底层原理与Mysql日志机制,自己进行总结,画了一张脑图,思路清晰许多 希望对大家也能有点帮助

大模型微调:技术迭代与实践指南

在人工智能领域,大模型(LLM)的微调是一个关键过程,它使模型能够适应特定的任务和数据集。微调是深度学习中用于改进预训练模型性能的重要技术。通过在特定任务的数据集上继续训练,模型的权重被更新以更好地适应该任务。…

MySQL-查询数据-练习

练习 1.创建一个查询,显示收入超过 12,000 的雇员的名字和薪水。 select LAST_NAME,SALARY from employees where SALARY > 12000;2.创建一个查询,显示雇员号为 176 的雇员的名字和部门号。 select LAST_NAME,DEPARTMENT_ID from employees where …

【win10相关】更新后出现未连接到互联网的问题及解决

问题背景 在win10更新完系统之后,第二天电脑开机后,发现无法上网,尝试打开百度,但是出现以下图片: 经过检查,发现手机是可以上网的,说明网络本身并没有问题,对防火墙进行了一些设置…

MySQL 之 主从复制

1. 主配置文件(win下是my.ini,linux下是my.cnf) #mysql 服务ID,保证整个集群环境中唯一 server-id1 #mysql binlog 日志的存储路径和文件名 log-bin/var/lib/mysql/mysqlbin #错误日志,默认已经开启 #log-err #mysql的安装目录 #basedir #mys…

基于Springboot的甘肃旅游服务平台(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的甘肃旅游服务平台(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

连接oracle时出现ORA-12541:TNS:无监听程序的错误

遇到个问题,有一台windows serve 的服务器,这台服务器(只部署了oracle)忽然监听出问题了,提示 一、问题检查步骤: 1.winR--->cmd--->输入 lsnrctl status 查看监听的状态 如果监听器未运行&#…

实用指南:如何在CMD中运行Java程序并快速修复错误

引言 Java,在企业级开发到教育学习的不同场合,这门历史悠久的编程语言一直占据着举足轻重的地位。编程过程中的报错和异常处理是每个开发者必须面对的挑战。不管是经验丰富的开发人员还是编码新手,理解和解决这些错误总是能带来提高。 本文旨…

开发总结-Controller层

Controller层一定要try catch一下,不然里面报的错可能导致程序报错。 catch中就表示有错误就 Return ResultUtils.err(e.getMessage()) 必填项校验 在实体属性中添加注解 NotNull : 用在基本类 型上 不能为null 但可以为空字符串 NotEmpty : 用在集合类上 不能为…

MySQL数据库基础(数据库的基本操作、常用的数据类型、表的相关操作)

前言 今天我们将介绍数据库的基本操作、常用的数据类型、表的相关操作 一、数据库的基本操作 1.1 显示当前的数据库 操作代码 show databases;1.2 创建数据库 基本语法: 1. //创建数据库 create database examble;2. create database if not exists exist exa…

PostgreSQL大版本如何升级?

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

Paddle OCR v4 微调训练文字识别SVTRNet模型实践

文字识别步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md 微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md 训练必要性 原始模型标点符号和括号容易识别不到 数据…