Docker部署SpringBoot项目

Stella981
• 阅读 713

Spring Boot 项目代码

首先构建一个简单的 Spring Boot 项目,然后给项目添加 Docker 支持,最后对项目进行部署。

  • 在 pom.xml 中添加SpringBoot依赖,并添加 Web 支持。

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-parent</artifactId>
            <version>2.2.0.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
        </dependencies>
    
  • 创建 启动类 并添加 Controller ,这里为了方便写在一起,其中有一个 Hello 方法,访问时返回 Hello Docker。

    /**
     * @author Arley
     * data:2020/1/30
     * desc:Docker中部署springboot项目
     */
    @RestController
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, "--server.port=8888");
        }
    
        @GetMapping("/hello")
        public String Hello() {
            return "Hello Docker";
        }
    }
    

添加完成之后,启动项目,访问 http://127.0.0.1:8888/hello ,页面返回 Hello Docker,说明项目配置正常。

在 SpringBoot 中添加 Docker 支持

  • 在 pom.xml 中添加 Docker 镜像支持:

        <!--  Docker 镜像前缀名 -->
        <properties>
            <docker.image.prefix>springboot</docker.image.prefix>
        </properties>
    
  • plugins 中添加 Docker 构建插件:

    <build>
            <plugins>
                <!-- 添加这个是因为我启动项目时遇到个问题(jar中没有主清单属性)
                      添加下面这个插件即可-->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.arley.Application</mainClass>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- Docker maven plugin -->
                <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>            
                        <!-- Dockerfile 文件存放目录 -->
                        <dockerDirectory>src/main/resources/docker</dockerDirectory>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <!-- jar包所在目录,缺省为target -->
                                <directory>${project.build.directory}</directory>
                                <!-- jar包名,缺省为 ${project.artifactId}-${project.version} -->
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
                <!-- Docker maven plugin -->
            </plugins>
        </build>
    

创建 Dockerfile 文件

在目录 src/main/resources/docker 下创建 Dockerfile 文件,Dockerfile 文件来说明如何构建镜像

  • Dockerfile 文件内容:

    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ADD boot-docker-1.0-SNAPSHOT.jar app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    

    参数说明:

    FROM openjdk:8-jdk-alpine : 使用 JDK8 环境作为基础镜像

    VOLUME /tmp : 在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到tomcat容器的工作目 录/tmp目录

    ADD boot-docker-1.0-SNAPSHOT.jar app.jar : 复制文件并且重命名。boot-docker-1.0-SNAPSHOT.jar 为你的 SpringBoot 项目达成的 jar 包名。

    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] :

    为了缩短 Tomcat 的启动时间,添加 java.security.egd 的系统属性指向 /dev/urandom 作为 ENTRYPOINT。

环境搭建

  • 首先安装 Docker ,可以看我之前的教程

    https://www.cnblogs.com/leizzige/p/12183038.html

  • 安装 Jdk

    yum -y install java-1.8.0-openjdk*;
    

    配置环境变量:

    打开 vim /etc/profile,添加以下内容 :

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
    export PATH=$PATH:$JAVA_HOME/bin
    

    修改完成之后,使其生效:source /etc/profile,输入 java -version 返回版本信息则安装正常。

  • 安装 Maven

    maven下载地址

    解压:tar -zxvf apache-maven-3.5.2-bin.tar.gz 移动:mv apache-maven-3.5.2 /usr/local/maven

    修改环境变量, 在 /etc/profile 中添加以下几行:

    MAVEN_HOME=/usr/local/maven
    export MAVEN_HOME
    export PATH=${PATH}:${MAVEN_HOME}/bin
    

    记得执行 source /etc/profile 使环境变量生效。输入 mvn -version 返回版本信息则安装正常。 这样整个构建环境就配置完成了。

使用 Docker 部署 Spring Boot 项目

将我们写好的 SpringBoot 项目复制到服务器中,进入项目的 pom 文件所在目录下进行打包测试。

  • 打包:mvn clean compile package ,启动 : java -jar target/xxx-jar

  • 看到 Spring Boot 的启动日志后表明环境配置没有问题。 使用 DockerFile 构建镜像 : mvn package docker:build

  • 第一次构建,看到以下内容表示构建成功了:

