除了 IDEA,其他 IntelliJ-based 的 IDE 也支持。
运用场景:
本地环境不满足项目运行要求,但是 Docker 环境可以运行
项目运行方式比较特殊,无法直接运行(例如:依赖基础镜像)
本地 Windows 环境不明原因运行项目特别慢,但是以此为宿主的虚拟机中不存在这个问题
很多项目,不明原因(其实有些影响因素不便于深入研究),在宿主机启动耗时是虚拟机的很多倍。
(本地环境可忽略)通过 TCP 暴露 Docker API 以 Ubuntu Server 为例:
编辑文件 /lib/systemd/system/docker.service
//找到 ExecStart 部分,原有内容:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
在结尾添加 -H tcp://0.0.0.0:2375
,代表通过 TCP 2375 端口暴露 Docker API,修改后内容:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
需要重启服务:
#重新加载配置文件: sudo systemctl daemon-reload #重启docker: sudo systemctl restart docker
除非你愿意把机器借给别人挖矿,外网环境暴露 API 必须进行安全配置
默认情况下,Docker 可以挂载任何目录,不做任何安全措施直接暴露 API 相当于宿主裸奔。在内网环境安全问题可控,但是外网必须做好安全措施。
具体请参考官方文档:
Docker daemon attack surface
Protect the Docker daemon socket
IntelliJ-based 的 IDE 内置了 Docker 插件,方便操作 Docker。
打开 Settings
,依次进入 Build, Execution, Deployment
-> Docker
如果本地环境就有 Docker 的话,可以直接通过 Unix socket 连接。
Docker Desktop for Windows 也可以使用该方式。
使用wsl也可以选择wsl连接
如果 Docker 在外部通过 TCP 暴露 API,则配置 TCP socket
创建后,可以在 Services 面板管理 Docker
找不到 Services 面板? 可以通过 Ctrl + Shift + A 或双击 Shift 打开 Actions 搜索。每个人的快捷键可能不同。
Services 中集成更多 Configurations Services 中没有 Maven,运行 Maven package时会开一个新的 Tab。 如何把 Maven或其他类型也集成到 Services 中?
点一下加号,选择 Run Configuration Type:
然后就可以选择自己想添加进来的类型了:
准备好 Dockerfile
FROM registry.cn-beijing.aliyuncs.com/happygene-backend/openjdk-jre ADD target/ThreeDimensional-1.0-SNAPSHOT.jar app.jar CMD java -jar app.jar --spring.profiles.active=test
复制那一串命令行参数备用。
一个 SpringBoot 项目要打 Docker 镜像,需要先打包 SpringBoot Jar。使用 IDEA 直接运行项目可能是基于 Classpath 运行的,这时候项目没有 jar 包,所以要先 build 项目。
保存一个 Gradle build 的 Configuration。 可以勾上右上角的 Store as project file,就没那么容易丢配置了。
Image tag:镜像名称
Container name:容器名称
Bind ports:至少要暴露远程 Debug 的端口
Environment variables:将刚才复制的远程 Debug 的参数贴进去
Before launch:构建 Docker 镜像前执行下 Gradle build
底下的 Before launch 添加刚才保存的 Maven build。
之后,点击运行 Dockerfile,会自动先执行 Maven build。
切换到 Docker 中对应容器的 Log Tab,可以看到日志:
然后就可以运行 Remote Debug 了。(日志只能到 Docker 的容器 Tab 去看)(在2023.1.3版本中并没有该配置,未测试)
(可选)调整 Maven 配置减少 build 耗时
每次打包运行的时候要注意缓存问题
经实践,每次指定dockerfile文件的时候文件数量都会增加,
清理项目缓存后该数目变为和初始数目差不多的文件数量