第一个 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>
注意:
- Spring Boot Maven plugin 提供了很多方便的功能: 
 1)它收集的类路径上所有 jar 文件,并构建成一个单一的、可运行的jar,这使得它更方便地执行和传输服务。
 2)它搜索的 public static void main() 方法来标记为可运行的类。
 3)它提供了一个内置的依赖解析器,用于设置版本号以匹配 Spring Boot 的依赖。您可以覆盖任何你想要的版本,但它会默认选择的 Boot 的版本集。
- 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
第一个 spring Boot 应用通过Docker 来实现构建、运行、发布的更多相关文章
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用
		本文演示了如何用 Docker 构建.运行.发布来一个 Spring Boot 应用. Docker 简介 Docker 是一个 Linux 容器管理工具包,具备“社交”方面,允许用户发布容器的 im ... 
- 使用docker构建第一个spring boot项目
		在看了一些简单的docker命令之后 打算自己尝试整合一下docker+spring boot项目本文是自己使用docker+spring boot 发布一个项目1.docker介绍 docke是提供 ... 
- windows环境下,spring boot服务使用docker打包成镜像并推送到云服务器私有仓库
		最近在淘宝上学习springcloud教程,其中有几节课是讲解讲本地springboot服务打包成镜像并推送到云服务器私有仓库,但是教程里面用的事Mac环境,我的是Windows环境,而且课程里面没有 ... 
- 学习Spring Boot:(二十三)Spring Boot 中使用 Docker
		前言 简单的学习下怎么在 Spring Boot 中使用 Docker 进行构建,发布一个镜像,现在我们通过远程的 docker api 构建镜像,运行容器,发布镜像等操作. 这里只介绍两种方式: 远 ... 
- 一键部署 Spring Boot 到远程 Docker 容器,就是这么秀!
		不知道各位小伙伴在生产环境都是怎么部署 Spring Boot 的,打成 jar 直接一键运行?打成 war 扔到 Tomcat 容器中运行?不过据松哥了解,容器化部署应该是目前的主流方案. 不同于传 ... 
- Spring Boot从入门到精通(一)搭建第一个Spring Boot程序
		Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ... 
- 第一章 第一个spring boot程序(转载)
		第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html 环境: jdk:1.8.0_73 mave ... 
- 我的第一个spring boot程序(spring boot 学习笔记之二)
		第一个spring boot程序 写在前面:鉴于spring注解以及springMVC的配置有大量细节和知识点,在学习理解之后,我们将直接进入spring boot的学习,在后续学习中用到注解及其他相 ... 
- 研磨SpringCloud系列(一)第一个Spring Boot应用
		在此之前,给大家推荐几个东西. STS,Spring官方基于eclipse做的扩展ide.Spring官方背书. 第二个,lombok,注解生成get/set,构造以及基本方法的插件,"隐藏 ... 
随机推荐
- Bootstrap历练实例:下拉菜单插件方法的使用
			<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ... 
- VueJS坎坷之路222--vue cli 3.0引入静态文件
			前两天准备搭建一个vue小项目,当引入jquery脚本的时候一直找不到引入的文件: 在网上搜了好多vue添加静态文件的方法,发现大多数方法都是创建一个与文件夹src同等级的文件夹static存放引入的 ... 
- 洛谷 P2717 寒假作业
			https://www.luogu.org/problemnew/show/P2717 $n \le 1004枚举区间,挨个计算,判断,时间复杂度$O(n^3)$. $n \le 5000$,预处理出 ... 
- ubuntu16.04安装mongodb,创建数据库管理员,上传文件到服务器上
			1.导入软件源得公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 2.为mongodb创建软件 ... 
- setup/hold 分析
			分析说明:D2:目的寄存器:D1:源寄存器: edge2:下一个时钟上升沿:edge1:当前时钟上升沿:edge0:当前时钟上升沿的前一个时钟沿:如下图: 建立时间:触发器D2(数据要到达目的的地方) ... 
- 多本Python极速入门最佳书籍,不可错过的Python学习资料!
			Python作为现在很热门的一门编程语言,介于Python的友好,许多的初学者都将其作为首选,为了帮助大家更好的学习Python,我筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. ... 
- 建立,查询二叉树 hdu  5444
			Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ... 
- HTTP认证之摘要认证——Digest(二)
			导航 HTTP认证之基本认证--Basic(一) HTTP认证之基本认证--Basic(二) HTTP认证之摘要认证--Digest(一) HTTP认证之摘要认证--Digest(二) 在HTTP认证 ... 
- Linux学习-编译前的任务:认识核心与取得核心原始码
			什么是核心 (Kernel) Kernel 其实核心就是系统上面的一个文件而已, 这个文件包含了驱动主机各项硬 件的侦测程序与驱动模块. 核心文件通常被放置成 /boot/vmlinuz-xxx ,不 ... 
- HDU 5528 Count a * b 欧拉函数
			题意: 定义函数\(f(n)\)为\(i \cdot j \not\equiv 0 \; (mod \; n)\)的数对\((i,j)\)的个数\((0 \leq i,j \leq n)\) \(g( ... 