Docker部署SpringBoot项目

  • 使用 docker images 命令查看构建好的镜像:

Docker部署SpringBoot项目

​ springboot/boot-docker 就是我们构建好的镜像,下一步运行该镜像:

docker run -itd -p 8888:8888 --name spring-boot-docker e879d41f3a71

​ 启动完成之后 docker ps 查看正在运行的容器,可以看到我们构建的 spring-boot-docker 容器正在运行,

​ 访问浏览器 http:http://47.98.161.xxx:8888/hello ,返回 Hello Docker。

使用 Docker 部署 SpringBoot 项目成功!!!!

项目地址 :https://github.com/CrazyArley/springboot

点赞
收藏
评论区
推荐文章
Easter79 Easter79
2年前
springboot使用之快捷打包部署
本篇关键知识点:Maven的assembly插件实现自定义打包部署(包含依赖jar包) 目前springboot项目的几种常见的部署方式。1\.使用docker容器去部署,将springboot的应用构建成一个dockerimage,然后通过容器去启动镜像,这种方式在
Easter79 Easter79
2年前
sprintboot
一、邮件发送使用springboot自带的邮件系统就能实现邮件的发送,首先导入依赖:1、新建springboot项目,添加依赖<dependency<groupIdorg.springframework.boot</groupId<artifactIdspringbootstartermail
Easter79 Easter79
2年前
springboot热部署实战
每次代码改动后都需要重新手动Run项目,心累,在网上找了下,发现SpringBoot提供了热部署的方案,改动代码后自动编译打包,现在将热部署的配置方法记下来:第一步:在pom.xml中添加依赖,导入springbootdevtools<dependency<groupIdorg.springframework
Easter79 Easter79
2年前
SpringBoot打包部署简单说明
SpringBoot项目打包部署1\.jar包部署添加一个插件<!打包插件<build<plugins<plugin<groupId
Stella981 Stella981
2年前
Spring Boot 整合 JdbcTemplate 多数据源
学习在SpringBoot中使用JdbcTemplate多数据源来操作不同的数据库。JdbcTemplate是Spring自带的,虽然功能没有MyBatis强大,但使用简单。1创建工程并配置新建SpringBoot项目springbootjdbctemplatemulti,添加Web/J
Stella981 Stella981
2年前
SpringBoot打包部署简单说明
SpringBoot项目打包部署1\.jar包部署添加一个插件<!打包插件<build<plugins<plugin<groupId
Easter79 Easter79
2年前
Springboot基于assembly的服务化打包方案
  在使用assembly来打包springboot微服务项目前,我想说一说,目前springboot项目的几种常见的部署方式。1. 使用docker容器去部署,将springboot的应用构建成一个dockerimage,然后通过容器去启动镜像,这种方式在需要部署大规模的应用和应用扩展时是非常方便的,属于目前工业级的部署方案,但是需要掌握d
Stella981 Stella981
2年前
Linux下部署springboot项目的步骤及过程
最近在研究将springboot项目部署到Linux服务器上,由于springboot是内嵌了tomcat,所以可以直接将项目打包上传至服务器上。我是在idea上的项目,所以我就基于此说下过程。(一)打包你的项目1、在pom文件中添加springboot的maven插件 !(https://img2018.cnblogs.com/blog/1
Stella981 Stella981
2年前
SpringBoot使用assembly进行项目打包教程1
一、基本介绍1.部署方式介绍目前来说,SpringBoot项目有如下两种常见的部署方式:一种是使用docker容器去部署。将SpringBoot的应用构建成一个dockerimage,然后通过容器去启动镜像,这种方式在需要部署大规模的应用、以及应用扩展时是非常方便的,属于目前工业级的部署方案,但是需要掌握
Stella981 Stella981
2年前
SpringBoot 部署到linux环境
第一部分:Springboot项目部署说明:工具使用的是IEDA第一:项目打包1.在pom文件中添加插件<build<plugins<plugin<groupId