赞
踩
自己学习使用,记录一下
直接创建maven项目作为父工程,创建完成后,删除src(父项目只维护子项目)

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

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

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

父pom文件
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>org.example</groupId>
- <artifactId>demo01</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>pom</packaging>
-
- <properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>2021.0.6</spring-cloud.version>
- </properties>
- <!--管理子项目 -->
- <modules>
- <module>common</module>
- <module>demo</module>
- <module>mini</module>
- <module>gateway</module>
- <module>web</module>
- </modules>
- <build>
- <plugins>
- <plugin>
- <!--限制java版本 -->
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.1</version>
- <configuration>
- <source>${java.version}</source>
- <target>${java.version}</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>3.1.0</version>
- <configuration>
- <skipTests>true</skipTests> <!--默认关掉单元测试 -->
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>

子项目
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.1</version>
- <configuration>
- <source>${java.version}</source>
- <target>${java.version}</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>3.1.0</version>
- <configuration>
- <skipTests>true</skipTests> <!--默认关掉单元测试 -->
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <!-- 指定该Main Class为全局的唯一入口 -->
- <mainClass>com.hhlc.webservice.WebServiceApplication
- </mainClass>
- <layout>JAR</layout>
- </configuration>
- <executions>
- <execution>
- <goals>
- <!--可以把依赖的包都打包到生成的Jar包中-->
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>

注意:作为资源文件(实体,工具类等)的子项目不能引人该打包插件,否则会导致其他依赖于该maven的模块报错找不到依赖。资源文件不需要打包,在其他模块打包的时候,使用该插件会自动将对应依赖的jar打包到依赖它的可执行jar包中,阔以使用压缩工具打开jar包检测所有依赖是否都已经成功打包。
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
因为父项目管理了子项目,只需要在父项目先clean,再package进行打包,控制台会打印打包详细信息。

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

自行安装docker、docker-compose(这里不做演示)
将所有jar包上传到服务器(可使用Xshell、Xftp等工具),并每个jar包单独对应一个文件夹

编写Dockerfile 用于构建docker镜像,gateway-0.0.1-SNAPSHOT.jar为原jar包名,/app/gateway.jar、CMD ["gateway.jar"]为复制到容器后jar包名,请自行修改。
- # 基础镜像
- FROM openjdk:8
- # 创建容器默认进入的目录
- WORKDIR /app
- # 复制jar包到容器中
- COPY gateway-0.0.1-SNAPSHOT.jar /app/gateway.jar
- # 暴露端口 应该保持和源代码端口一致
- EXPOSE 8000
- # 启动命令
- ENTRYPOINT ["java","-jar","-Xms100m","-Xmx100m"]
- CMD ["gateway.jar"]
注意:Dockerfile应该与对应jar包存放在同一文件夹。每个jar包对应有一个自己的Dockerfile。

两种方式:第一种是通过路径直接创建,第二种是必须位于存放jar包和dockerfile文件的文件路径下执行,并可定义标签。
- docker build -t 自定义镜像名 jar包和dockerfile所在路径
-
- 示例:docker build -t web /opt/test/web
- docker build -t 自定义镜像名字:标签名 .
-
- 示例:docker build -t web:1.0 .
创建完成通过docker images指令检测镜像是否构建完成,依次创建所有镜像。
docker images

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

编写 docker-compose.yaml文件
- version: "3.8"
-
- networks:
- # 自定义docker网络名
- test:
-
- services:
- # 定义服务名字,只要不冲突即可
- gateway:
- # 镜像名字或者id
- image: gateway
- # 自定义容器名字
- container_name: gateway
- # 映射端口
- ports:
- - "8000:8000"
- # 网络
- networks:
- - test
- #挂载资源
- volumes:
- #挂载系统盘指定位置用于记录日志
- - /opt/demo/gateway/logs :/app/logs
- #挂载系统时区防止docker时区与宿主机不匹配 ro为只读模式防止docker修改系统时间
- - /etc/localtime:/etc/localtime:ro
- - /etc/timezone:/etc/timezone:ro
- center:
- image: center
- container_name: center
- ports:
- - "8760:8760"
- networks:
- - test
- volumes:
- - /opt/demo/center/logs :/app/logs
- - /etc/localtime:/etc/localtime:ro
- - /etc/timezone:/etc/timezone:ro
- mini:
- image: mini
- container_name: mini
- ports:
- - "8104:8104"
- networks:
- - test
- volumes:
- - /opt/demo/mini/logs :/app/logs
- - /etc/localtime:/etc/localtime:ro
- - /etc/timezone:/etc/timezone:ro
- web:
- image: web
- container_name: web
- ports:
- - "8106:8106"
- networks:
- - test
- volumes:
- - /opt/demo/web/logs :/app/logs
- - /etc/localtime:/etc/localtime:ro
- - /etc/timezone:/etc/timezone:ro

在部署前进行检测docker-compose.yaml是否有错误,如果没有输出,则表示没有错误
docker-compose config -q
部署
docker-compose up
部署开始后会自动进入日志控制台,可以使用ctrl+z退出日志控制台而不会终止进程(ctrl+c会直接关闭所有进程),然后使用docker logs 容器名或id 查看对应容器启动情况
- docker logs 容器名或id
-
- 示例:docker logs web
部署完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。