java Docker远程调试环境配置

java Docker远程调试环境配置

手把手教你搭建java动态调试环境

前置知识

  • docker
  • docker-compose.yml文件的编写.

创建目录

文件夹目录如下

  • docker-compose.yml
  • src
    • webapss (存放编译好的war包以及jar包
    • src (需要用到的资源
    • mysql (mysql配置文件
      • Dockerfile
      • data
        • init.sql (sql初始化文件
    • Dockerfile (tomcat的Dockerfile
    • lib (tomcat需要的依赖

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
version: '2'
services:
tomcat:
build: ./src
restart: always
environment:
- JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=12345
ports:
- "83:8080"
- "12345:12345"
user: root
volumes:
- ./src/webapps:/usr/local/tomcat/webapps
networks:
extnetwork:
ipv4_address: 172.33.0.2
mysql:
build: ./src/mysql
restart: always
volumes:
- ./src/mysql/data:/docker-entrypoint-initdb.d
tty: true
environment:
MYSQL_ROOT_PASSWORD: root
command:
- "--general-log=1"
- "--general-log-file=/tmp/log.txt"
networks:
extnetwork:
ipv4_address: 172.33.0.3

networks:
extnetwork:
ipam:
config:
- subnet: 172.33.0.0/16
gateway: 172.33.0.1

这里熟悉docker-compose.yml的同学看这个肯定是没有问题的。
这里主要是讲一下

1
2
environment: 
- JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=12345

这个部分其实就是开启tomcat这个docker的远程调试选项。并且设置端口。那么这个肯定也不是要死记硬背的。只需要打开idea然后添加一个Configuration选择Remote然后根据下图复制好CommandLine即可
command line
然后讲一下mysql的部分

1
2
3
command:  
- "--general-log=1"
- "--general-log-file=/tmp/log.txt"

这其实就是开启mysql的日志,并且设置日志的输出位置。
其实还有很多类似的选项,比如设置字符编码…..
可以输入,以下命令即可得到完整的mysqldocker的相关配置。
docker run -it --rm mysql:5.7 --verbose --help > 1.txt

Tomcat DockerFile

1
2
3
4
5
6
7
8
9
10
from tomcat:8.5.57

# COPY webapps /usr/local/tomcat/webapps
# ADD lib/jstl-1.2.jar /usr/local/tomcat/lib
# 这里我把从官网下载好的jdk8u211放到了src中.
ADD src/jdk-8u211-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME=/usr/local/java/jdk1.8.0_211
ENV JAVA_VERSION=8u211
ENV PATH=$JAVA_HOME/bin:$PATH

这里我们选用的还是官方的镜像。我们可以直接去dockerhub中找到tomcat的官方Docker在官方Docker下面我们可以找到
tag
这里可以看到有许多的tag我们只需要选用自己想要的tomcat版本以及jdk版本即可。
但是其实这里面的jdk和生产环境的jdk也是有很大的差别的。所以我的建议还是,使用自己从官网下载的jdk
比如在本地你可能是jdk8u211的环境.而Docker中的jdk8可能对应的是jdk8u256。如果使用Docker中自带的这个jdk可能会出现源码对不上的情况。

Mysql DockerFile

1
2
3
from mysql:5.7

COPY data /docker-entrypoint-initdb.d

没啥好说的,直接使用官网的Docker即可。这里仅仅是吧data/init.sql放到/docker-entrypoint-initdb.d中。这样子init.sql会在Docker启动的时候自动初始化init.sql

shiro反序列化

这里用shiro反序列化做一个演示。

下载源码&编译&部署

1
2
git clone https://github.com/apache/shiro.git shiro-root
cd shiro-root git checkout 1.2.0

这里就得到了shiro的源码,然后使用mvn package -DskipTests即可打包成war
这里有一个需要注意的,如果发现报500的错误并且报错内容为xxxxx cannot be resolved in either web.xml or the jar files deployed with this application则说明没有导入jstl-1.2.jar的jar包.
只需要把Tomcat Dockerfile中的ADD lib/jstl-1.2.jar /usr/local/tomcat/lib写入,然后把jstl放到Lib目录下即可。
部署好之后
shiro

IDEA设置远程调试

在Idea里面添加Configuration
添加配置信息

然后点击调试按钮就ok了。
已经连接上docker的调试端口
这里我直接在shrio依赖中下断点
触发断点

后记

博客好久没写了。慢慢捡起来。因为,本身我本人不喜欢在电脑中装太多(tomcat),所以我觉得这个方案是目前我所知道非常灵活的远程调试了。(要是什么是有tomcatStudy该多好.

# 推荐文章

评论


:D 一言句子获取中...

加载中,最新评论有1分钟延迟...