当前位置:   article > 正文

spring boot微服务项目打包、部署(docker)_springboot docker打包

springboot docker打包

自己学习使用,记录一下

1.项目结构

1.父项目创建

直接创建maven项目作为父工程,创建完成后,删除src(父项目只维护子项目)

2.新建子项目

右键父项目,new一个Module并选择

选择spring,并根据需求选择对应sdk和对应版本依赖

项目结构如下(根据自己业委需求调整)

2.项目打包

1.pom文件

    父pom文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>demo01</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <packaging>pom</packaging>
  10. <properties>
  11. <java.version>1.8</java.version>
  12. <spring-cloud.version>2021.0.6</spring-cloud.version>
  13. </properties>
  14. <!--管理子项目 -->
  15. <modules>
  16. <module>common</module>
  17. <module>demo</module>
  18. <module>mini</module>
  19. <module>gateway</module>
  20. <module>web</module>
  21. </modules>
  22. <build>
  23. <plugins>
  24. <plugin>
  25. <!--限制java版本 -->
  26. <groupId>org.apache.maven.plugins</groupId>
  27. <artifactId>maven-compiler-plugin</artifactId>
  28. <version>3.1</version>
  29. <configuration>
  30. <source>${java.version}</source>
  31. <target>${java.version}</target>
  32. </configuration>
  33. </plugin>
  34. <plugin>
  35. <groupId>org.apache.maven.plugins</groupId>
  36. <artifactId>maven-surefire-plugin</artifactId>
  37. <version>3.1.0</version>
  38. <configuration>
  39. <skipTests>true</skipTests> <!--默认关掉单元测试 -->
  40. </configuration>
  41. </plugin>
  42. </plugins>
  43. </build>
  44. </project>

子项目

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <version>3.1</version>
  7. <configuration>
  8. <source>${java.version}</source>
  9. <target>${java.version}</target>
  10. </configuration>
  11. </plugin>
  12. <plugin>
  13. <groupId>org.apache.maven.plugins</groupId>
  14. <artifactId>maven-surefire-plugin</artifactId>
  15. <version>3.1.0</version>
  16. <configuration>
  17. <skipTests>true</skipTests> <!--默认关掉单元测试 -->
  18. </configuration>
  19. </plugin>
  20. <plugin>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-maven-plugin</artifactId>
  23. <configuration>
  24. <!-- 指定该Main Class为全局的唯一入口 -->
  25. <mainClass>com.hhlc.webservice.WebServiceApplication
  26. </mainClass>
  27. <layout>JAR</layout>
  28. </configuration>
  29. <executions>
  30. <execution>
  31. <goals>
  32. <!--可以把依赖的包都打包到生成的Jar包中-->
  33. <goal>repackage</goal>
  34. </goals>
  35. </execution>
  36. </executions>
  37. </plugin>
  38. </plugins>
  39. </build>

注意:作为资源文件(实体,工具类等)的子项目不能引人该打包插件,否则会导致其他依赖于该maven的模块报错找不到依赖。资源文件不需要打包,在其他模块打包的时候,使用该插件会自动将对应依赖的jar打包到依赖它的可执行jar包中,阔以使用压缩工具打开jar包检测所有依赖是否都已经成功打包。

  1. <plugin>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-maven-plugin</artifactId>
  4. </plugin>

 2.打包

因为父项目管理了子项目,只需要在父项目先clean,再package进行打包,控制台会打印打包详细信息。

打包完成后,对应模块的jar包会放在target下

3.上传服务器

 自行安装docker、docker-compose(这里不做演示)

1.上传jar包(资源文件除外)

将所有jar包上传到服务器(可使用Xshell、Xftp等工具),并每个jar包单独对应一个文件夹

2.编写Dockerfile

编写Dockerfile 用于构建docker镜像,gateway-0.0.1-SNAPSHOT.jar为原jar包名,/app/gateway.jar、CMD ["gateway.jar"]为复制到容器后jar包名,请自行修改。

  1. # 基础镜像
  2. FROM openjdk:8
  3. # 创建容器默认进入的目录
  4. WORKDIR /app
  5. # 复制jar包到容器中
  6. COPY gateway-0.0.1-SNAPSHOT.jar /app/gateway.jar
  7. # 暴露端口 应该保持和源代码端口一致
  8. EXPOSE 8000
  9. # 启动命令
  10. ENTRYPOINT ["java","-jar","-Xms100m","-Xmx100m"]
  11. CMD ["gateway.jar"]

注意:Dockerfile应该与对应jar包存放在同一文件夹。每个jar包对应有一个自己的Dockerfile。

3.创建镜像(linux)

两种方式:第一种是通过路径直接创建,第二种是必须位于存放jar包和dockerfile文件的文件路径下执行,并可定义标签。

  1. docker build -t 自定义镜像名 jar包和dockerfile所在路径
  2. 示例:docker build -t web /opt/test/web
  1. docker build -t 自定义镜像名字:标签名 .
  2. 示例:docker build -t web:1.0 .

创建完成通过docker images指令检测镜像是否构建完成,依次创建所有镜像。

docker images

  

4.编写docker-compose.yaml文件(基于docker-compose)

 在模块文件夹同层创建docker-compose.yaml文件

编写 docker-compose.yaml文件

  1. version: "3.8"
  2. networks:
  3. # 自定义docker网络名
  4. test:
  5. services:
  6. # 定义服务名字,只要不冲突即可
  7. gateway:
  8. # 镜像名字或者id
  9. image: gateway
  10. # 自定义容器名字
  11. container_name: gateway
  12. # 映射端口
  13. ports:
  14. - "8000:8000"
  15. # 网络
  16. networks:
  17. - test
  18. #挂载资源
  19. volumes:
  20. #挂载系统盘指定位置用于记录日志
  21. - /opt/demo/gateway/logs :/app/logs
  22. #挂载系统时区防止docker时区与宿主机不匹配 ro为只读模式防止docker修改系统时间
  23. - /etc/localtime:/etc/localtime:ro
  24. - /etc/timezone:/etc/timezone:ro
  25. center:
  26. image: center
  27. container_name: center
  28. ports:
  29. - "8760:8760"
  30. networks:
  31. - test
  32. volumes:
  33. - /opt/demo/center/logs :/app/logs
  34. - /etc/localtime:/etc/localtime:ro
  35. - /etc/timezone:/etc/timezone:ro
  36. mini:
  37. image: mini
  38. container_name: mini
  39. ports:
  40. - "8104:8104"
  41. networks:
  42. - test
  43. volumes:
  44. - /opt/demo/mini/logs :/app/logs
  45. - /etc/localtime:/etc/localtime:ro
  46. - /etc/timezone:/etc/timezone:ro
  47. web:
  48. image: web
  49. container_name: web
  50. ports:
  51. - "8106:8106"
  52. networks:
  53. - test
  54. volumes:
  55. - /opt/demo/web/logs :/app/logs
  56. - /etc/localtime:/etc/localtime:ro
  57. - /etc/timezone:/etc/timezone:ro

4.部署

在部署前进行检测docker-compose.yaml是否有错误,如果没有输出,则表示没有错误

docker-compose config -q

部署

docker-compose up

部署开始后会自动进入日志控制台,可以使用ctrl+z退出日志控制台而不会终止进程(ctrl+c会直接关闭所有进程),然后使用docker logs 容器名或id 查看对应容器启动情况

  1. docker logs 容器名或id
  2. 示例:docker logs web

部署完成

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号