Docker部署微服务遇到问题总结

1、执行通过maven的spring-boot-maven-plugin插件打包出的jar太大,需要对其进行瘦身分离出依赖的jar

   maven配置如下:

 1 <build>
 2         <finalName>${project.artifactId}</finalName>
 3         <plugins>
 4             <plugin>
 5                 <groupId>org.springframework.boot</groupId>
 6                 <artifactId>spring-boot-maven-plugin</artifactId>
 7                 <executions>
 8                     <execution>
 9                         <goals>
10                             <goal>repackage</goal>
11                         </goals>
12                     </execution>
13                 </executions>
14                 <configuration>
15                     <mainClass>com.permissions.third.PermissionsThirdApplication</mainClass>
16                     <layout>ZIP</layout>
              <!--将自己写的子模块的依赖打入jar中 --> 17 <includes> 18 <include> 19 <groupId>com.permissions</groupId> 20 <artifactId>permissions-common-datasource</artifactId> 21 </include> 22 <include> 23 <groupId>com.permissions</groupId> 24 <artifactId>permissions-common-log</artifactId> 25 </include> 26 <include> 27 <groupId>com.permissions</groupId> 28 <artifactId>permissions-common-swagger</artifactId> 29 </include> 30 </includes> 31 </configuration> 32 </plugin> 33 <!--拷贝依赖到jar外面的lib目录--> 34 <plugin> 35 <groupId>org.apache.maven.plugins</groupId> 36 <artifactId>maven-dependency-plugin</artifactId> 37 <executions> 38 <execution> 39 <id>copy-lib</id> 40 <phase>package</phase> 41 <goals> 42 <goal>copy-dependencies</goal> 43 </goals> 44 <configuration> 45 <outputDirectory>target/lib</outputDirectory> 46 <!--不重写lib 如果存在lib不处理--> 47 <overWriteIfNewer>false</overWriteIfNewer> 48 <includeScope>compile</includeScope> 49 </configuration> 50 </execution> 51 </executions> 52 </plugin> 53 </plugins> 54 </build>

2、每个模块生成的lib文件夹下的依赖jar不能放到一个文件夹下混在一起,必须要每个模块的docker容器分别挂载一个目录存放每个模块生成的lib

3、当需要docker在run之后执行制定shell脚本时,默认docker是没有执行shell的bash环境的,需要在Dockerfile中添加才行(Dockfile已做数据敏感处理仅做参考)

 1 FROM abc/jdk11:latest
 2 
 3 LABEL sub_sys_code=scdq le=某某某 clustersoft=deployment caas_user=abc
 4 VOLUME ["/home/lib"]
 5 # 饱和内存使用总量 = 最大堆内存大小(2048M) + 最大元空间大小(512M) + 最大直接内存大小(512M) = 3072M,生产部署值应为压测指标的1.5-2倍
 6 ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
 7     PINGAN_SLEEP=0 \
 8     TZ=Asia/Shanghai \
 9     JAVA_ARGS=" -Dloader.path=/home/lib -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -Dclient.encoding.override=UTF-8 -Duser.timezone=${TZ}" \
10     JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/scdq -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:MaxDirectMemorySize=512m -Xms2048m -Xmx2048m -Xmn256m -Xss256k -XX:SurvivorRatio=8"
11 WORKDIR /workspace/
12 ADD . .
13 
14 EXPOSE 9200
15 
16 RUN chmod 755 *.sh && chown -R 1000 *.sh
17 
18 ENTRYPOINT ["/bin/sh","./startup.sh"]

在上面的ENTRYPOINT 中加入"/bin/sh"

4、编写Dockerfile时注意精简版的jdk镜像会导致一些问题,比如验证码生成会因为jdk不全导致出现异常,所以实在不行建议FROM参数设置JDK时使用完整版jdk不要使用精简版

5、nginx配置转发时要注意location后的路径和proxy_pass后的路径,这两个路径最后都要注意保持斜杠/结尾,否则配置会不生效

Docker部署微服务遇到问题总结

 

上一篇:Linux定时任务


下一篇:shell脚本-循环