• Docker部署SpringBoot项目


    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 images 命令查看构建好的镜像:

    ​ 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

  • 相关阅读:
    虎虎的小尾巴:作为交易员,从最初的新人到如今实现稳定盈利,一路走来你有过什么记忆非常深刻的亏损教训和体会? 2018-08-09
    虎虎的小尾巴:期货市场的资金吸引力?
    虎虎的小尾巴
    虎虎的小尾巴:高质量的期货研究报告去哪里找?
    虎虎的小尾巴:如何看待2017.8.7PTA1801一分钟内闪崩下跌6%?
    虎虎的小尾巴:交易逻辑重于一切 2017-08-13
    虎虎的小尾巴:期货数据入门
    虎虎的小尾巴:期货交易在使用基本面分析操作过程中要注意哪些问题?怎么控制风险? 2017-03-11
    Android开发-- 使用ADT23 的一些问题
    Git 学习笔记--3.EGit使用手册
  • 原文地址:https://www.cnblogs.com/leizzige/p/12245420.html
Copyright © 2020-2023  润新知