在 IntelliJ IDEA 中,可以通过配置 Docker 容器作为运行环境,使得点击运行时直接让 Java 应用程序在 Docker 容器中运行。
1. 安装 Docker 支持插件
确保已安装 IntelliJ IDEA 的 Docker 插件:
- 打开 IntelliJ IDEA。
- 进入
File
->Settings
->Plugins
。 - 搜索
Docker
,安装并启用插件。
2. 配置 Docker 连接
- 打开
File
->Settings
->Build, Execution, Deployment
->Docker
。 - 点击
+
添加 Docker 连接。 - 选择
Docker for Windows
、Docker for Mac
或TCP socket
(根据你的操作系统选择)。 - 测试连接,确保 IDEA 能够连接到 Docker。
Windows系统
在 Docker for Windows 中,Default
和 Desktop-Linux
是两个不同的后端选项,它们的区别主要在于底层技术实现和适用场景。
1. Default(默认模式)
- 底层技术:使用 Windows 原生的容器技术(Windows Containers)。
- 适用场景:
- 运行基于 Windows 的容器(例如
.NET Framework
应用程序)。 - 需要与 Windows 系统深度集成的场景。
- 运行基于 Windows 的容器(例如
- 特点:
- 容器镜像基于 Windows 系统(如
mcr.microsoft.com/windows
)。 - 容器与宿主机共享 Windows 内核。
- 不支持运行 Linux 容器。
- 容器镜像基于 Windows 系统(如
- 性能:
- 在 Windows 上运行 Windows 容器性能较好。
- 但 Windows 容器镜像通常较大,启动较慢。
2. Desktop-Linux(Linux 容器模式)
- 底层技术:使用 Linux 容器技术,通过 Hyper-V 虚拟机运行一个轻量级的 Linux 内核。
- 适用场景:
- 运行基于 Linux 的容器(例如 Java、Python、Node.js 等应用程序)。
- 大多数开源软件和工具都是为 Linux 容器设计的。
- 特点:
- 容器镜像基于 Linux 系统(如
alpine
、ubuntu
、openjdk
等)。 - 容器与宿主机共享 Linux 内核(运行在虚拟机中)。
- 支持运行 Linux 容器,但不支持 Windows 容器。
- 容器镜像基于 Linux 系统(如
- 性能:
- 在 Windows 上运行 Linux 容器性能较好。
- Linux 容器镜像通常较小,启动较快。
3. 如何选择?
- 选择
Desktop-Linux
的情况:- 你的应用程序是基于 Linux 的(例如 Java、Python、Node.js 等)。
- 你使用的 Docker 镜像是基于 Linux 的(例如
openjdk:11
、nginx:alpine
等)。 - 你需要与大多数开源工具和生态系统兼容。
- 选择
Default
的情况:- 你的应用程序是基于 Windows 的(例如
.NET Framework
)。 - 你使用的 Docker 镜像是基于 Windows 的(例如
mcr.microsoft.com/windows
)。 - 你需要与 Windows 系统深度集成。
- 你的应用程序是基于 Windows 的(例如
4. Java 开发推荐选择
对于 Java 开发,推荐选择 Desktop-Linux
,因为:
- Java 应用程序通常运行在 Linux 环境中。
- 大多数 Java 相关的 Docker 镜像(如
openjdk
、tomcat
)都是基于 Linux 的。 - Linux 容器镜像更轻量,启动更快,资源占用更少。
3. 创建 Dockerfile
在项目根目录下创建一个 Dockerfile
,用于定义运行环境。例如:
# 使用官方 Java 镜像
FROM openjdk:11-jre-slim
# 设置工作目录
WORKDIR /app
# 复制编译后的 JAR 文件到容器
COPY target/myapp.jar /app/myapp.jar
# 暴露端口
EXPOSE 8080
# 启动应用
CMD ["java", "-jar", "myapp.jar"]
4. 配置 Docker 运行环境
- 打开
Run/Debug Configurations
:- 点击右上角的运行配置下拉菜单,选择
Edit Configurations
。
- 点击右上角的运行配置下拉菜单,选择
- 添加一个新的 Docker 配置:
- 点击
+
,选择Docker
->Dockerfile
。
- 点击
- 配置 Docker 运行参数:
- Dockerfile:选择项目中的
Dockerfile
。 - Image tag:为镜像设置一个标签(例如
myapp:latest
)。 - Container name:容器名称
- Bind ports:映射容器端口到主机端口(例如
8080:8080
)。 - Bind mounts:映射的目录
- Run options:执行的命令
- Dockerfile:选择项目中的
- 保存配置。
5. 运行项目
- 选择刚刚创建的 Docker 运行配置。
- 点击运行按钮(绿色三角形),IntelliJ IDEA 会自动构建 Docker 镜像并启动容器。
- 查看运行日志,确认应用是否成功启动。
6. 可选配置
1. 配置程序Docker网络
程序运行在Docker中,如果需要使用其他服务,比如mysql、redis等,可以用IP访问,但是IP可能会变,这样就需要频繁改IP,非常麻烦,如果想直接使用 容器名称+端口
的方式访问,就需要将多个容器设置为同一个网络。
创建网络
docker network create my_network
配置Java程序容器网络
- 打开
Run/Debug Configurations
:- 点击右上角的运行配置下拉菜单,选择
Edit Configurations
。
- 点击右上角的运行配置下拉菜单,选择
- 选择一个要使用的Docker 配置:
- 配置 Docker 运行命令:
- Run options:执行的命令
配置内容为:
--network my_network
这样就可以在Java程序中,使用其他服务的容器名称访问服务了。
2. Docker服务配置自动打包
按照上面的配置,重新运行Java服务是不会更新代码的,需要手动打包后才可以,所以可以配置 Before Launch
在启动前自动构建打包
这样就可以点击重启服务时,自动根据最新代码构建了。
3. 调试项目(Debug)
正常配置完,是没有办法像运行在本地那样子进行Debug调试的,需要单独进行配置。
配置步骤如下:
- 打开
Run/Debug Configurations
:- 点击右上角的运行配置下拉菜单,选择
Edit Configurations
。
- 点击右上角的运行配置下拉菜单,选择
- 添加一个
Remote JVM Debug
配置: - 配置 Before launch:
- 选择前面配置的Docker服务
- 保存配置
-
Docker服务将
5005端口
映射出来,并保存配置 -
Dockerfile文件的
java
命令增加如下配置
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
然后在这里点击这个按钮就可以Debug方式运行程序了。
总结
通过以上步骤,你可以在 IntelliJ IDEA 中直接点击运行按钮,将 Java 应用程序运行在 Docker 容器中。这种方式非常适合开发和测试阶段,能够保持环境一致性。
评论区