idea连接docker进行服务运行

前言

除了 IDEA,其他 IntelliJ-based 的 IDE 也支持。

运用场景:

  1. 本地环境不满足项目运行要求,但是 Docker 环境可以运行

  2. 项目运行方式比较特殊,无法直接运行(例如:依赖基础镜像)

  3. 本地 Windows 环境不明原因运行项目特别慢,但是以此为宿主的虚拟机中不存在这个问题

  4. 很多项目,不明原因(其实有些影响因素不便于深入研究),在宿主机启动耗时是虚拟机的很多倍。

实践

(本地环境可忽略)通过 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 相当于宿主裸奔。在内网环境安全问题可控,但是外网必须做好安全措施。

具体请参考官方文档:

在 IDEA 中配置 Docker 运行环境

IntelliJ-based 的 IDE 内置了 Docker 插件,方便操作 Docker。

打开 Settings,依次进入 Build, Execution, Deployment -> Docker

  1. 如果本地环境就有 Docker 的话,可以直接通过 Unix socket 连接。

  2. Docker Desktop for Windows 也可以使用该方式。

  3. 使用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:

然后就可以选择自己想添加进来的类型了:

项目运行配置(以 Java 项目为例)

准备好 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
配置远程 Debug(未测试,2023.1.3版本没有该选项)

Remote

复制那一串命令行参数备用。

New Remote

构建镜像前自动编译代码

一个 SpringBoot 项目要打 Docker 镜像,需要先打包 SpringBoot Jar。使用 IDEA 直接运行项目可能是基于 Classpath 运行的,这时候项目没有 jar 包,所以要先 build 项目。

保存一个 Gradle build 的 Configuration。 可以勾上右上角的 Store as project file,就没那么容易丢配置了。

Gradle build

用刚才写的 Dockerfile 文件创建一个 Docker Configuration,配置一下参数:
  • Image tag:镜像名称

  • Container name:容器名称

  • Bind ports:至少要暴露远程 Debug 的端口

  • Environment variables:将刚才复制的远程 Debug 的参数贴进去

  • Before launch:构建 Docker 镜像前执行下 Gradle build

Dockerfile

底下的 Before launch 添加刚才保存的 Maven build。

Before launch

之后,点击运行 Dockerfile,会自动先执行 Maven build。

切换到 Docker 中对应容器的 Log Tab,可以看到日志:

Container

然后就可以运行 Remote Debug 了。(日志只能到 Docker 的容器 Tab 去看)(在2023.1.3版本中并没有该配置,未测试)

Run Debug

(可选)调整 Maven 配置减少 build 耗时

注意

每次打包运行的时候要注意缓存问题

经实践,每次指定dockerfile文件的时候文件数量都会增加,

清理项目缓存后该数目变为和初始数目差不多的文件数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算了吧,你不配

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值