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

本文介绍了如何使用Maven管理Spring项目的子模块,包括创建父项目、添加子项目、配置POM文件,以及打包和部署到Docker中,包括编写Dockerfile、docker-compose.yaml文件和容器部署流程。
摘要由CSDN通过智能技术生成

自己学习使用,记录一下

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

部署完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值