在本地进行:
这种打包方式只需要jar包就可以了,添加maven打包插件,能打包成jar包的插件很多,这里简单介绍几个。
spring-boot-maven-pluginmaven-compiler-pluginorg.springframework.boot spring-boot-maven-plugintrue
编译Java源码,一般只需设置编译的jdk版本
org.apache.maven.plugins maven-compiler-plugin3.6.0 1.8 1.8
除了在这里设置还可以在 properties设置jdk版本,例如:
maven-dependency-pluginUTF-8 1.8 1.8
用于复制依赖的jar包到指定的文件夹里
maven-jar-pluginorg.apache.maven.plugins maven-dependency-plugin2.10 copy-dependencies package copy-dependencies ${project.build.directory}/lib
打成jar时,设定manifest的参数,比如指定运行的Main class,还有依赖的jar包,加入classpath中
maven-antrun-pluginorg.apache.maven.plugins maven-jar-plugin2.4 true /data/lib com.zhang.spring.App
在maven中运行Ant任务,比如在打包阶段,对文件进行复制
wagon-maven-pluginorg.apache.maven.plugins maven-antrun-plugin1.7 package run
用于一键部署,把本地打包的jar文件,上传到远程服务器上,并执行服务器上的shell命令
org.codehaus.mojo wagon-maven-plugin1.0 crawler target *.jar,*.properties,*.sh sftp://59.110.162.178/home/zhangxianhe chmod 755 /home/zhangxianhe/update.sh /home/zhangxianhe/update.sh true
我们使用跳过测试的打包命令
mvn clean install -Dmaven.test.skip=true
无论用哪种打包方式我们需要一个jar包就行了
将jar包上传到linux的一个文件夹下
我这里上传了三个,主要就是编写dockerfile文件,不需要任何扩展名哈,文件内容如下
FROM java:8 # 把jar包添加到镜像中,hxzn-fast.jar就是你上传的jar包名称 ADD hxzn-fast.jar /app.jar # 镜像暴露的端口 EXPOSE 8080 RUN bash -c 'touch /app.jar' # 容器启动命令 ENTRYPOINT ["java","-jar","/app.jar"] # 设置时区 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
以上是举个例子,首先注意两点,别忘了暴露端口号,dockerfile和你上传的jar包在同一目录下。运行命令
docker build -t hxzn-fast:v1.0 .
注意别忘了后面的 . 这个.就是代表着在当前目录查找dockerfile文件,如果没有 . 那你就需要指定dockerfile所在的文件路径也行,不然会报错文件路径找不到,成功后即可用docker images查看打包的镜像。
之后运行镜像
docker run -d -p 8080:8080 3a06e920d5bf #镜像id
成功后查看镜像运行状态
docker ps
docker logs -f 211befd8cbcf #容器id
展示一下成功和报错的
成功的
报错的
这里报错就是java的报错了,nacos地址不对,你检查一下自己的jar包,重新上传再打包成镜像就行了
但是呢,在实际的部署中这种方式不是最好的,其实这里一个分布式项目的模块才几十兆,最大140m而已打包成镜像却大了几倍
这里大小的差距很大了,普通的jar包是把依赖maven也打包进去了,构成镜像的时候再构建依赖就非常大了,实际上企业部署还是k8s+kubeshpere的CI/CD部署,搭建起来后部署就会特别简单。这里只是简单的docker镜像部署。



