intellij使用docker调试进阶

背景

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
    22
    version: "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文件

pic

修改配置如下:
pic
修改compose file位置为第一步骤创建的文件路径

创建容器

点击运行或者调试触发容器的创建,可以看到容器出现在docker deamon中
img

img

创建远程调试以及调试

参考intellij使用docker调试中的步骤5和6。

进阶1: 集成镜像生成到docker compose中

达到这个目的,需要修改两个地方。

  1. 修改docker compose文件内容将image修改成build,修改内容如下
    1
    2
    3
    4
    5
    6
    services:
    app2:
    build:
    context: ./
    dockerfile: DockerFile
    # image: dockerci2_app2:latest

这里需要指定context路径,就跟docker file配置一致,指定Dockerfile文件内容也就是生成镜像的文件

  1. 修改docker compose的配置
    勾选--build, force build image

img

再次执行就可以每次重新生成镜像了

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

img

进阶2: 每次容器运行是基于最新代码编译包

做到这个效果,需要maven或者其他编译器支持,处理步骤如下

  1. 创建package的编译项
    右键选择maven的package,选择Create Dockerci2 [package]

  2. 修改docker compose的配置
    在before launch里增加刚才添加的maven打包项

img

再次执行就可以每次基于最新代码生成镜像了

进阶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也行,这个看后面时间再处理,不过可以通过

原创技术分享,您的支持将鼓励我继续创作