使用IDEA一键部署服务至Docker

2,065 阅读3分钟

    作者君前排的小姐姐今天向我抱怨,周末在家学习微服务时IDEA启多个服务卡顿,直接令她无法愉快的玩耍,问我有没有什么好的解决方案。为了小姐姐的好心情,那必须得有啊。想到当前容器化大行其道,是不是可以借一把东风,来解放IDEA的生产力。一番操弄之下,发现IDEA结合Docker真能玩出花。

Docker安装

    虚拟机Docker安装网上的教程不要太多,如何在众多的答案中选一份最优解了,那我肯定首推官网。Docker的官方文档写的还是不错的。Docker的安装主要分为两步:

  1. 安装docker应用
  2. 配置国内的镜像加速(阿里)

1.1 Docker应用安装

下面分别是 Win,Linux,Mac的安装教程链接

Windows(推荐使用DockeDesktop)

Mac(推荐使用DockeDeskto)

Linux (别无选择DockerEngine)

1.2 阿里镜像加速

进入阿里云开发者社区,登录后直接搜素阿里镜像加速,按照文档操作即可

阿里云镜像加速

IDEA配置

    作为当前Java开发最流行的idea,功能强大插件丰富。要打通IDEA和Docker大致需要做两步工作:

  1. 开放Docker的2375端口的监听
  2. 安装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连接

image.png

    配置后当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"]

打包项目:

image.png 点击此处即可编译项目,并可观察到maven为我们打包并制作镜像:

image.png

下一步我们就可以在IDEA中进行项目部署啦:

image.png     此处是IDEA的service面板,Docker下的master是之前配置的链接,Container代表当前Docker正在运行的容器,Images代表当前Docker所有的镜像,meta-temp:latest就是我们刚刚打包所上传的镜像。那我们可以选中镜像右键会看到Create Container选项。

image.png     选择第一个话就是默认参数(使用在dockerfile中暴露的端口环境变量等)启动,如需自定义启动参数,就点击Create选项可以看到如下界面

image.png     需要指定参数就点击Modify options 添加端口映射和其他一些参数,配置好后点击Run即可。以一个简单的springboot应用启动为例:

image.png     成功启动后可以看到service面板Docker Container出现了刚启动容器

image.png     而且你可以点击侧上方的Log查看容器中的日志非常方便。讲到这里小姐姐也露出了欣慰的笑容