spring boot 项目打包镜像方式以及区分环境打包

简介: spring boot 项目打包镜像方式以及区分环境打包

springboot项目打包成docker镜像


方法一:将项目jar包手动推送到docker服务器上


1.用maven对项目进行打包,打包成功后会有一个target目录,目录下有打好的项目jar包




2.将jar包上传到服务器上,我用的是finalshell工具,大家可以自己根据自己使用的工具将文件传送到服务器上

3.在跟jar包同级目录下写Dockerfile文件

dockerfile文件具体内容

FROM openjdk:11  #基于哪些镜像进行构建
MAINTAINER gpj #作者名称
#
# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD demo-0.0.1-SNAPSHOT.jar /demo.jar
# 运行jar包
RUN bash -c 'touch demo.jar'
ENTRYPOINT ["java", "-jar", "demo.jar"]
# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# SpringBoot项目配置的端口号为9999,需要将9999暴露出去 
EXPOSE 9999
4.执行docker build命令
docker build -f Dockerfile -t demo:1.0 .


5.查看镜像


docker images

可以看到刚刚打包的镜像


6.运行容器
docker run -d --name dmeo -p 9999:9999 demo:1.0

查看容器是否在运行

docker ps

服务器开放9999端口


firewall-cmd --zone=public --add-port=9999/tcp --permanent
systemctl restart firewalld

调用后端方法


方法二:在idea中安装docker插件,通过插件部署


1.安装docker插件

进入项目,点击File->Settings->Plugins,docker插件是默认安装上的,可以先去Installed中查看是否已经安装

如果未安装可以点击Marketplace,在搜索框中搜索docker,点击Installed进行安装


2.打开docker远程访问

修改docker.service文件


Docker 安装成功之后,首先需要修改 Docker 配置来开启允许远程访问 Docker 的功能。


文件位置:/lib/systemd/system/docker.service


修改内容: 加入如下内容:

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"

服务器开放2375端口


/

firewall-cmd --zone=public --add-port=2375/tcp --permanent
systemctl restart firewalld

重启docker

systemctl daemon-reload
systemctl restart docker
3.在idea的docker插件中配置docker远程访问的地址

在idea项目中点击File->settings->Build->Docker


4.在项目根目录和pom文件同级的地方写Dockerfile文件

dockerfile文件的具体内容


FROM openjdk:11
MAINTAINER jyz
#
# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD demo-0.0.1-SNAPSHOT.jar /demo.jar
# 运行jar包
RUN bash -c 'touch demo.jar'
ENTRYPOINT ["java", "-jar", "demo.jar"]
# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# SpringBoot项目配置的端口号为9999,需要将9999暴露出去
EXPOSE 9999
5.在启动配置那里编辑docker配置


之后点击执行

可以根据方法一中的最后两步进行验证


方法三:用maven插件进行构建


开启docker远程访问,详细步骤见方法二

将dockerfile文件放到resource文件夹下

1.在pom文件中引入docker插件


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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>demo</description>
    <properties>
        <java.version>11</java.version>
        <docker-ip>服务器IP</docker-ip>
        <docker-url>http://${docker-ip}:2375</docker-url>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <dockerHost>${docker-url}</dockerHost>
                    <imageName>${project.artifactId}:${project.version}</imageName>
                    <!-- 在生成图像后将其推入的标志。默认为false -->
                    <pushImage>true</pushImage>
                    <imageTags>
                        <!-- 指定镜像标签,可以排至多个标签 -->
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <!--是否强制覆盖已有镜像-->
                    <forceTags>true</forceTags>
                    <!--方式一:1、指定Dockerfile文件所在目录,通过文件执行打包上传nexus私服-->
                    <dockerDirectory>src/main/resources</dockerDirectory>
                    <!-- 指定docker镜像打包参数,即dockerfile中使用的参数,通过${参数名}取值 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--指定需要复制的根目录,${project.build.directory}表示target目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件,${project.build.finalName}.jar表示打包后的jar包文件-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
2.运行mvn build命令
mvn docker:build


成功打包成镜像

可以根据方法一中的最后两步进行验证


基于第三步的配置进行镜像区分环境


以下文件需要配置到pom文件中,这里的配置每一个profile标签都是独立的,只有在打包的时候才会用到,也就是执行 mvn命令时通过 -P这个指令指定profile标签的id那么打包所用的一些参数配置会以你制定的profile为准。


    <profiles>
        <profile>
            <!--不同环境Profile的唯一id-->
            <id>dev</id>
            <properties>
                <!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个-->
                <profiles.active>dev</profiles.active>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <!--properties标签下定义的标签是个性化的,根据业务项目需要定制不同标签,-->
            <properties>
                <profiles.active>prod</profiles.active>
                <docker-url>服务器IP:2375</docker-url>
            </properties>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
                <docker-url>服务器IP:2375</docker-url>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

此时把之前在pom中<properties>定义的docker-url删除,在执行mvn打包镜像命令时添加 -P


<!--这里如果镜像统一都是由一个docker服务器打包的话,在镜像的名字中添加上test或者prod,再或者其他标识不同环境的信息即可,我这里是使用的profiles.active作区分,对应的是我上面声明的环境信息-->
<imageName>${project.artifactId}-${profiles.active}:${project.version}</imageName>
mvn -Ptest docker:build
相关文章
|
3月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
285 3
|
3月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
370 2
|
3月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
178 2
|
3月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
162 0
|
3月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
280 0
|
3月前
|
Java 应用服务中间件 Maven
第01课:Spring Boot开发环境搭建和项目启动
第01课:Spring Boot开发环境搭建和项目启动
505 0
|
21天前
|
前端开发 安全 Java
基于springboot+vue开发的会议预约管理系统
一个完整的会议预约管理系统,包含前端用户界面、管理后台和后端API服务。 ### 后端 - **框架**: Spring Boot 2.7.18 - **数据库**: MySQL 5.6+ - **ORM**: MyBatis Plus 3.5.3.1 - **安全**: Spring Security + JWT - **Java版本**: Java 11 ### 前端 - **框架**: Vue 3.3.4 - **UI组件**: Element Plus 2.3.8 - **构建工具**: Vite 4.4.5 - **状态管理**: Pinia 2.1.6 - **HTTP客户端
129 4
基于springboot+vue开发的会议预约管理系统
|
5月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
470 1
|
6月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
431 7
|
2月前
|
前端开发 JavaScript Java
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
本系统基于SpringBoot与Vue3开发,实现校园食堂评价功能。前台支持用户注册登录、食堂浏览、菜品查看及评价发布;后台提供食堂、菜品与评价管理模块,支持权限控制与数据维护。技术栈涵盖SpringBoot、MyBatisPlus、Vue3、ElementUI等,适配响应式布局,提供完整源码与数据库脚本,可直接运行部署。
101 0
基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】