背景
intellij idea作为java开发常用的ide,结合当前主流的虚拟化docker发布,如何结合两者进行调试开发是一个基本使用场景
环境配置
- macOS mojave
- Docker Desktop for mac
- IntelliJ IDEA 2019.1.2 (Ultimate Edition)
执行步骤
假设已经通过intellij使用docker调试来了解intell调试docker的基本配置,例如插件,docker deamon的配置安装,现在增加使用docker compose文件来配置负责的场景,例如需要拉起对应的db镜像或者服务,或者需要配置指定的网络指定的ip,虽然可以通过docker file中配置但是内容比较多,而且目前主流是用dockercompose来拉起服务,后面可以复用。创建镜像文件以及配置
参考intellij使用docker调试中的步骤4创建docker compose文件
在项目根目录创建docke compose文件,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22version: "3"
services:
app2:
image: dockerci2_app2:latest # 镜像名
restart: always
container_name: app2
hostname: app2
ports:
- "10000:10000"
- "10002:10002" # 暴露调试端口
networks: # 指定网络
hadoop_net:
ipv4_address: 172.16.0.21 # 指定ip
volumes:
- ~/bigdata/data/hdfsclient:/data # 挂载存储卷
- ~/bigdata/logs/hdfsclient:/logs
networks:
hadoop_net:
external:
name: hadoop_net
这里涉及了指定网络以及指定ip,主要为了搭建大数据网路,注意到这里镜像名是之前通过docker build指定的镜像名
创建docker compose配置
通过运行/调试配置增加docker compose 文件,如下图,在docker下选择docker-compose文件

修改配置如下:
修改compose file位置为第一步骤创建的文件路径
创建容器
点击运行或者调试触发容器的创建,可以看到容器出现在docker deamon中

创建远程调试以及调试
参考intellij使用docker调试中的步骤5和6。
进阶1: 集成镜像生成到docker compose中
达到这个目的,需要修改两个地方。
- 修改docker compose文件内容将image修改成build,修改内容如下
1
2
3
4
5
6services:
app2:
build:
context: ./
dockerfile: DockerFile
# image: dockerci2_app2:latest
这里需要指定context路径,就跟docker file配置一致,指定Dockerfile文件内容也就是生成镜像的文件
- 修改docker compose的配置
勾选--build, force build image

再次执行就可以每次重新生成镜像了
注意在配置项中设置了services的内容就会导致镜像不能重新生成,记得设置为空

进阶2: 每次容器运行是基于最新代码编译包
做到这个效果,需要maven或者其他编译器支持,处理步骤如下
创建package的编译项
右键选择maven的package,选择Create Dockerci2 [package]修改docker compose的配置
在before launch里增加刚才添加的maven打包项

再次执行就可以每次基于最新代码生成镜像了
进阶3: 一键实现打包、镜像生成、容器创建、远程调试
通过前面进阶1,2可以实现了一键实现打包、镜像生成、容器创建,但是要集成远程调试,还是不行,初步定位是容器起来后调试端口起来需要时间,但是intellij立即尝试进行调试端口链接,导致错误Cannot retrieve debug connection: Debug mode is not supported for 'Docker-compose: dockerci2' 即使通过睡眠或者wait-fot-it.sh也改变不了,因为intellij只要depoly成功就可以链接调试端口,而不是等待容器服务正常提供服务,还有修改suspend为y也行,这个看后面时间再处理,不过可以通过