|
|
# Docker
|
|
|
|
|
|
## 在 Docker 里使用 JDK
|
|
|
|
|
|
很多时候,应用在 docker 里出现 arthas 无法工作的问题,是因为应用没有安装 JDK ,而是安装了 JRE 。如果只安装了 JRE,则会缺少很多 JAVA 的命令行工具和类库,Arthas 也没办法正常工作。下面介绍两种常见的在 Docker 里使用 JDK 的方式。
|
|
|
|
|
|
### 使用公开的 JDK 镜像
|
|
|
|
|
|
- https://hub.docker.com/_/openjdk/
|
|
|
|
|
|
比如:
|
|
|
|
|
|
```
|
|
|
FROM openjdk:8-jdk
|
|
|
```
|
|
|
|
|
|
或者:
|
|
|
|
|
|
```
|
|
|
FROM openjdk:8-jdk-alpine
|
|
|
```
|
|
|
|
|
|
### 通过包管理软件来安装
|
|
|
|
|
|
比如:
|
|
|
|
|
|
```bash
|
|
|
# Install OpenJDK-8
|
|
|
RUN apt-get update && \
|
|
|
apt-get install -y openjdk-8-jdk && \
|
|
|
apt-get install -y ant && \
|
|
|
apt-get clean;
|
|
|
|
|
|
# Fix certificate issues
|
|
|
RUN apt-get update && \
|
|
|
apt-get install ca-certificates-java && \
|
|
|
apt-get clean && \
|
|
|
update-ca-certificates -f;
|
|
|
|
|
|
# Setup JAVA_HOME -- useful for docker commandline
|
|
|
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
|
|
|
RUN export JAVA_HOME
|
|
|
```
|
|
|
|
|
|
或者:
|
|
|
|
|
|
```bash
|
|
|
RUN yum install -y \
|
|
|
java-1.8.0-openjdk \
|
|
|
java-1.8.0-openjdk-devel
|
|
|
|
|
|
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk/
|
|
|
RUN export JAVA_HOME
|
|
|
```
|
|
|
|
|
|
## 通过 Docker 快速入门
|
|
|
|
|
|
1. 删除本地已有的`math-game` docker container(非必要)
|
|
|
|
|
|
```sh
|
|
|
$ docker stop math-game || true && docker rm math-game || true
|
|
|
```
|
|
|
|
|
|
1. 启动`math-game`
|
|
|
|
|
|
```sh
|
|
|
$ docker run --name math-game -it hengyunabc/arthas:latest /bin/sh -c "java -jar /opt/arthas/math-game.jar"
|
|
|
```
|
|
|
|
|
|
1. 启动`arthas-boot`来进行诊断
|
|
|
|
|
|
```sh
|
|
|
$ docker exec -it math-game /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"
|
|
|
* [1]: 9 jar
|
|
|
|
|
|
[INFO] arthas home: /opt/arthas
|
|
|
[INFO] Try to attach process 9
|
|
|
[INFO] Attach process 9 success.
|
|
|
[INFO] arthas-client connect 127.0.0.1 3658
|
|
|
,---. ,------. ,--------.,--. ,--. ,---. ,---.
|
|
|
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
|
|
|
| .-. || '--'.' | | | .--. || .-. |`. `-.
|
|
|
| | | || |\ \ | | | | | || | | |.-' |
|
|
|
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
|
|
|
|
|
|
|
|
|
wiki: https://arthas.aliyun.com/doc
|
|
|
version: 3.0.5
|
|
|
pid: 9
|
|
|
time: 2018-12-18 11:30:36
|
|
|
```
|
|
|
|
|
|
## 诊断 Docker 里的 Java 进程
|
|
|
|
|
|
```sh
|
|
|
docker exec -it ${containerId} /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
|
|
|
```
|
|
|
|
|
|
## 诊断 k8s 里容器里的 Java 进程
|
|
|
|
|
|
```sh
|
|
|
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 镜像里。
|
|
|
|
|
|
```
|
|
|
FROM openjdk:8-jdk-alpine
|
|
|
|
|
|
# copy arthas
|
|
|
COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas
|
|
|
```
|
|
|
|
|
|
如果想指定版本,可以查看具体的 tags:
|
|
|
|
|
|
[https://hub.docker.com/r/hengyunabc/arthas/tags](https://hub.docker.com/r/hengyunabc/arthas/tags)
|