zoukankan      html  css  js  c++  java
  • 第一个 spring Boot 应用通过Docker 来实现构建、运行、发布

    1. Docker 简介

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker image 是用于运行容器化进程的方案,在本文中,我们将构建一个简单的 Spring Boot 应用程序。

    2.环境搭建

    • JDK 1.8+
    • Maven 3.0+
    • Docker 最新版。

    3.用 Maven 构建项目

    3.1 创建目录结构

     mkdir -p src/main/java/com/lidong/demo
    • 1

    在linux或者mac系统中。
    这里写图片描述

    3.2 创建 pom.xml 文件

    <?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>com.lidong.demo</groupId>
        <artifactId>lidong-spring-boot-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.1.RELEASE</version>
            <relativePath/>
        </parent>
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <docker.image.prefix>springio</docker.image.prefix>
        </properties>
        <dependencies>
            <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>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <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>0.4.13</version>
                    <configuration>
                        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                        <dockerDirectory>src/main/docker</dockerDirectory>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>

    注意:

    1. Spring Boot Maven plugin 提供了很多方便的功能:
      1)它收集的类路径上所有 jar 文件,并构建成一个单一的、可运行的jar,这使得它更方便地执行和传输服务。
      2)它搜索的 public static void main() 方法来标记为可运行的类。
      3)它提供了一个内置的依赖解析器,用于设置版本号以匹配 Spring Boot 的依赖。您可以覆盖任何你想要的版本,但它会默认选择的 Boot 的版本集。

    2. Spotify 的 docker-maven-plugin 插件是用于构建 Maven 的 Docker Image
      1)imageName指定了镜像的名字,本例为 springio/lidong-spring-boot-demo
      2)dockerDirectory指定 Dockerfile 的位置
      3)resources是指那些需要和 Dockerfile 放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入。

    4.编写 第一个Spring Boot 应用

    编写一个简单的 Spring Boot 应用 :

    src/main/java/com/lidong/demo/SampleController.java:

    package com.lidong.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * @项目名称:lidong-dubbo
     * @类名:SampleController
     * @类的描述:
     * @作者:lidong
     * @创建时间:2017/2/19 上午9:34
     * @公司:chni
     * @QQ:1561281670
     * @邮箱:lidong1665@163.com
     */
    @Controller
    @SpringBootApplication
    public class SampleController {
    
        @ResponseBody
        @RequestMapping(value = "/")
        String home(){
            return "Hello Docker World";
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SampleController.class,"--server.port=8081");
        }
    }
    
    • 类用 @SpringBootApplication @RestController 标识,可用 Spring MVC 来处理 Web 请求。
    • @RequestMapping 将 / 映射到 home() ,并将”Hello Docker World” 文本作为响应。
    • main() 方法使用 Spring Boot 的 SpringApplication.run() 方法来启动应用。

    5.运行程序

    5.1使用Maven命令
    mvn package

    运行:

    java -jar target/lidong-spring-boot-demo-1.0-SNAPSHOT.jar

    访问项目

    如果程序正确运行,浏览器访问 http://localhost:8081/,可以看到页面 “Hello Docker World.” 字样。

    5.2 使用IDEA 插件

    这里写图片描述

    6.将项目容器化

    Docker 使用 Dockerfile 文件格式来指定 image 层,

    创建文件 src/main/docker/Dockerfile:

    FROM frolvlad/alpine-oraclejdk8:slim
    VOLUME /tmp
    ADD lidong-spring-boot-demo-1.0-SNAPSHOT.jar app.jar
    RUN sh -c 'touch /app.jar'
    ENV JAVA_OPTS=""
    ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

    解释下这个配置文件:

    VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
    项目的 jar 文件作为 “app.jar” 添加到容器的
    ENTRYPOINT 执行项目 app.jar。为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source
    构建 Docker Image

    执行构建成为 docker image:

    mvn package docker:build

    运行

    运行 Docker Image

    docker run -p 8081:8081 -t springio/lidong-spring-boot-demo

    这里写图片描述

    看到这个Spring的图标。就以为这我们在docker 上发布Spring boot 程序已经完成。

    接下来去访问在浏览器访问 http://localhost:8081/,可以看到页面 “Hello Docker World.” 字样。

    参考资料:
    http://spring.io/guides/gs/spring-boot-docker/

    在这里是一个简单的spring boot的入门。后面会详细介绍Spring-boot 构建微服务一些具体的知识。

    原文地址:https://blog.csdn.net/u010046908/article/details/56008445
  • 相关阅读:
    [rabbitmq] python版本(二) 工作队列
    [rabbitmq] python版本(一)HelloWorld
    rabbitmq安装上手
    leetcode1 两数之和
    mybatis学习笔记(一)入门上手
    神经网络简介
    hexo+github pages搭建个人博客
    简单RTSCamera实现
    数据结构复习:树
    LINQ
  • 原文地址:https://www.cnblogs.com/jpfss/p/10929755.html
Copyright © 2011-2022 走看看