使用Idea Docker插件 部署SpringBoot项目 到 Docker 容器

让人想犯罪 __ 提交于 2019-12-07 02:51:55

引用:

https://www.cnblogs.com/hsz-csy/p/9488469.html

Intellij IDEA快速实现Docker镜像部署

idea2018 如何将springboot项目打包成只有一个jar包!(应该也适用于其它的maven创建的项目)

Centos 系统安装 Docker 软件教程在这里暂且忽略;

需要先做的是开放我们Centos 中 Docker的远程连接功能,操作过程如下

方法一:
#编辑Docker配置文件
vim /usr/lib/systemd/system/docker.service
#注释ExecStart这行
#加上新行
ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

#重新加载配置文件
systemctl daemon-reload    
#重启服务
systemctl restart docker.service 
#查看端口是否开启
netstat -nlpt
#直接curl看是否生效
curl http://127.0.0.1:2375/info

方法二:
vim /etc/sysconfig/docker
#重新加载配置文件,重启docker
systemctl daemon-reload
systemctl start docker

#自己只用过方法一!!!

#查看进程
netstat -tulp
#PS:Centos7没有netstat,所以要先下载。
yum install net-tools
#防火墙开放2375端口号
firewall-cmd --zone=public --add-port=2375/tcp --permanent
#重启防火墙
firewall-cmd --reload

接下来操作Idea这边,为了方便易懂,直接截图操作~

File-->Setting-->Plugins-->Browse Repositories--> 搜索Docker-->安装重启

然后连接我们在Centos 中安装的Docker ,File-->Setting-->按下图操作

操作成功后会在下面的窗口栏中出现Docker的窗口,到此远程连接Docker成功,如下图:

接下来我们开始部署项目:

首先在项目根目录(与src||target同级,)创建DockerFile 文件,简单如下:

FROM java
#指定作者信息
MAINTAINER chyf
#数据卷信息
VOLUME /tmp
#添加jar包到镜像中,Copy Add 指令采用的是相对路径,也是将DockerFile建立在根路径的原因
出现问题:

#Error: ResponseItem.ErrorDetail[code=<null>,message=COPY failed: stat /var/lib/docker/tmp/docker-builder022003770/target/litemall-all-0.1.0-exec.jar: no such file or directory]
Failed to deploy 'mall-api Dockerfile: litemall-all/DockerFile': COPY failed: stat /var/lib/docker/tmp/docker-builder022003770/target/litemall-all-0.1.0-exec.jar: no such file or directory


COPY ./target/litemall-all-0.1.0.jar mall-all.jar
启动jar
RUN sh -c 'touch mall-all.jar'
ENV JAVA_OPTS=""
#暴露容器端口
EXPOSE 8080
#ENTRYPOINT 为容器启动后执行的命令
ENTRYPOINT ["java","-jar","mall-all.jar"]

配置Idea 启动配置

启动:

镜像生成完毕、容器也启动了,但是点击控制台的Log,发现【no main manifest attribute, in mall-all.jar】的异常,将

COPY ./target/litemall-all-0.1.0.jar mall-all.jar
换成
COPY ./target/litemall-all-0.1.0-exec.jar mall-all.jar

也会报错,信息大概是找不到主入口启动类,分析错误原因,找了许多的blog看,大概是因为在pom文件中配置做了如下配置:

           <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration><!--指定该Main Class为全局的唯一入口-->
                    <mainClass>org.linlinjava.litemall.Application</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                    </execution>
                </executions>
            </plugin>

在写blog的过程中,已经不报错了,所以现在认为这种配置没有问题,有问题的根本症结可能是配置了maven打包将xxx.jar 和 xxx-exec.jar 分开打包的原因吧!现在我把如上代码在pom中去掉依然可以运行,那就直接去掉吧!咱也不知道干嘛用的。

问题:

在自己操作过程中,通过maven install 操作打成的jar包,包含 xxx.jar 和 xxx.exec.jar,经过测试发现这两个jar都不能启动,百思不得其解,maven自己玩的也不深,自己觉得可以通过maven-compile-plugin 来解决,来配置打包过程中文件的输出路径!这个暂且放在这里,后面在研究!

这里通过另一种方法,且行得通!如图操作!

以上操作之后会在src/main/java 文件夹中生成一个文件,如下图:

 

 

到这里Idea 远程连接Docker就结束了,下一章进行 运用持续集成工具 Jenkins 部署项目到 Docker 容器中。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!