Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署。这篇文章介绍一下如果借助 maven 来快速的生成微服务的镜像以及快速启动服务。

其实将 Spring Boot 项目用 Docker 部署也不是什么多么神秘的技术,也要先生成镜像,再用镜像启动容器,如果说有什么方便的地方,也就是一些工具可以帮助我们节省手动操作的过程。

知识背景:

掌握 docker 的安装以及基本的操作,熟悉 Dockerfile 文件创建镜像的方法。

创建 Spring boot 项目

1、添加 application.yml 配置文件

server:
port: 7000
spring:
application:
name: spring-boot-docker-sample

2、创建项目启动文件

@SpringBootApplication
public class Application { public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}

3、添加一个 RestController 用于服务是否正常可用

@RestController
public class DockerController { @GetMapping(value = "hello")
public Object sayHello(){
return "hello! spring boot with docker.";
}
}

之后启动服务,访问 localhost:7000/hello 查看,如果正常访问,则进入下一步操作。

利用 maven 插件生成镜像文件

我们这里用到的 Maven 插件是 dockerfile-maven-plugin

1、在 pom 文件中添加上述插件依赖

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.9</version>
<executions>
<execution>
<id>tag-latest</id>
<phase>deploy</phase>
<goals>
<goal>build</goal>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<tag>latest</tag>
</configuration>
</execution>
<execution>
<id>tag-version</id>
<phase>deploy</phase>
<goals>
<goal>build</goal>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<tag>${project.version}</tag>
</configuration>
</execution>
</executions> </plugin>

2、这个 maven 插件是依赖于 Dockerfile 文件的,所以使用命令之前需要先手动创建 Dockerfile 文件,注意这个 Dockerfile 文件要和 pom.xml 文件同级,简单的 Dockerfile 内容如下:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/docker-sample-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

简单解释一下:

  • 先从中央仓库或者你配置的代理仓库(如阿里云镜像仓库)拉取 openjdk 镜像;
  • 然后设置一个挂载点;
  • 拷贝 target 目录下的 Spring boot 项目运行包,并改名为 app.jar;
  • 设置启动命令 java -jar app.jar

3、然后使用命令 sudo mvn package dockerfile:build 就可以生成镜像到本地仓库了,生成后的镜像如下:

这一步翻译为 docker 命令的话就是下面两条:

docker build -t registry.cn-beijing.aliyuncs.com/fengzheng/kite:1.0-SNAPSHOT .
docker build -t registry.cn-beijing.aliyuncs.com/fengzheng/kite:latest

4、之后根据生成的镜像,就可以以 docker 方式启动服务了

docker run -d -p 7000:7000 registry.cn-beijing.aliyuncs.com/fengzheng/kite:latest

将镜像推送到阿里云 docker 仓库

访问 https://dev.aliyun.com/search.html,然后随意输入一个镜像名称,例如 redis,如果你没有注册过,阿里云便会调到登录注册页,之后按照提示注册即可。

注册成功后,到镜像管理界面,会提示你输入镜像仓库服务的密码,也就是下方配置文件中的 Registry登录密码。

注册成功后,设置一个命名空间,并在命名空间下新建一个仓库。例如本例中我设置的命名空间是fengzheng,仓库名称为 kite

之后,在 pom.xml 文件中 plugin 节点增加如下配置:

<configuration>
<username>阿里云账号名</username>
<!--在容器镜像服务控制台"设置Registry登录密码"-->
<password>Registry登录密码</password>
<!--registry.cn-hangzhou.aliyuncs.com/namespace/repositoryname-->
<repository>registry.cn-beijing.aliyuncs.com/fengzheng/kite</repository>
<tag>latest</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>

设置好用户名和密码,仓库地址等参数,因为是私有仓库,所以需要用户名和密码。

然后运行命令,将以 latest${project.version} 为 tag 的镜像推送到阿里云镜像仓库。

