作者君前排的小姐姐今天向我抱怨,周末在家学习微服务时IDEA启多个服务卡顿,直接令她无法愉快的玩耍,问我有没有什么好的解决方案。为了小姐姐的好心情,那必须得有啊。想到当前容器化大行其道,是不是可以借一把东风,来解放IDEA的生产力。一番操弄之下,发现IDEA结合Docker真能玩出花。
Docker安装
虚拟机Docker安装网上的教程不要太多,如何在众多的答案中选一份最优解了,那我肯定首推官网。Docker的官方文档写的还是不错的。Docker的安装主要分为两步:
- 安装docker应用
- 配置国内的镜像加速(阿里)
1.1 Docker应用安装
下面分别是 Win,Linux,Mac的安装教程链接
Windows(推荐使用DockeDesktop)
Mac(推荐使用DockeDeskto)
Linux (别无选择DockerEngine)
1.2 阿里镜像加速
进入阿里云开发者社区,登录后直接搜素阿里镜像加速,按照文档操作即可
IDEA配置
作为当前Java开发最流行的idea,功能强大插件丰富。要打通IDEA和Docker大致需要做两步工作:
- 开放Docker的2375端口的监听
- 安装Dcoker插件(较新版本IDEA默认集成Docker),配置IDEA同Docker守护进程的通信
2.1 Docker开启2375
[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
在该行添加如下内容:(这里端口为2375,所以后面在idea中连接时也要填写该端口)
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
重新加载配置文件:
[root@localhost ~]# systemctl daemon-reload
重启docker:
[root@localhost ~]# systemctl restart docker
验证是否成功:
curl localhost:2375/info //如果可以正常响应json信息代表开启成功
2.2 IDEA中配置Docker链接
如图位置配置Docker连接
配置后当connecting变成successfully说明连接成功,此时我们对的IDEA就成功和Docker建立连接了。接下来我们就可以去配置项目以便打包部署至Docker了
Java项目配置
以SpringBoot项目为例,首先需要配置打包插件:
<plugins>
<plugin><!--springboot的打包插件-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin><!--制作docker镜像的maven插件-->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${project.artifactId}</imageName><!--镜像名-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<dockerDirectory>src/main/docker</dockerDirectory><!--Dockerfile所在的目录-->
<dockerHost>http://192.168.3.200:2375</dockerHost><!--docker所在的宿主机地址-->
<resources>
<resource><!--这里配置的就是打包后jar所在的位置-->
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
编写Dockerfile,以一个简单的Dockerfile为例:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD meta-temp-1.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
打包项目:
点击此处即可编译项目,并可观察到maven为我们打包并制作镜像:
下一步我们就可以在IDEA中进行项目部署啦:
此处是IDEA的service面板,Docker下的master是之前配置的链接,Container代表当前Docker正在运行的容器,Images代表当前Docker所有的镜像,meta-temp:latest就是我们刚刚打包所上传的镜像。那我们可以选中镜像右键会看到Create Container选项。
选择第一个话就是默认参数(使用在dockerfile中暴露的端口环境变量等)启动,如需自定义启动参数,就点击Create选项可以看到如下界面
需要指定参数就点击Modify options 添加端口映射和其他一些参数,配置好后点击Run即可。以一个简单的springboot应用启动为例:
成功启动后可以看到service面板Docker Container出现了刚启动容器
而且你可以点击侧上方的Log查看容器中的日志非常方便。讲到这里小姐姐也露出了欣慰的笑容