Docker

在Docker里使用JDK

很多时候,应用在docker里出现arthas无法工作的问题,是因为应用没有安装 JDK ,而是安装了 JRE 。如果只安装了 JRE,则会缺少很多JAVA的命令行工具和类库,Arthas也没办法正常工作。下面介绍两种常见的在Docker里使用JDK的方式。

使用公开的JDK镜像

比如:

  1. FROM openjdk:8-jdk

或者:

  1. FROM openjdk:8-jdk-alpine

通过包管理软件来安装

比如:

  1. # Install OpenJDK-8
  2. RUN apt-get update && \
  3. apt-get install -y openjdk-8-jdk && \
  4. apt-get install -y ant && \
  5. apt-get clean;
  6. # Fix certificate issues
  7. RUN apt-get update && \
  8. apt-get install ca-certificates-java && \
  9. apt-get clean && \
  10. update-ca-certificates -f;
  11. # Setup JAVA_HOME -- useful for docker commandline
  12. ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
  13. RUN export JAVA_HOME

或者:

  1. RUN yum install -y \
  2. java-1.8.0-openjdk \
  3. java-1.8.0-openjdk-devel
  4. ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk/
  5. RUN export JAVA_HOME

通过Docker快速入门

  1. 删除本地已有的arthas-demo docker container(非必要)

    1. $ docker stop arthas-demo || true && docker rm arthas-demo || true
  2. 启动arthas-demo

    1. $ docker run --name arthas-demo -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/arthas-demo.jar"
  3. 启动arthas-boot来进行诊断

    1. $ docker exec -it arthas-demo /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
    2. * [1]: 9 jar
    3. [INFO] arthas home: /opt/arthas
    4. [INFO] Try to attach process 9
    5. [INFO] Attach process 9 success.
    6. [INFO] arthas-client connect 127.0.0.1 3658
    7. ,---. ,------. ,--------.,--. ,--. ,---. ,---.
    8. / O \ | .--. ''--. .--'| '--' | / O \ ' .-'
    9. | .-. || '--'.' | | | .--. || .-. |`. `-.
    10. | | | || |\ \ | | | | | || | | |.-' |
    11. `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
    12. wiki: https://arthas.aliyun.com/doc
    13. version: 3.0.5
    14. pid: 9
    15. time: 2018-12-18 11:30:36

诊断Docker里的Java进程

  1. docker exec -it ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"

诊断k8s里容器里的Java进程

  1. kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"

把Arthas安装到基础镜像里

可以很简单把Arthas安装到你的Docker镜像里。

  1. FROM openjdk:8-jdk-alpine
  2. # copy arthas
  3. COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas

如果想指定版本,可以查看具体的tags:

https://hub.docker.com/r/hengyunabc/arthas/tags