sudo mvn dockerfile:push

或者,运行命令,发布某一个指定 tag 的镜像。

sudo mvn dockerfile:push@tag-version

sudo mvn dockerfile:push@tag-latest

最后,各位同学不妨到我的公众号里互动一下 : 古时的风筝 ,进入公众号可以加入交流群

Spring Boot 和 Docker 实现微服务部署的更多相关文章

  1. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  2. 手把手教你用Spring Cloud和Docker构建微服务

    什么是Spring Cloud? Spring Cloud 是Pivotal提供的用于简化分布式系统构建的工具集.Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接 ...

  3. 使用 Spring Cloud 和 Docker 构建微服务架构

    如何使用Spring Boot.Spring Cloud.Docker和Netflix的一些开源工具来构建一个微服务架构. 本文通过使用Spring Boot.Spring Cloud和Docker构 ...

  4. Spring Cloud和Docker搭建微服务平台

    用Spring Cloud和Docker搭建微服务平台 This blog series will introduce you to some of the foundational concepts ...

  5. Spring boot学习1 构建微服务:Spring boot 入门篇

    Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  6. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  7. Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务

    Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具:Spr ...

  8. 基于Spring Boot、Spring Cloud、Docker的微服务系统架构实践

    由于最近公司业务需要,需要搭建基于Spring Cloud的微服务系统.遍访各大搜索引擎,发现国内资料少之又少,也难怪,国内Dubbo正统治着天下.但是,一个技术总有它的瓶颈,Dubbo也有它捉襟见肘 ...

  9. 使用Spring Boot,Spring Cloud和Docker实现微服务架构

    https://github.com/sqshq/PiggyMetrics     Microservice Architecture with Spring Boot, Spring Cloud a ...

随机推荐

  1. 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包 ...

  2. 《前端之路》之 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏

    目录 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & ...

  3. C#语言介绍

    C#(读作“See Sharp”)是一种简单易用的新式编程语言,不仅面向对象,还类型安全. C# 源于 C 语言系列,C.C++.Java 和 JavaScript 程序员很快就可以上手使用. C# ...

  4. [PHP] sys_get_temp_dir()和tempnam()函数报错与环境变量的配置问题

    1.项目运行过程中遇到个问题,保存临时文件时,一直返回false 2.根据经验这个是在/tmp目录下建立临时文件,所以检查了一遍权限问题,发现权限没有问题 3.查出sys_get_temp_dir() ...

  5. Mybaits-plus实战(二)

    1. Mybaits-plus实战(二) 1.1. mybatis-plus插件 1.1.1. 用法 先举个例子介绍用法,如下:直接作为Bean注入,一般来讲插件太多印象性能,所以大部分插件都只在测试 ...

  6. css中的position(定位)

    一.position语法与结构 position语法: position : static absolute relative position参数:static : 无特殊定位,对象遵循HTML定位 ...

  7. Python学习日记(一):拜见小主——Python

    近日学习Python,特将学习过程及一点心得记录于此. 由于之前做过一个Java爬虫的项目,虽然很长时间没有碰过爬虫,但是小郭同学有一颗不死的爬虫心,哈哈.最近在互联网上找一些电影的时候,有很多电影只 ...

  8. Linux新手随手笔记1.8

    配置网卡服务 将网卡的配置文件,保存成模板,叫做会话. nmcli命令查看网卡信息.nmcli是一款基于命令行的网络配置工具 只有一个网卡信息,下面我们再添加一个. 公司:静态IP地址 家庭:DHCP ...

  9. 滚动视差?CSS 不在话下

    何为滚动视差 视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验. 作为网页设计的热点趋势,越来越多的网站应用了这项技术. 通常 ...

  10. Linux命令(精简版)

    1:init 0 关机(root用户可用) 2:exit退出终端 3:who查看登录用户 4:whoami 查看当前用户 5:data 查看当前时间       data  “月日时分年”  修改当前 ...