自己学习使用,记录一下
1.项目结构
1.父项目创建
直接创建maven项目作为父工程,创建完成后,删除src(父项目只维护子项目)
2.新建子项目
右键父项目,new一个Module并选择
选择spring,并根据需求选择对应sdk和对应版本依赖
项目结构如下(根据自己业委需求调整)
2.项目打包
1.pom文件
父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>
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包名,请自行修改。
# 基础镜像
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。
3.创建镜像(linux)
两种方式:第一种是通过路径直接创建,第二种是必须位于存放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
4.编写docker-compose.yaml文件(基于docker-compose)
在模块文件夹同层创建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
4.部署
在部署前进行检测docker-compose.yaml是否有错误,如果没有输出,则表示没有错误
docker-compose config -q
部署
docker-compose up
部署开始后会自动进入日志控制台,可以使用ctrl+z退出日志控制台而不会终止进程(ctrl+c会直接关闭所有进程),然后使用docker logs 容器名或id 查看对应容器启动情况
docker logs 容器名或id
示例:docker logs web
部署完成