引用:
https://www.cnblogs.com/hsz-csy/p/9488469.html
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 容器中。
来源:oschina
链接:https://my.oschina.net/mclimber/blog/3138141