目录
一、简介
Arthas
是一款由 阿里巴巴 开发的 线上监控诊断工具。通过全局视角实时查看应用负载、内存、GC、线程等信息,能在不修改代码的情况下,对业务问题进行诊断,包括:查看方法调用的输入参、异常,检测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
在如今的开发运维过程中,容器化部署遍地开花,如何将 Arthas 工具构建到基础镜像中呢?
二、构建基础镜像
2.1 下载 Arthas
由于我们的生产环境一般都是不能访问公网的,所以这里我们采用离线的方式进行部署,先将 Arthas 的文件下载下来:
下载后文件如下所示:
压缩包内容如下所示:
2.2 编写 Dockerfile
创建一个目录 arthas-tool
,创建 Dockerfile
文本文件,输入如下内容:
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 放到同一目录下:
在该目录下执行如下命令即可构建镜像:
shell
docker build -t acgkaka.cn:8080/myweb/arthas-tool:v1 .
我们可以使用如下命令查询镜像是否创建成功:
sh
# Windows 平台
docker images | findstr arthas
# Linux 平台
docker images | grep arthas
可以看到镜像已经构建好了。
2.4 创建容器
镜像已经构建好了,我们可以使用如下命令根据镜像创建容器:
sh
docker run -d --name=arthas-tool acgkaka.cn:8080/myweb/arthas-tool:v1
我们可以使用如下命令查看容器是否正常启动:
sh
docker ps
可以看到,容器已经正常启动了。
2.5 测试
容器已经创建好并且正常启动了,下面我们进入容器中执行一下 arthas
命令测试下。(arthas 命令是之前在 Dockerfile 中设置好的别名)
sh
# 进入容器
docker exec -it arthas-tool bash
# 测试命令
arthas
我们可以看到,arthas 通过命令已经成功启动了,只不过镜像中没有 java 进程所以自动退出了。
整理完毕,完结撒花~ 🌻